2014-09-19 7 views
0

프로젝트 폴더 나 파일이 수정되거나 FileVersionInfo가 변경 될 때까지 빌더가 코드를 실행하도록 스케줄을 작성하도록 master.cfg를 구성하는 방법이 있습니까?특정 이벤트에 의해 buildbot이 작업을 실행하는 방법은 무엇입니까?

나는 그것이 임시 해결책이라는 것을 알고 있지만, 개발자가 새로운 버전의 제품을 컴파일 한 직후에 Build Verification Tests를 실행하는 데 필요하며 CVS에는 많은 프로젝트가 개발되어 있기 때문에 프로젝트 폴더 용 스캐너가 필요합니다. 여기

는 master.cfg에서 추출됩니다 BuildFactory에서 파생 된 일반 클래스있다

def create_builders_and_schedule_it(factory, build_slaves, **kwargs): 
    # kwargs: change_filter=None, nightly=None, trigger_name=None) 

    builder_names = [] 

    if hasattr(factory, 'subcategory'): 
     cat = "%s_%s" % (factory.category, factory.subcategory) 
    else: 
     cat = factory.category 

    if 'change_filter' in kwargs: 
     change_filter = kwargs['change_filter'] 
    else: 
     change_filter = filter.ChangeFilter(branch = factory.branch) 

    for i_slave in build_slaves: 
     builder_name = "%s_%s" % (cat, i_slave) 
     builder_names.append(builder_name) 
    c['builders'].append(
     BuilderConfig(name = builder_name, 
         category = factory.category, 
         factory = factory, 
         slavename = i_slave 
       )) 

    # every task has 'forced' scheduler at least 
    c['schedulers'].append(
     ForceScheduler(name = cat + "_force", 
         builderNames = builder_names)) 

    # every task has 'on commit' scheduler 
    c['schedulers'].append(
     SingleBranchScheduler(name = cat + "_singlebranch", 
         builderNames = builder_names, 
         change_filter = change_filter)) 

    # some task can be scheduled 
    if 'nightly' in kwargs: 
     c['schedulers'].append(timed.Nightly(
           name = cat + '_nightly', 
           branch = factory.branch, 
           builderNames = builder_names, 
           hour = kwargs['nightly'][0], minute = kwargs['nightly'][1]))         

    if 'trigger_name' in kwargs: 
     c['schedulers'].append(
      Triggerable(
       name = kwargs['trigger_name'], 
       builderNames = builder_names)) 

: 이제

class Autotests(BuildFactory): 
    """ Build products from Autotests repository """ 
    def __init__(self, branch): 
     BuildFactory.__init__(self) 
     self.category = "autotests" 
     self.branch = branch 
     self.addStep(
      Git(repourl = AUTOTESTS_REPO, branch = branch)) 

    def build_source_archive(self): 
     self.subcategory = "source" 
     self.addStep(
      ShellCommand(
       workdir = "build", 
       command = ["./upload_to_binary_repo.sh"])) 
     return self 

    def run_BVT_prod(self): 
     self.subcategory = "BVT_prod" 
     self.addStep(
      ShellCommand(
       workdir = "build/BVT_tests/prod", 
       env = {'PATH':"/usr/bin:/bin", 'VIRTUAL_ENV':''}, 
       command = ["./bvt_runner.sh"])) 
     return self 

우리는 방법과 클래스를 가지고, 우리

create_builders_and_schedule_it(
    Autotests("devel").run_BVT_Prod(), 
    ['VIX_runner'], 
    nightly = (2,0) 
) 

이런 종류의 검사를 수행하는 일반적인 방법이 있습니까? 아니면 다른 방향으로보아야합니까?

답변

0

는 다음과 같은 라인에서 사용자 정의 FileExists의 버전, 뭔가 사용할 수 있습니다 : 단지 파일을 검사 보인다 이름에서

from buildbot.steps.slave import FileExists 
class CustomFileExists(FileExists): 
    # By default false 
    output_files_exist = False 

    def __init__(self, file, **kwargs): 
     CustomFileExists.output_files_exist = False 
     FileExists.__init__(self, file, **kwargs) 

    # Override the commandComplete 
    def commandComplete(self, cmd): 
     if not cmd.didFail(): 
      # for e.g. check the last modification time on the file 
      # or do your own cooking to check whether to proceed or not !! 
      s = cmd.updates["stat"][-1] 
      if s[stat.ST_MTIME] > s[stat.ST_CTIME]: 
       # If it satisfies your condition, then set it to True 
       CustomFileExists.output_files_exist = True 
     self.finished(SUCCESS) 
     return 

을하지만 당신은 할 수있는 어떤 파일로, 예를 들어, stat 명령을 사용하십시오.

이 빌더의 기본 빌드 구성에서 테스트를 실행하기 전에 새 단계를 추가해야합니다. 뭔가 같이 : 파일이 발견되지 않는 (또는 제약 조건을 만족하지 않은) 경우

project_file = r'path\to\the\built\product\image' 
factory.addStep(CustomFileExists(project_file)) 

, 거기 중지 및 테스트는 실행되지 않습니다.

이 단계는 슬레이브에서 실행됩니다. 즉, 파일이 마스터가 아닌 슬레이브에서 검사됩니다.

이 정보가 도움이되기를 바랍니다.