universal-ci-cd-scripts/Example.Jenkinsfile
2025-03-04 15:35:36 +03:00

115 lines
4.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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'
}
}
}
}