Commit fcc5b434 authored by Philippe Caseiro's avatar Philippe Caseiro

Merge branch 'feature/jenkins-ci' into 'develop'

Build and publish image with Jenkins

See merge request !3
parents 09d5fe23 053e1f58
Pipeline #232 passed with stage
in 0 seconds
pipeline {
agent {
dockerfile {
filename 'Dockerfile'
dir 'ci'
args '--privileged -v /var/run/docker.sock:/var/run/docker.sock'
}
}
triggers {
gitlab(
triggerOnPush: true,
triggerOnMergeRequest: true,
branchFilterType: 'All',
cancelPendingBuildsOnUpdate: false
)
}
options {
gitLabConnection('Gitlab MIM')
gitlabBuilds(builds: [])
}
parameters {
string(defaultValue: "develop", description: 'Branche "staging"', name: 'stagingBranch')
string(defaultValue: "master", description: 'Branche "stable"', name: 'stableBranch')
}
environment {
IMAGE_NAME = "zephir-zone-manager"
IMAGE_COMMIT_TAG = env.GIT_COMMIT.substring(0,8)
}
stages {
stage('Build image') {
steps {
gitlabStage(STAGE_NAME) {
withDockerHubCredentials {
sh """
# Construction de l'image
docker build -t '${DOCKER_USERNAME}/${IMAGE_NAME}' .
# Ajout du tag de commit
docker tag '${DOCKER_USERNAME}/${IMAGE_NAME}:latest' '${DOCKER_USERNAME}/${IMAGE_NAME}:${IMAGE_COMMIT_TAG}'
"""
}
}
}
}
stage('Publish staging image') {
when {
branch params.stagingBranch
}
steps {
gitlabStage(STAGE_NAME) {
addTagAndPublishDockerImage(
env.IMAGE_COMMIT_TAG,
"staging-latest"
)
}
}
}
stage('Publish stable image') {
when {
branch params.stableBranch
}
steps {
gitlabStage(STAGE_NAME) {
addTagAndPublishDockerImage(
env.IMAGE_COMMIT_TAG,
"stable-latest"
)
}
}
}
}
}
def gitlabStage(String stageName, Closure fn) {
gitlabBuilds(builds: [stageName]) {
gitlabCommitStatus(stageName) {
fn()
}
}
}
def withDockerHubCredentials(Closure fn) {
withCredentials([
usernamePassword(credentialsId: 'dockerhub', usernameVariable: 'DOCKER_USERNAME', passwordVariable: 'DOCKER_PASSWORD')]
){
fn()
}
}
def addTagAndPublishDockerImage(String originalTag, String newTag) {
withDockerHubCredentials {
sh """
# Ajout du nouveau tag
docker tag '${DOCKER_USERNAME}/${IMAGE_NAME}:${originalTag}' '${DOCKER_USERNAME}/${IMAGE_NAME}:${newTag}'
# Publication de l'image sur le DockerHub
echo "${DOCKER_PASSWORD}" | docker login --username '${DOCKER_USERNAME}' --password-stdin
docker push '${DOCKER_USERNAME}/${IMAGE_NAME}:${newTag}'
docker push '${DOCKER_USERNAME}/${IMAGE_NAME}:${originalTag}'
docker logout
"""
}
}
\ No newline at end of file
FROM docker:stable
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment