2016-02-08 6 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. Подумайте о таких этапах, как: test-if-build-successs, test-if-depoy-successs и т. Д.

Смежные вопросы