Итак, у меня есть приложение Angular 6 / Material 6, и я установил вокруг него gitlab для непрерывной интеграции.
Я не уверен, как справиться с обработкой, которую я хочу:
Мне в основном нужно 2 этапа: тестирование и развертывание
- Отключить сборку gitlab-ci на толчках
- Стадия тестирования должна запускаться хроном, но этот крон не должен запускать развертывание
- Этап развертывания должен запускаться вручную, но затем должны быть запущены тесты, и этап развертывания не должен развертываться в случае неудачи тестов кармы.
На данный момент я получил этот конф:
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 USER@XX.XX.XX.XX -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 USER@XX.XX.XX.XX -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 USER@XX.XX.XX.XX -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 USER@XX.XX.XX.XX:/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 USER@XX.XX.XX.XX -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 USER@XX.XX.XX.XX -pPORT "rm -rf /CHEMIN_LIVRAISON/livraison/*"
when: manual
Но, как вы можете видеть, когда: руководство работает.
Это означает, что cron запускает сборку, воспроизводит этап Tests и затем пропускает этап развертывания:
Конечно, как и планировалось, я могу вручную запустить этот этап развертывания, но тогда он не будет запускать тесты.
Итак, как мне добраться до цели: когда я запускаю сборку развертывания вручную, было бы замечательно, если бы тесты могли быть запущены, и если тесты не пройдены, развертывание не запускалось?
Большое спасибо.