8713-testToMaster #3523

Merged
alexm merged 383 commits from 8713-testToMaster into master 2025-03-04 06:52:15 +00:00
2 changed files with 84 additions and 127 deletions
Showing only changes of commit 8387dad3d8 - Show all commits

195
Jenkinsfile vendored
View File

@ -8,6 +8,7 @@ def RUN_BUILD
def BRANCH_ENV = [ def BRANCH_ENV = [
test: 'test', test: 'test',
master: 'production', master: 'production',
main: 'production',
beta: 'production' beta: 'production'
] ]
@ -20,12 +21,17 @@ node {
'dev', 'dev',
'test', 'test',
'master', 'master',
'main',
'beta' 'beta'
].contains(env.BRANCH_NAME) ].contains(env.BRANCH_NAME)
FROM_GIT = env.JOB_NAME.startsWith('gitea/') FROM_GIT = env.JOB_NAME.startsWith('gitea/')
RUN_TESTS = !PROTECTED_BRANCH && FROM_GIT RUN_TESTS = !PROTECTED_BRANCH && FROM_GIT
RUN_BUILD = PROTECTED_BRANCH && FROM_GIT RUN_BUILD = PROTECTED_BRANCH && FROM_GIT
IS_LATEST = ['master', 'main'].contains(env.BRANCH_NAME)
// XXX: Delete me
RUN_BUILD = true
// https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables // https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#using-environment-variables
echo "NODE_NAME: ${env.NODE_NAME}" echo "NODE_NAME: ${env.NODE_NAME}"
@ -73,6 +79,7 @@ pipeline {
def packageJson = readJSON file: 'package.json' def packageJson = readJSON file: 'package.json'
def version = "${packageJson.version}-build${env.BUILD_ID}" def version = "${packageJson.version}-build${env.BUILD_ID}"
writeFile(file: 'VERSION.txt', text: version) writeFile(file: 'VERSION.txt', text: version)
echo "VERSION.txt: ${version}"
} }
} }
} }
@ -105,124 +112,71 @@ pipeline {
} }
} }
} }
stage('Stack') { stage('Build') {
parallel {
stage('Back') {
stages {
stage('Test') {
when {
expression { RUN_TESTS }
}
environment {
NODE_ENV = ''
}
steps {
sh 'node back/tests.js --junit'
}
post {
always {
junit(
testResults: 'junitresults.xml',
allowEmptyResults: true
)
}
}
}
stage('Build') {
when {
expression { RUN_BUILD }
}
environment {
VERSION = readFile 'VERSION.txt'
}
steps {
sh 'docker-compose build back'
}
}
}
}
stage('Front') {
when {
expression { FROM_GIT }
}
stages {
stage('Test') {
when {
expression { RUN_TESTS }
}
environment {
NODE_ENV = ''
}
steps {
sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=10'
}
post {
always {
junit(
testResults: 'junit.xml',
allowEmptyResults: true
)
}
}
}
stage('Build') {
when {
expression { RUN_BUILD }
}
environment {
VERSION = readFile 'VERSION.txt'
}
steps {
sh 'gulp build'
sh 'docker-compose build front'
}
}
}
}
stage('Db') {
when {
expression { FROM_GIT }
}
stages {
stage('Build') {
when {
expression { RUN_BUILD }
}
environment {
VERSION = readFile 'VERSION.txt'
}
steps {
sh 'npx myt run -t'
sh '''
docker exec vn-database sh -c "cp -r /var/lib/mysql /data"
'''
sh 'docker commit vn-database vn_db'
sh '''
docker stop vn-database
docker rm vn-database
'''
sh 'docker-compose build db'
}
}
}
}
}
}
stage('Push') {
when { when {
expression { RUN_BUILD } expression { RUN_BUILD }
} }
environment { environment {
CREDENTIALS = credentials('docker-registry')
VERSION = readFile 'VERSION.txt' VERSION = readFile 'VERSION.txt'
CREDENTIALS = credentials('docker-registry')
} }
steps { parallel {
def services = ['front', 'back', 'db'] stage('Back') {
services.each { service -> steps {
sh "docker tag ${REGISTRY}/salix-${service}:${VERSION} ${REGISTRY}/salix-${service}:${env.NODE_ENV}" docker 'back', '.'
}
}
stage('Front') {
steps {
docker 'front', 'front'
}
}
stage('DB') {
steps {
sh 'npx myt run -t'
sh 'docker exec vn-database sh -c "cp -r /var/lib/mysql /data"'
sh 'docker commit vn-database vn_db'
sh 'docker stop vn-database'
sh 'docker rm vn-database'
docker 'db', 'db'
}
}
}
}
stage('Test') {
when {
expression { RUN_TESTS }
}
environment {
NODE_ENV = ''
}
parallel {
stage('Back') {
steps {
sh 'node back/tests.js --junit'
}
post {
always {
junit(
testResults: 'junitresults.xml',
allowEmptyResults: true
)
}
}
}
stage('Front') {
steps {
sh 'jest --ci --reporters=default --reporters=jest-junit --maxWorkers=10'
}
post {
always {
junit(
testResults: 'junit.xml',
allowEmptyResults: true
)
}
}
} }
sh 'docker login --username $CREDENTIALS_USR --password $CREDENTIALS_PSW $REGISTRY'
sh 'docker-compose push'
} }
} }
stage('Deploy') { stage('Deploy') {
@ -295,3 +249,22 @@ pipeline {
} }
} }
} }
def docker(service, context) {
def image = "${env.REGISTRY}/salix-${service}"
def versionImage = "${image}:${env.VERSION}"
def branchImage = "${image}:${env.BRANCH_NAME}"
sh "docker build -t ${versionImage} ${context}"
sh 'docker login --username $CREDENTIALS_USR --password $CREDENTIALS_PSW $REGISTRY'
sh "docker push ${versionImage}"
sh "docker tag ${versionImage} ${branchImage}"
sh "docker push ${branchImage}"
if (IS_LATEST) {
def latestImage = "${image}:latest"
sh "docker tag ${versionImage} ${latestImage}"
sh "docker push ${latestImage}"
}
}

View File

@ -1,16 +0,0 @@
version: '3.7'
services:
front:
image: registry.verdnatura.es/salix-front:${VERSION:?}
build:
context: front
back:
image: registry.verdnatura.es/salix-back:${VERSION:?}
build:
context: .
dockerfile: back/Dockerfile
db:
image: registry.verdnatura.es/salix-db:${VERSION:?}
build:
context: .
dockerfile: db/Dockerfile