universal-ci-cd-scripts/Example.Jenkinsfile

111 lines
4.3 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"
env.CI_DOCKER_REGISTRY_USERNAME = env.GITEA_USER
env.CI_DOCKER_REGISTRY_PASSWORD = env.GITEA_TOKEN
}
}
}
// Убеждаемся, что тэг есть. В случае, если 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 'build_docker'
}
}
// Дополнительная сборка для релизов
stage('Build: Release Binaries And Deploy Image') {
when {
anyOf {
tag "release-*"
tag "binaries-*"
}
}
steps {
script {
env.CI_DOCKER_FILES_PRESET="release"
}
runGroovy 'release_docker_gitea_publish'
}
}
// Пушим собранный образ в Docker Registry
stage('Publish: Release docker image') {
when {
anyOf {
tag "release-*"
tag "docker-*"
}
}
steps {
runGroovy 'release_docker_build_push'
}
}
// Создаем в Gitea релиз с бинарями
stage('Publish: Create gitea release') {
when {
anyOf {
tag "release-*"
tag "binaries-*"
}
}
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 'release_gitea_artifacts_publish_docker'
}
}
// Подключаемся к серверу по SSH, обновляем тэг образа и перезапускаем
stage('Deploy: Update PROD docker-compose environment tag') {
when {
anyOf {
tag "release-*"
tag "deploy-*"
}
}
steps {
script {
env.CI_DEPLOY_SSH_PROFILE_PRIVATE_KEY_BASE64 = env.SSH_KEY_BASE64
}
runGroovy 'deploy_ssh_profile_setup'
runGroovy 'deploy_docker_build_push_update_compose_via_ssh'
}
}
}
}