Gitlab-ci: как получить доступ к автоматическим тестам dayli и ручному развертыванию

Итак, у меня есть приложение Angular 6 / Material 6, и я создал вокруг него gitlab для непрерывной интеграции.

Я не уверен, как справиться с нужной мне обработкой: в основном мне нужно 2 этапа: тестирование и развертывание.

  • Отключить сборки gitlab-ci при нажатии
  • Этап тестирования должен запускаться cron, но этот cron не должен запускать развертывание.
  • Этап развертывания должен запускаться вручную, но затем следует запускать тесты, и этап развертывания не должен развертываться в случае сбоя тестов Karma.

На данный момент я получил вот такую ​​конф:

image: node:8.9.4

stages:
  - test
  - deploy

cache:
  paths:
    - node_modules/

before_script:
  - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Starting before scripts commands'
  - apt-get update -qq && apt-get install -y -qq sshpass
  - apt-get --yes install npm
  - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Setting registry to point verdaccio'
  - npm set registry http://192.168.1.20:4873/
  - echo [`date "+%d/%m/%y %H:%M:%S"`] '//192.168.1.20:4873/:_authToken=${NPM_TOKEN}'>.npmrc
  - apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3
    libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4
    libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1
    libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6
    ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget
  - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Installing all project libs'
  - npm install

# ********************************************* TESTS STAGE *********************************************
test_stage:
  stage: test
  environment: Staging
  script:
    - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Starting script part for test_stage'
    - npm install
    - ./node_modules/.bin/ng test --karma-config=karma.conf.js --watch=false
  only:
    - master
    - triggers
    # You want a cron to trigger the test build :
    # Include this line to crontab :
    # 0 4 * * * curl -X POST -F token=FOUND_IN_GITLAB -F ref=master -F "variables[IF YOU WANT SOME]=true" http://GITLAB_URL/api/v3/projects/PROJECT_NUMBER/trigger/builds
    # Get token in in gitlab section Triggers
    # Get PROJECT _NUMBER in gitlab section Triggers

  except:
    - pushes

# ********************************************* DEPLOY STAGE *********************************************
deploy_stage:
  stage: deploy
  environment: Staging
  only:
    - master

  script:
    - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Starting script part for deploy_stage'
    - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Compiling with NG BUILD'
    - ./node_modules/.bin/ng build --configuration=recette --prod
    - sshpass -V
    - export SSHPASS=$USER_PASS
    - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Deleting everything in archive folder'
    - sshpass -e ssh -o StrictHostKeyChecking=no [email protected] -pPORT "rm -rf /CHEMIN_ARCHIVE/archive/*"
    - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Copying server files into archive folder'
    - sshpass -e ssh -o StrictHostKeyChecking=no [email protected] -pPORT "cp -a /CHEMIN_SERVER/server/. /CHEMIN_ARCHIVEt/archive/"
    - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Deleting everything in server folder'
    - sshpass -e ssh -o StrictHostKeyChecking=no [email protected] -pPORT "rm -rf /CHEMIN_SERVER/server/*"
    - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Sending dist folder to livraison folder'
    - sshpass -e scp -P PORT -o StrictHostKeyChecking=no -r ./dist [email protected]:/CHEMIN_LIVRAISON/livraison
    - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Copying livraison files to server folder'
    - sshpass -e ssh -o StrictHostKeyChecking=no [email protected] -pPORT "cp -a /CHEMIN_LIVRAISON/livraison/. /CHEMIN_SERVER/server/"
    - echo -e [`date "+%d/%m/%y %H:%M:%S"`] '\E[0;36m=======> Deleting everything in livraison folder'
    - sshpass -e ssh -o StrictHostKeyChecking=no [email protected] -pPORT "rm -rf /CHEMIN_LIVRAISON/livraison/*"
  when: manual

Но, как видите, когда: manual работает. Это означает, что cron запускает сборку, он воспроизводит этап тестирования, а затем пропускает этап развертывания:

введите здесь описание изображения

Конечно, как и планировалось, я могу запустить эту фазу развертывания вручную, но тогда тесты не будут запускаться.

Итак, как мне добраться до цели: когда я запускаю сборку развертывания вручную, было бы здорово, если бы тесты можно было запускать, а если тесты не удались, развертывание не запускалось?

Большое спасибо.


person Deunz    schedule 02.07.2018    source источник


Ответы (1)


Вот возможное решение:

stages:
- test
- deploy

.test-template: &test-definition
  image: alpine:3.6
  stage: test
  script:
  - bash launch_test.sh

trigger-test:
  <<: *test-definition
  only:
  - triggers

manual-test:
  <<: *test-definition
  when: manual
  only:
  - master
  allow_failure: false

deploy:
  image: alpine:3.6
  stage: deploy
  script:
  - bash deploy.sh
  only:
  - master
  dependencies:
  - manual-test

Вы запускаете вручную manual-test задание, и в случае успеха deploy задание запускается.

Вы также можете активировать trigger-test для запуска только тестов.

person Ekans    schedule 04.07.2018
comment
Большое спасибо за ответ, я собираюсь протестировать это, и как только я увижу, что он работает, я проверю ваше решение! : D - person Deunz; 05.07.2018
comment
У меня не было возможности протестировать это :( Но я сделаю это как можно скорее. Подтверждаю это Поскольку то, что вы описываете, это именно то, чего я пытаюсь достичь :) Большое спасибо. - person Deunz; 18.07.2018