[yoga-0] improve deployment scripts

This commit is contained in:
Schneider Roland 2025-05-18 11:14:48 +02:00
parent 7aab555cd2
commit dbb1bc3073

View File

@ -0,0 +1,221 @@
pipeline {
agent any
environment {
DOCKER_CREDS = 'rschneider@docker.rschneider.hu'
GIT_USER = "Roland Schneider"
GIT_EMAIL = "rocho02@gmail.com"
GIT_REPO = "gitea.rschneider.hu/rschneider/yogastic.git"
GIT_BRANCH = "main"
GIT_CREDS_ID = "rschneider_gitea.rschneider.hu"
CMS_IMAGE= "docker.rschneider.hu/infra/yoga-cms"
APP_IMAGE= "docker.rschneider.hu/infra/yoga-app"
}
stages {
stage('Checkout') {
steps {
git branch: 'main', credentialsId: "${GIT_CREDS_ID}", url: "https://${GIT_REPO}"
sh '''
ls -lah
'''
}
}
stage('Collect project info - cms') {
agent{
docker {
reuseNode true
image 'linuxserver/yq'
}
}
steps {
withCredentials([usernamePassword(credentialsId: "${GIT_CREDS_ID}", passwordVariable: 'DOCKER_PASSWORD', usernameVariable: 'DOCKER_USERNAME')]) {
script {
def block = ""
block = sh returnStdout:true, script:'''
yq -y '.services.cms.image' environment/prod/docker-compose/yogastic/docker-compose.yaml
'''
block = block.readLines();
env.CMS_CURRENT = block[0];
block = sh returnStdout:true, script:'''
cat environment/dev/docker/cms/scripts/version.txt
'''
block = block.readLines();
env.CMS_LATEST = block[0];
def apiUrl = "https://docker.rschneider.hu/v2/infra/yoga-cms/tags/list"
def tagsResponse = sh(script: """
curl -s -u "${DOCKER_USERNAME}:${DOCKER_PASSWORD}" ${apiUrl}
""", returnStdout: true).trim()
// Step 3: Use JsonSlurper to parse the JSON response
def jsonSlurper = new groovy.json.JsonSlurper()
def tags = jsonSlurper.parseText(tagsResponse)
// Extract the tag names
def availableTags = tags.tags.collect { it }
availableTags = availableTags.reverse()
println availableTags
env.CMS_TAGS = availableTags.join("\n")
}
}
}
}
stage('Collect project info - app') {
agent{
docker {
reuseNode true
image 'linuxserver/yq'
}
}
steps {
withCredentials([usernamePassword(credentialsId: 'rschneider@docker.rschneider.hu', passwordVariable: 'DOCKER_PASSWORD', usernameVariable: 'DOCKER_USERNAME')]) {
script {
def block = ""
block = sh returnStdout:true, script:'''
yq -y '.services.app.image' environment/prod/docker-compose/yogastic/docker-compose.yaml
'''
block = block.readLines();
env.APP_CURRENT = block[0];
block = sh returnStdout:true, script:'''
cat environment/dev/docker/app/scripts/version.txt
'''
block = block.readLines();
env.APP_LATEST = block[0];
def apiUrl = "https://docker.rschneider.hu/v2/infra/yoga-app/tags/list"
def tagsResponse = sh(script: """
curl -s -u "${DOCKER_USERNAME}:${DOCKER_PASSWORD}" ${apiUrl}
""", returnStdout: true).trim()
// Step 3: Use JsonSlurper to parse the JSON response
def jsonSlurper = new groovy.json.JsonSlurper()
def tags = jsonSlurper.parseText(tagsResponse)
// Extract the tag names
def availableTags = tags.tags.collect { it }
availableTags = availableTags.reverse()
env.APP_TAGS = availableTags.join("\n")
}
}
}
}
stage('Select version CMS') {
steps {
echo "new tags"
println env.CMS_TAGS
script{
env.CMS_VERSION = input message: 'Select version for PROD', ok: 'Update',
parameters: [choice(name: 'Select version', choices: env.CMS_TAGS, description: """
Latest: ${env.CMS_LATEST}
Current: ${env.CMS_CURRENT}
""" )]
echo "You have selected Docker Tag: ${env.CMS_VERSION}"
}
}
}
stage('Select version APP') {
steps {
echo "new APP tags"
println env.APP_TAGS
script{
env.APP_VERSION = input message: 'Select version for PROD', ok: 'Update',
parameters: [choice(name: 'Select version', choices: env.APP_TAGS, description: """
Latest: ${env.APP_LATEST}
Current: ${env.APP_CURRENT}
""")]
echo "You have selected Docker Tag: ${env.APP_VERSION}"
}
}
}
stage('Update version CMS') {
agent{
docker {
reuseNode true
image 'node:22'
}
}
steps {
script{
env.TARGET_FILE='../prod/docker-compose/yogastic/docker-compose.yaml'
env.TARGET_SERVICE='cms'
env.TARGET_IMAGE= "${CMS_IMAGE}:${CMS_VERSION}"
sh '''
cd environment/common
npm i -c
npx ts-node src/update.service.version.ts
'''
}
}
}
stage('Update version APP') {
agent{
docker {
reuseNode true
image 'node:22'
}
}
steps {
script{
env.TARGET_FILE='../prod/docker-compose/yogastic/docker-compose.yaml'
env.TARGET_SERVICE='app'
env.TARGET_IMAGE= "${APP_IMAGE}:${APP_VERSION}"
sh '''
cd environment/common
npm i -c
npx ts-node src/update.service.version.ts
'''
}
}
}
stage('Update git ') {
/*
agent{
docker {
reuseNode true
image 'alpine/git'
args '--entrypoint /bin/sh'
}
}
*/
environment{
GIT_CREDS = credentials("${GIT_CREDS_ID}")
ENV_NAME = "Prod yoga-app"
IMAGE_VERSION = "${CMS_VERSION}"
}
steps {
sh '''
git status
git config user.email "${GIT_EMAIL}"
git config user.name "${GIT_USER}"
git commit -a -m "[ci-skip] New ${ENV_NAME} deployment version: ${IMAGE_VERSION}"
git push --tags https://$GIT_CREDS@$GIT_REPO $GIT_BRANCH
'''
}
}
}
}