| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- // CI/CD for Gogs: push and pull requests targeting main.
- // Tests/package run in Docker (DinD). Release publishes the HPI to Gogs.
- pipeline {
- agent none
- options {
- timestamps()
- disableConcurrentBuilds()
- timeout(time: 45, unit: 'MINUTES')
- buildDiscarder(logRotator(numToKeepStr: '20', artifactNumToKeepStr: '10'))
- }
- stages {
- stage('Build') {
- agent {
- docker {
- image 'ura-ci-maven:21'
- label 'built-in'
- alwaysPull false
- args '-u root -v jenkins-m2-cache:/root/.m2 -e MAVEN_OPTS=-Xmx1024m'
- }
- }
- stages {
- stage('Checkout') {
- steps {
- script {
- def sha = env.pr_head_sha ?: env.after ?: 'main'
- if (!sha?.trim() || sha == 'null' || sha == '0000000000000000000000000000000000000000') {
- sha = 'main'
- }
- echo "Gogs event ref=${env.ref} action=${env.action} pr=#${env.pr_number} sha=${sha}"
- env.RELEASE_SHA = sha
- checkout([
- $class: 'GitSCM',
- branches: [[name: sha]],
- extensions: [[$class: 'CloneOption', shallow: false, noTags: false]],
- userRemoteConfigs: [[url: 'https://git.barcelos.dev/allan/jenkins-mfa-auth-plugin.git']]
- ])
- }
- }
- }
- stage('Test') {
- steps {
- sh 'mvn -B -ntp verify'
- }
- post {
- always {
- junit allowEmptyResults: true, testResults: 'target/surefire-reports/*.xml'
- }
- }
- }
- stage('Package') {
- steps {
- sh 'mvn -B -ntp -DskipTests -Dset.changelist package'
- sh 'ls -la target/*.hpi'
- archiveArtifacts artifacts: 'target/*.hpi', fingerprint: true
- stash name: 'hpi', includes: 'target/*.hpi'
- }
- }
- }
- post {
- always {
- sh 'chmod -R a+rwX "$WORKSPACE" || true'
- }
- }
- }
- stage('Release') {
- when {
- allOf {
- expression { env.ref == 'refs/heads/main' }
- expression { !env.pr_number?.trim() || env.pr_number == 'null' }
- }
- }
- agent { label 'built-in' }
- steps {
- unstash 'hpi'
- withCredentials([string(credentialsId: 'gogs-release-token', variable: 'GOGS_RELEASE_TOKEN')]) {
- sh '''
- set -euo pipefail
- HPI=$(ls -1 target/*.hpi | head -1)
- SHA="${RELEASE_SHA:-${after:-}}"
- if [ -z "$SHA" ] || [ "$SHA" = "null" ]; then
- SHA=$(git rev-parse HEAD 2>/dev/null || echo "")
- fi
- TAG="1.0.${BUILD_NUMBER}"
- echo "Publishing ${HPI} as Gogs release ${TAG} sha=${SHA}"
- curl -fsS -X POST \
- -H "X-Release-Token: ${GOGS_RELEASE_TOKEN}" \
- -F "file=@${HPI}" \
- -F "tag=${TAG}" \
- -F "sha=${SHA}" \
- -F "title=mfa-totp ${TAG}" \
- -F "body=Jenkins build #${BUILD_NUMBER} (${SHA}). Artifact: $(basename "$HPI")" \
- http://host.docker.internal:9377/publish
- '''
- }
- }
- }
- }
- }
|