universal-ci-cd-scripts/Example.Jenkinsfile

102 lines
4.0 KiB
Plaintext
Raw Permalink 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:1.0.0'
// Монтируем сокет для 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
}
}
}
// Качаем CI скрипты
stage('Prepare: Clone CI scripts') {
steps {
sh 'curl -s "https://git.tswf.io/ci/universal-ci-cd-scripts/raw/branch/master/install.sh" | bash'
}
}
// Убеждаемся, что тэг есть. В случае, если 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'
}
}
// Пушим собранный образ в Docker Registry
stage('Publish: Release docker image') {
when {
anyOf {
tag "release-*"
tag "docker-*"
}
}
steps {
runGroovy 'release_docker_build_push'
}
}
// Создаем в Gitea релиз с бинарями
stage('Publish: Build binaries and 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'
}
}
}
}