我一直致力于设置自动RPM构建,并且我希望在继续执行任何构建步骤之前对SPEC文件执行简单测试。我遇到的问题是,工作似乎总是跳到部署阶段。以下是我的.gitlab-ci.yml的相关摘录:
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
我没有发现任何问题或在线文档向我正确解释,所以任何帮助都表示赞赏!
答案 0 :(得分:1)
你有一个工作的所有阶段都不起作用。你需要将它分成三个不同阶段的单独工作。
的引用首先,所有构建作业都是并行执行的。
如果构建的所有作业都成功,则测试作业将并行执行。
如果测试的所有作业都成功,则部署作业将并行执行。
如果部署的所有作业都成功,则提交将标记为成功。
如果以前的任何作业失败,则提交被标记为失败,并且不会执行更多阶段的作业。
这样的事情应该有效:
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
答案 1 :(得分:0)
我认为你假设这些阶段是建立在彼此之上的,而事实并非如此。如果您的某个阶段需要预先安装的软件包,则必须添加before_script
指令。将这些阶段想象成:test-if-build-succeeded,test-if-depoy-succeeded等。