J'essaie d'utiliser docker-compose
avec la variable d'environnement pour le nom d'image défini par la variable Jenkinsfile
, mais cela ne fonctionne pas.
J'ai un Jenkinsfile
contenant
node() {
stage('Checkout') {
cleanWs()
git credentialsId: 'xxx', url: 'ssh://git@...'
}
stage('Build') {
withMaven(maven: 'maven-3.5.3') {
sh 'mvn clean package'
def pom = readMavenPom file:'pom.xml'
JAR_FILE = pom.artifactId + "-" + pom.version + ".jar"
JAR_VERSION = pom.version
}
}
stage('Build Docker Image') {
echo "Docker Build ..."
docker.withTool('docker') {
app = docker.build("microservices/my-service:${JAR_VERSION}","--build-arg JAR_FILE=${JAR_FILE} .")
}
}
stage('Running Docker Container') {
echo "Docker Run ..."
withEnv(['VERSION=1.0.0']) {
docker.withTool('docker') {
sh "docker-compose rm -f -s -v"
sh "docker-compose up -d"
}
}
cleanWs()
}
}
Et un docker-compose.yml
comme
version: '3.6'
services:
my-service:
image: microservices/my-service:${VERSION}
container_name: my-service
...
Tout fonctionne bien, sauf que la dernière étape n'utilise pas ma variable d'environnement.
Docker Run ...
[Pipeline] withEnv
[Pipeline] {
[Pipeline] tool
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
[my-service] Running Shell script
+ docker-compose rm -f -s -v
The VERSION variable is not set. Defaulting to a blank string.
Après avoir ajouté un sh "printenv"
juste avant le sh "docker-compose ..."
j’ai vu
Version=1.0.0
Je ne sais pas pourquoi withEnv(['VERSION=1.0.0'])
me donne Version=1.0.0
mais utiliser, dans le docker-compose-yml
image: microservices/my-service:${Version}
à la place de image: microservices/my-service:${VERSION}
, fonctionne bien.
Avez-vous essayé de mettre la environment
suivante dans votre fichier Jenkins?
{
...
stage('Running Docker Container') {
echo "Docker Run ..."
docker.withTool('docker') {
sh "docker-compose rm -f -s -v"
sh "docker-compose up -d"
}
cleanWs()
}
environment {
VERSION = "1.0.0"
}
}
De plus, vous pouvez utiliser les valeurs par défaut en utilisant un fichier .env
mais @ mulg0r ( permalink ) explique cette solution dans sa réponse. Vous pouvez lire la substitution variable dans la documentation de docker-compose pour plus d'informations.