2016-02-08 109 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指令。考慮如下階段:測試如果構建成功,測試如果保留成功等。