0

私のSVNリポジトリのレイアウト...

Project_Name(root)/trunk
            /branches/
            /branches/new_feature_of_trunk1
            /branches/new_feature_of_trunk2
            /tags/
            /tags/ETC1
            /tags/ETC2

たとえば、私のリポジトリのいくつかのブランチを構築するためにビルドボットを作成しようとしていました... /trunk および /branches/new_feature_of_trunk1 .これは私がそれをコーディングする方法です

from buildbot.changes.svnpoller import SVNPoller, split_file_branches
source_code_svn_url='http://domain.com/svn/Project_Name/'
c['change_source'].append(
    SVNPoller(
        svnurl=source_code_svn_url,
        split_file=split_file_branches,
        pollinterval=60,
        histmax=10,
    )
)

def modified_files(change):
    for name in change.files:
        if name.endswith(".c"):
            return True
        elif name.endswith(".h"):
            return True
    return False

from buildbot import scheduler
from buildbot.changes.filter import ChangeFilter
s1=scheduler.AnyBranchScheduler(
    name="Project_Test",
    treeStableTimer=2*60,
    change_filter=ChangeFilter(
        branch=[
            'trunk',
            'branches/new_feature_of_trunk1'
        ]
    ),
    builderNames=[
        "Windows-x64-VS10",
    ],
    fileIsImportant=modified_files
)

c['schedulers']=[s1]

from buildbot.process import factory
from buildbot.steps import source,shell
from buildbot.process.properties import WithProperties
from buildbot.config import BuilderConfig
step_source_svn=source.SVN(
    mode='copy',
    baseURL=source_code_svn_url,
    defaultBranch='trunk',
    retry=(30,2)
)

f2=factory.BuildFactory()
f2.addStep(step_source_svn)
f2.addStep(
    shell.Compile(
        command=[
            "devenv.com",
            "MakeMe.sln",
            "/build",
            "Release^|Win32"
        ],
        logEnviron=False
    )
)

問題はこれです.. defaultBranch='trunk' を追加したことは知っています。しかし、ルート全体ではなくトランクのみをチェックアウトするのはなぜですか? それから私はそれを削除するたびにdefaultBranch. このエラーが発生しました

exceptions.RuntimeError: ビルダー 'Windows-x64-VS10' に属する SVN ソース ステップは、どのブランチを使用するかを認識していません。これは、変更元がブランチを指定しておらず、defaultBranch が None であることを意味します。

次に、私が投稿したコードは、/trunk または /branches/new_feature_of_trunk1 に modified_files がある場合、ビルドマスターがスレーブにビルドするように指示するためのものです。同じ SVN リビジョンの両方のブランチに変更がある場合。次に、/branches/new_feature_of_trunk1... の前に /trunk を最初にコンパイルします。

しかし、私が言ったように、それは私が望むようには機能しません

4

2 に答える 2

0

私が知っている古い投稿ですが、このように来る他の人にとっては、これが役立つかもしれません:

ブランチのスケジューラを作成する必要があります。現在、ブランチ ビルディングは 1 つだけのように見えますが、ブランチを通過するスケジューラがあれば、うまくいくかもしれません。

Nightly(name="new1",          builderNames=["Project_Test"], branch="branches/new_feature_of_trunk1", onlyIfChanged=True, hour=range(0, 24, 2)),
Nightly(name="new2",          builderNames=["Project_Test"], branch="branches/new_feature_of_trunk2", onlyIfChanged=True, hour=range(0, 24, 2)),

すべてを一度にチェックアウトしようとしていて、コンパイル ステップですべてのブランチが作成される場合、source_code_svn_url は 1 つ上のブランチにする必要があります。

于 2012-12-14T16:14:19.703 に答える
0

1 つの変更セットに両方のブランチの変更が含まれている場合は、2 つの変更を作成し、変更ごとに 1 つのビルドをトリガーする必要があります。

于 2012-09-06T19:27:49.870 に答える