fieldnotes/Jenkinsfile

119 lines
3.7 KiB
Groovy

pipeline {
agent {
dockerfile {
label 'common'
filename 'Dockerfile'
dir 'containers/ci'
additionalBuildArgs '--memory-swap -1'
}
}
parameters {
string(name: 'STABLE_BRANCH', defaultValue: 'master', description: 'La branche stable')
}
stages {
stage('Initialize project environment') {
steps {
script {
sh 'make init'
}
}
}
stage('Run dependencies audit') {
steps {
script {
try {
sh 'make audit'
} catch(ex) {
currentBuild.result = "UNSTABLE"
}
}
}
}
stage('Generate release') {
environment {
VERSION_CLASSIFIER = versionClassifier()
RELEASE_CHANNEL = releaseChannel()
}
steps {
script {
withCredentials([
file(credentialsId: 'ANDROID_RELEASE_KEYSTORE', variable: 'ANDROID_RELEASE_KEYSTORE'),
string(credentialsId: 'ANDROID_RELEASE_STOREPASS', variable: 'ANDROID_RELEASE_STOREPASS'),
string(credentialsId: 'ANDROID_RELEASE_KEYPASS', variable: 'ANDROID_RELEASE_KEYPASS'),
string(credentialsId: 'MAPBOX_ACCESS_TOKEN', variable: 'MAPBOX_ACCESS_TOKEN'),
string(credentialsId: 'SENTRY_DSN', variable: 'SENTRY_DSN'),
string(credentialsId: 'SENTRY_AUTH_TOKEN', variable: 'SENTRY_AUTH_TOKEN'),
string(credentialsId: 'SENTRY_PROJECT', variable: 'SENTRY_PROJECT'),
string(credentialsId: 'SENTRY_ORG', variable: 'SENTRY_ORG'),
]) {
sh '''
# Create .env file
cp .env.dist .env
sed -i "s|^SENTRY_DSN=.*|SENTRY_DSN=${SENTRY_DSN}|" .env
sed -i "s|^MAPBOX_ACCESS_TOKEN=.*|MAPBOX_ACCESS_TOKEN=${MAPBOX_ACCESS_TOKEN}|" .env
sed -i "s|^ENVIRONMENT=.*|ENVIRONMENT=production|" .env
# Create Sentry release properties
cp android/sentry.properties.dist android/sentry-release.properties
sed -i "s|^defaults.org=.*|defaults.org=${SENTRY_ORG}|" android/sentry-release.properties
sed -i "s|^defaults.project=.*|defaults.project=${SENTRY_PROJECT}|" android/sentry-release.properties
sed -i "s|^auth.token=.*|auth.token=${SENTRY_AUTH_TOKEN}|" android/sentry-release.properties
# Create new keystore and configure gradle to use it
# See containers/ci/configure-gradle-keystore.sh
/usr/local/bin/configure-gradle-keystore
# Increase Gradle HTTP timeout
echo 'systemProp.org.gradle.internal.http.connectionTimeout=120000' >> /root/.gradle/gradle.properties
echo 'systemProp.org.gradle.internal.http.socketTimeout=120000' >> /root/.gradle/gradle.properties
'''
retry(3) {
sh 'make android-release'
}
archiveArtifacts artifacts: 'android/app/build/outputs/apk/release/*.apk', fingerprint: true
}
}
}
}
}
post {
always {
script {
if (currentBuild.currentResult != 'SUCCESS') {
emailext (
subject: "${currentBuild.currentResult} - Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: """
Voir les étapes du job: ${env.BUILD_URL}flowGraphTable
Projet: ${env.GIT_URL}
Branche: ${env.GIT_BRANCH}
Commit: ${env.GIT_COMMIT}
""",
recipientProviders: [developers(), requestor()],
)
}
}
}
}
}
def versionClassifier() {
return env.BRANCH_NAME != params.STABLE_BRANCH ?
( 'SNAPSHOT+' + sh(script: 'git log -1 --format=%h', returnStdout: true).trim() ) :
''
}
def releaseChannel() {
return env.BRANCH_NAME != params.STABLE_BRANCH ?
env.GIT_BRANCH :
''
}