[yoga-0] improve deployment scripts
This commit is contained in:
parent
7aab555cd2
commit
dbb1bc3073
221
environment/prod/jenkins/update.versions.Jenkinsfile
Normal file
221
environment/prod/jenkins/update.versions.Jenkinsfile
Normal 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
|
||||
|
||||
'''
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user