Что будет, если не указать stage в job'e gitlab-ci
Написал раннер и сделал через extends сборку для разных окружений: dev, prod сделал job'ы специально под переменные, дабы не надо было устраивать капипаст
Что у меня получилось:
stages:
- prepare
- build
- test
- deploy
- activate
- revert
before_script:
- echo "--------- STARTING WORK ------------"
variables:
docker_html_path: "/var/www"
ENV: "dev"
# CI_DEBUG_SERVICES: "true"
prepare-composer:
image: composer:latest
stage: prepare
script:
- mkdir -p storage/framework/cache storage/framework/sessions storage/framework/testing storage/framework/views tests/js/screens/diffs/ vendor/ tests/js/screenshots tests/js/report/
- composer update --ignore-platform-reqs
- composer install --no-interaction --prefer-source --ignore-platform-reqs
- ls -lha
artifacts:
when: always
name: $ENV_$CI_COMMIT_SHA
untracked: true
paths:
- tests/js/screenshots/
- tests/js/screens/
- tests/js/report/
cache:
untracked: true
when: always
paths:
- tests/js/screenshots/
- tests/js/screens/
- tests/js/report/
- storage/
- public
- css/
- img/
tags:
- test_new_runner
only:
- ned_runner #Затычка бранча чтобы ранер не запускался
build:
image: node:14.15.0-stretch
script:
- npm i
- npm run prod
- ls -lha
artifacts:
when: always
name: $ENV_$CI_COMMIT_SHA
untracked: true
paths:
- tests/js/screenshots/
- tests/js/screens/
- tests/js/report/
cache:
paths:
- tests/js/screenshots/
- tests/js/screens/
- tests/js/report/
- storage/
tags:
- test_new_runner
only:
- ned_runner #Затычка бранча чтобы ранер не запускался
# - develop
build-master:
extends: build
stage: build
variables:
ENV: prod
tags:
- test_new_runner
only:
- main
build-dev:
extends: build
stage: build
variables:
ENV: dev
only:
# - develop
- ned_runner
test:
variables:
allow_failure: "true"
image: miekrif/uzavr-selenium:latest
services:
- name: selenium/standalone-chrome:latest
alias: chrome
script:
- npx mocha tests/js/screenshots-* --timeout 50000
- npx playwright test tests/js/pw_*
- php artisan test
- ls -lha
artifacts:
when: always
name: $CI_COMMIT_SHA
untracked: true
paths:
- tests/js/screenshots/
- tests/js/screens/
- tests/js/report/
cache:
paths:
- tests/js/screenshots/
- tests/js/screens/
- tests/js/report/
- storage/
- public
- css/
- img/
tags:
- test_new_runner
only:
- ned_runner #Затычка бранча чтобы ранер не запускался
# - develop
test-master:
extends: test
stage: test
variables:
allow_failure: "false"
ENV: prod
tags:
- test_new_runner
only:
- main
test-dev:
extends: test
stage: test
variables:
allow_failure: "false"
ENV: dev
tags:
- test_new_runner
only:
# - develop
- ned_runner
deploy:
script:
- php artisan migrate
- php artisan optimize:clear
- cp -r $CI_PROJECT_DIR $docker_html_path/$deploy_subfolder
- cp -Pv $docker_html_path/$deploy_subfolder $docker_html_path/$eploy_subfolder/${ENV}_$CI_COMMIT_SHA
- ls -lha
artifacts:
when: always
name: $CI_COMMIT_SHA
untracked: true
paths:
- tests/js/screenshots/
- tests/js/screens/
- tests/js/report/
cache:
paths:
- tests/js/screenshots/
- tests/js/screens/
- tests/js/report/
- storage/
- public
- css/
- img/
tags:
- test_new_runner
# only:
# - ned_runner #Затычка бранча чтобы ранер не запускался
## - develop
deploy-dev:
extends: deploy
stage: deploy
variables:
ENV: dev
allow_failure: "true"
deploy_subfolder: "hype-dev"
only:
# - develop
- ned_runner
deploy_master:
extends: deploy
stage: deploy
variables:
ENV: prod
allow_failure: "false"
deploy_subfolder: "hype-prod"
when: manual
only:
- main
activate:
script:
- ln -fsnv $docker_html_path/$deploy_subfolder/$ENV_$CI_COMMIT_SHA $docker_html_path/$deploy_subfolder
activate_staging:
extends: activate
stage: activate
variables:
deploy_subfolder: 'hype-dev'
ENV: staging
when: always
only:
# - develop
- ned_runner
# - /feature-.*/
activate_prod:
extends: activate
stage: activate
stage: deploy
when: manual
only:
- main
revert:
stage: revert
when: manual
script:
- cp -Pv --remove-destination $docker_html_path/$CI_COMMIT_SHA/prev-version $docker_html_path/html
Я ожидал, что если я не укажу stage в job'e то она не будет запускаться так как ее ничего не будет трегирить, и разделил job's на 3 типа: для dev, prod, без stage
Что я получил: Все job's типа без stage залетели в stage test
Так же, предыдущая версия моего gitlab-ci.yml включала в себя stage во всех job's кроме тех в которых написал extends, но тогда gitlab прогонял job + dev_jobs\prod_jobs
Что мне дописать в job's чтобы запускались только env_jobs где env это dev\prod
Источник: Stack Overflow на русском