pipeline { agent { kubernetes { yamlFile '.jenkins/podTemplate.yaml' } } environment { ACR_NAME = 'marcin00' CLIENT_ID = 'c302726f-fafb-4143-94c1-67a70975574a' DOCKER_REGISTRY_URL = 'marcin00.azurecr.io' DOCKER_IMAGE = "${DOCKER_REGISTRY_URL}/user-microservice:${GIT_COMMIT}" DEPLOY_REPO = 'ssh://git@srv22.mikr.us:20343/pikram/user-microservice-deploy.git' } stages { stage('Code Tests') { steps { container('python') { dir('api') { sh ''' python3 -m venv env source env/bin/activate pip install -r requirements.txt pytest python3 -m pytest --junit-xml=pytest_junit.xml ''' } } } post { always { junit testResults: '**/*pytest_junit.xml' } } } stage('Build & Push Docker') { steps { container('docker') { sh ''' docker build -t ${DOCKER_IMAGE} --build-arg APP_VERSION=${GIT_COMMIT} --build-arg BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") . az login --identity --client-id ${CLIENT_ID} az acr login --name ${ACR_NAME} docker push ${DOCKER_IMAGE} ''' } } } stage('Commit new version to GitOps repo') { steps { container('git') { withCredentials([string(credentialsId: 'gitea-known-host', variable: 'GITEA_KNOWN_HOST')]) { sh ''' mkdir -p ~/.ssh echo "$GITEA_KNOWN_HOST" >> ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts git config --global user.name "jenkins[bot]" git config --global user.email "jenkins@marcin00.pl" ''' sshagent(['gitea-deploy-key']) { sh 'git clone ${DEPLOY_REPO} --branch fluxcd' } } sh ''' cd user-microservice-deploy/apps/user-microservice # Podmień tag obrazu w pliku deploy.yaml awk -v commit="$GIT_COMMIT" ' $0 ~ /name:[[:space:]]*api/ { in_api_container = 1; print; next } in_api_container && $0 ~ /^[[:space:]]*image:[[:space:]]*/ { sub(/:[^:[:space:]]+$/, ":" commit) in_api_container = 0 print next } { print } ' deploy.yaml > deploy.tmp && mv deploy.tmp deploy.yaml ''' sshagent(['gitea-deploy-key']) { sh ''' cd user-microservice-deploy/apps/user-microservice git add deploy.yaml git diff-index --quiet HEAD || git commit -m "JENKINS: Changed deployed version to $GIT_COMMIT" git push origin fluxcd ''' } } } } } }