feat(container): publish image with multiple tags
This commit is contained in:
parent
2c182df6a6
commit
83708ec479
|
@ -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<String> 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}'
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue