102 lines
4.0 KiB
Plaintext
102 lines
4.0 KiB
Plaintext
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'
|
||
}
|
||
}
|
||
}
|
||
} |