def runGroovy(scriptName) { sh "groovy -cp ./.ci/ ./.ci/script/${scriptName}.groovy" } pipeline { agent { docker { image 'git.tswf.io/docker-base-images/jdk14-alpine:0.1.4' // Монтируем сокет для DooD. Так как сейчас все наши билд агенты запущены в SysBox, то это достаточно безопасно для хост системы. У Агента свой докер демон, его не жалко. args '-v /var/run/docker.sock:/var/run/docker.sock' } } stages { // Настраиваем глобальные переменные окружения для сборки stage('Prepare: Base envs') { steps { script { env.CI_PROPERTIES_FILE_LOCATIONS = ".ci/ci.properties" } } } // Убеждаемся, что тэг есть. В случае, если Jenkins не подсунул его автоматически (что обычная практика) - пробуем узнать сами. stage('Prepare: Resolve build tag') { steps { script { if (env.TAG_NAME == null) { env.TAG_NAME = sh(returnStdout: true, script: "git tag --points-at HEAD").trim() } } } } // Простая сборка приложения "На каждый коммит", просто проверить что собирается stage('Build: Regular') { steps { // TODO: Костыль. Надо скрипты адаптировать под сборку "На каждый коммит" и "Для релизов" runGroovy 'docker_build' } } // Дополнительная сборка для релизов stage('Build: Release Binaries And Deploy Image') { when { tag "release-*" } steps { script { // Пример смены набора докерфайлов, которые используются по-умолчанию env.CI_DOCKER_FILES_PRESET="release" } runGroovy 'docker_build' } } // Пушим собранный образ в Docker Registry stage('Publish: Publish a docker image') { when { tag "release-*" } steps { // Переопределяем параметры скрипта из переменных окружения сборщика script { env.CI_DOCKER_REGISTRY_USERNAME = env.GITEA_USER env.CI_DOCKER_REGISTRY_PASSWORD = env.GITEA_TOKEN } runGroovy 'docker_push' } } // Создаем в Gitea релиз с бинарями stage('Publish: Create gitea release') { when { tag "release-*" } steps { // Переопределяем параметры скрипта из переменных окружения сборщика script { env.CI_DOCKER_REGISTRY_USERNAME = env.GITEA_USER env.CI_DOCKER_REGISTRY_PASSWORD = env.GITEA_TOKEN env.CI_GITEA_ORIGIN = env.GIT_URL env.CI_GITEA_TOKEN = env.GITEA_TOKEN } runGroovy 'docker_gitea_release_publish' } } // Добавляем SSH профиль для последующего деплоя и проверяем его stage('Prepare: Configuring SSH profile') { when { tag "release-*" } steps { // Переопределяем параметры скрипта из переменных окружения сборщика script { env.CI_DEPLOY_SSH_PROFILE_PRIVATE_KEY_BASE64 = env.SSH_KEY_BASE64 } runGroovy 'deploy_ssh_profile_setup' } } // Подключаемся к серверу по SSH, обновляем тэг образа и перезапускаем stage('Deploy: Update PROD docker-compose environment tag') { when { tag "release-*" } steps { runGroovy 'deploy_compose_via_ssh' } } } }