[英]Jenkins pipeline - Environment variable for docker-compose
我正在尝试使用docker-compose
和环境变量作为Jenkinsfile
设置的图像名称,但它无法正常工作。
我有一个Jenkinsfile
包含
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()
}
}
和docker-compose.yml
一样
version: '3.6'
services:
my-service:
image: microservices/my-service:${VERSION}
container_name: my-service
...
一切都很好,除了最后一个阶段没有使用我的环境变量。
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.
您需要将这些ENV保存在一个文件中(jenkinsfile的输出,dockercompose文件的输入)。 那么,你有两种可能性:
如果您需要在my-service
容器中使用ENV, ./your_envfile.env
您的ENV保存在./your_envfile.env
,然后添加
\n 版本:'3.6'\n 服务:\n 我的服务:\n image:microservices / my-service:$ {VERSION}\n container_name:my-service\n env_file:./ your_envfile.env
如果您需要在docker-compose文件中使用ENV,正如我在image
部分中看到的${VERSION}
,您需要将ENV保存在.env
文件中。
.env
文件必须与执行docker-compose的路径相同,或者至少是一个名为./env
的符号链接,它指向您以这种格式保存ENV的地方:
VERSION=1.0.0 ...
在sh "docker-compose ..."
之前添加了一个sh "printenv"
juste之后,我看到了
Version=1.0.0
我不知道为什么withEnv(['VERSION=1.0.0'])
给我Version=1.0.0
但是在docker-compose-yml
image: microservices/my-service:${Version}
代替image: microservices/my-service:${VERSION}
工作正常。
您是否尝试将以下environment
放在Jenkinsfile中?
{
...
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"
}
}
另外,您可以使用.env
文件使用默认值,但@ mulg0r( 固定链接 )在他的答案中解释了这个解决方案。 您可以在docker-compose文档中阅读变量替换以获取更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.