From 9d60348b8b90948529b483342dddaca3458002f7 Mon Sep 17 00:00:00 2001 From: amorozov Date: Sat, 8 Mar 2025 02:08:53 +0300 Subject: [PATCH] feature: updated scripts, Jenkinsfile. added install.sh --- Example.Jenkinsfile | 18 +------------ install.sh | 27 +++++++++++++++++++ ...r_build_push_update_compose_via_ssh.groovy | 15 ++++++----- .../script/release_docker_build_push.groovy | 8 +++--- .../util/DockerBuildCommandFactory.groovy | 2 +- 5 files changed, 41 insertions(+), 29 deletions(-) create mode 100644 install.sh diff --git a/Example.Jenkinsfile b/Example.Jenkinsfile index 4b0e2e5..5e5654a 100644 --- a/Example.Jenkinsfile +++ b/Example.Jenkinsfile @@ -41,22 +41,6 @@ pipeline { } } - // Дополнительная сборка для релизов - 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 { @@ -71,7 +55,7 @@ pipeline { } // Создаем в Gitea релиз с бинарями - stage('Publish: Create gitea release') { + stage('Publish: Build binaries and create gitea release') { when { anyOf { tag "release-*" diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..e5e5407 --- /dev/null +++ b/install.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# Адрес репозитория +REPO_URL="https://git.tswf.io/ci/universal-ci-cd-scripts.git" + +# Путь к папке внутри репозитория, которую нужно скопировать +SOURCE_DIR="src/main/groovy" + +# Целевая директория для копирования файлов +TARGET_DIR=".ci" + +# Клонируем репозиторий в временный каталог +TEMP_DIR=$(mktemp -d) +git clone "$REPO_URL" "$TEMP_DIR" + +# Проверяем, существует ли целевая папка, и если нет, создаем её +if [ ! -d "$TARGET_DIR" ]; then + mkdir -p "$TARGET_DIR" +fi + +# Копируем содержимое папки из временного каталога в целевую папку +cp -r "${TEMP_DIR}/${SOURCE_DIR}/"* "$TARGET_DIR" + +# Удаляем временный каталог +rm -rf "$TEMP_DIR" + +echo "$SOURCE_DIR copied to $TARGET_DIR" \ No newline at end of file diff --git a/src/main/groovy/script/deploy_docker_build_push_update_compose_via_ssh.groovy b/src/main/groovy/script/deploy_docker_build_push_update_compose_via_ssh.groovy index 3901d76..3b1b86a 100644 --- a/src/main/groovy/script/deploy_docker_build_push_update_compose_via_ssh.groovy +++ b/src/main/groovy/script/deploy_docker_build_push_update_compose_via_ssh.groovy @@ -86,15 +86,16 @@ for (def dockerfileName : deployDockerfiles) { throw new IllegalStateException("Build tag was not resolved (empty or null '${dockerReleaseTagToSetup}')") } - def dockerComposeRollbackFileName = "${dockerComposeFileName}.backup.${System.currentTimeMillis()}.yml" + def dockerComposeRollbackDir = "./${dockerComposeFileName}-rollback-backups" + def dockerComposeRollbackFilePath = "${dockerComposeRollbackDir}/${dockerComposeFileName}.backup.${System.currentTimeMillis()}.yml" try { sh """ ssh -tt ${sshDeployProfile} "\\ cd '${dockerComposeDirectory}' && \\ - cp ${dockerComposeFileName} ${dockerComposeRollbackFileName} && \\ - sed -i 's|image: ${dockerImageToUpdateTagBaseName}:.*|image: ${dockerReleaseImageToSetup}|g' '${dockerComposeFileName}'\\ && - ${dockerComposeBaseCommand} -f '${dockerComposeFileName}' up -d \\ - " + mkdir -p ${dockerComposeRollbackDir} && \\ + cp ${dockerComposeFileName} ${dockerComposeRollbackFilePath} && \\ + sed -i 's|image:.*${dockerImageToUpdateTagBaseName}:.*|image: ${dockerReleaseImageToSetup}|g' '${dockerComposeFileName}' && \\ + ${dockerComposeBaseCommand} -f '${dockerComposeFileName}' up -d" """ } catch (Throwable e) { ScriptLog.printf("Exception occurred while updating docker-compose tag on deploy, rolling back") @@ -103,8 +104,8 @@ for (def dockerfileName : deployDockerfiles) { sh """ ssh -tt ${sshDeployProfile} "\\ cd '${dockerComposeDirectory}' && \\ rm ${dockerComposeFileName} && \\ - cp ${dockerComposeRollbackFileName} ${dockerComposeFileName} \\ - " + cp ${dockerComposeRollbackFilePath} ${dockerComposeFileName} \\ + ${dockerComposeBaseCommand} -f '${dockerComposeFileName}' up -d" """ ScriptLog.printf("Application restored from backup") diff --git a/src/main/groovy/script/release_docker_build_push.groovy b/src/main/groovy/script/release_docker_build_push.groovy index 1974ae8..f8c8360 100644 --- a/src/main/groovy/script/release_docker_build_push.groovy +++ b/src/main/groovy/script/release_docker_build_push.groovy @@ -1,8 +1,5 @@ package script -import util.CIProperties -import util.DockerImageNames - /** * Скрипт для публикации докер образа при сборке. @@ -13,7 +10,8 @@ import util.DockerImageNames @Grab(group='io.tswf.groovy.better-groovy', module='better-groovy-scripting-shell', version='2.0.2-SNAPSHOT', changing = true), @Grab(group='io.tswf.groovy.better-groovy', module='better-groovy-scripting-gitea', version='2.0.2-SNAPSHOT', changing = true) ]) -@groovy.transform.CompileStatic +_ + import util.DockerLogin import util.DockerBuildCommandFactory import util.DockerTags @@ -21,6 +19,8 @@ import util.Dockerfiles import util.GitTags import util.GlobalProperties import util.ScriptLog +import util.CIProperties +import util.DockerImageNames println """ ############################################################################# diff --git a/src/main/groovy/util/DockerBuildCommandFactory.groovy b/src/main/groovy/util/DockerBuildCommandFactory.groovy index b1fa140..c95fd76 100644 --- a/src/main/groovy/util/DockerBuildCommandFactory.groovy +++ b/src/main/groovy/util/DockerBuildCommandFactory.groovy @@ -9,7 +9,7 @@ class DockerBuildCommandFactory { def propertyNames = [ "docker.build.${dockerfileName.toLowerCase()}.additional-args", "docker.build.additional-args" - ] + ].map { it.toString() } return propertyNames.stream() .map { CIProperties.findProperty(it).orNull() }