initial commit

This commit is contained in:
2025-03-04 15:35:36 +03:00
commit 7f3a76c984
28 changed files with 1385 additions and 0 deletions

115
Example.Jenkinsfile Normal file
View File

@@ -0,0 +1,115 @@
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'
}
}
}
}