diff --git a/vars/container.groovy b/vars/container.groovy index da1ecb6..a5f2e5e 100644 --- a/vars/container.groovy +++ b/vars/container.groovy @@ -6,7 +6,7 @@ * - dockerfile - String - Chemin vers le fichier Dockerfile à utiliser pour construire l'image, par défaut "./Dockerfile" * - contextDir - String - Répertoire servant de "contexte" pour la construction de l'image, par défault "./" * - imageName - String - Nom de l'image à construire, par défaut "" -* - imageTag - String - Tag apposé sur l'image après construction, par défaut résultat de la commande `git describe --always` +* - imageTags - String - Tag(s) apposé(s) sur l'image après construction, par défaut tags générés par la méthode utils.getProjectVersionTags() * - gitCredentialsId - String - Identifiant des "credentials" Jenkins utilisés pour cloner le dépôt Git, par défaut "forge-jenkins" * - dockerRepository - String - Nom d'hôte du registre Docker sur lequel publier l'image, par défaut "reg.cadoles.com" * - dockerRepositoryCredentialsId - String - Identifiant des "credentials" Jenkins utilisés pour déployer l'image sur le registre Docker, par défault "reg.cadoles.com-jenkins" @@ -18,7 +18,13 @@ String buildAndPublishImage(Map options = [:]) { String contextDir = options.get('contextDir', '.') String imageName = options.get('imageName', '') String gitRef = sh(returnStdout: true, script: 'git describe --always').trim() - String imageTag = options.get('imageTag', gitRef) + + List imageTags = options.get('imageTags', utils.getProjectVersionTags()) + // Handle legacy imageTag parameter + if (options.containsKey('imageTag')) { + imageTags = [ options.get("imageTag", gitRef) ] + } + String gitCredentialsId = options.get('gitCredentialsId', 'forge-jenkins') String dockerRepository = options.get('dockerRepository', 'reg.cadoles.com') String dockerRepositoryCredentialsId = options.get('dockerRepositoryCredentialsId', 'reg.cadoles.com-jenkins') @@ -44,13 +50,15 @@ String buildAndPublishImage(Map options = [:]) { } } - stage("Build image '${imageName}:${imageTag}'") { + String primaryImageTag = imageTags[0] + + stage("Build image '${imageName}:${primaryImageTag}'") { git.withHTTPCredentials(gitCredentialsId) { sh """ docker build \ --build-arg="GIT_USERNAME=${env.GIT_USERNAME}" \ --build-arg="GIT_PASSWORD=${env.GIT_PASSWORD}" \ - -t '${imageName}:${imageTag}' \ + -t '${imageName}:${primaryImageTag}' \ -f '${dockerfile}' \ '${contextDir}' """ @@ -59,20 +67,33 @@ String buildAndPublishImage(Map options = [:]) { stage('Validate image with Trivy') { utils.when(!skipVerifications) { - runTrivyCheck("${imageName}:${imageTag}", projectRepository) + runTrivyCheck("${imageName}:${primaryImageTag}", projectRepository) } } - stage("Publish image '${imageName}:${imageTag}'") { + stage("Login with image repository") { utils.when(!dryRun) { - retry(2) { + sh """ + echo ${env.HUB_PASSWORD} | docker login -u '${env.HUB_USERNAME}' --password-stdin '${dockerRepository}' + """ + } + } + + imageTags.each { imageTag -> + stage("Publish image '${imageName}:${imageTag}'") { + utils.when(!dryRun) { sh """ - echo ${env.HUB_PASSWORD} | docker login -u '${env.HUB_USERNAME}' --password-stdin '${dockerRepository}' - docker push '${imageName}:${imageTag}' + docker tag "${imageName}:${primaryImageTag}" "${imageName}:${imageTag}" """ + retry(2) { + sh """ + docker push '${imageName}:${imageTag}' + """ + } } } - } + } + } }