2

我一直致力于建立一个自动化的 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

我没有找到任何问题或在线文档来正确地向我解释这一点,因此感谢您的帮助!

4

2 回答 2

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
于 2016-02-12T10:48:32.653 回答
0

我认为您认为这些阶段是建立在彼此之上的,但事实并非如此。如果您的某个阶段需要诸如预安装包之类的东西,则必须添加before_script指令。将阶段想象为:test-if-build-succeeds、test-if-depoy-succeeds 等。

于 2016-11-07T10:22:45.333 回答