2016-02-08 76 views
2

我一直在设置一个自动化的RPM构建,并且我想在执行任何构建步骤之前对SPEC文件执行一个简单的测试。我遇到的问题是,这个工作似乎总是跳到部署阶段。这里是我的.gitlab-ci.yml的相关片段:gitlab-ci阶段的问题

stages: 
    - test 
    - build 
    - deploy 

job1: 
    stage: test 
    script: 
    # Test the SPEC file 
    - su - newbuild -c "rpmbuild --nobuild -vv ~/rpmbuild/SPECS/package.SPEC" 

    stage: build 
    script: 
    # Install our required packages 
    - yum -y install openssl-devel freetype-devel fontconfig-devel libicu-devel sqlite-devel libpng-devel libjpeg-devel ruby 

    # Initialize the submodules to build 
    - git submodule update --init 

    # build the RPM 
    - su - newbuild -c "rpmbuild -ba --target=`uname -m` -vv ~/rpmbuild/SPECS/package.SPEC" 

    stage: deploy 
    script: 
    # move the RPM/SRPM 
    - mkdir -pv $BUILD_DIR/$RELEASEVER/{SRPMS,x86_64} 
    - 'for f in $WORK_DIR/rpmbuild/RPMS/x86_64/*; do cp -v "$f" $BUILD_DIR/$RELEASEVER/x86_64; done' 
    - 'for f in $WORK_DIR/rpmbuild/SRPMS/*; do cp -v "$f" $BUILD_DIR/$RELEASEVER/SRPMS; done' 

    # create the repo 
    - createrepo -dvp $BUILD_DIR/$RELEASEVER 

    # update latest 
    - 'if [ $CI_BUILD_REF_NAME == "master" ]; then rm $PROJECT_DIR/latest; ln -sv $(basename $BUILD_DIR) $PROJECT_DIR/latest; fi' 
    - 'if [ $CI_BUILD_REF_NAME == "devel" ]; then rm $PROJECT_DIR/latest-dev; ln -sv $(basename $BUILD_DIR) $PROJECT_DIR/latest-dev; fi' 

    tags: 
    - repos 

我还没有发现有任何疑问或联机文档正确解释这个给我,让任何帮助表示赞赏!

回答

1

你在一份工作中没有任何工作的所有阶段。你需要把它分成三个不同阶段的个人工作。从documentation

报价:

先建的所有作业,并行执行。

如果所有构建作业都成功,​​则测试作业将并行执行。

如果所有测试作业成功,则并行执行部署作业。

如果所有部署作业成功,则提交被标记为成功。

如果任何以前的作业失败,则提交被标记为失败,并且不执行进一步阶段的作业。

像这样的东西应该工作:

stages: 
    - test 
    - build 
    - deploy 

do_things_on_stage_test: 
    script: 
    - do things 
    stage: test 


do_things_on_stage_build: 
    script: 
    - do things 
    stage: build 


do_things_on_stage_deploy: 
    script: 
    - do things 
    stage: deploy 
0

我想你假设阶段建立在彼此的顶部,这是情况并非如此。如果您的某个阶段需要预装软件包,则必须添加before_script指令。考虑如下阶段:测试如果构建成功,测试如果保留成功等。