twe*_*sat 5 jenkins docker docker-compose jenkins-pipeline
我正在尝试将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()
}
}
Run Code Online (Sandbox Code Playgroud)
和一个docker-compose.yml喜欢
version: '3.6'
services:
my-service:
image: microservices/my-service:${VERSION}
container_name: my-service
...
Run Code Online (Sandbox Code Playgroud)
一切正常,除了最后一个阶段不使用我的环境变量。
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.
Run Code Online (Sandbox Code Playgroud)
您需要将这些 ENV 保存在文件中(jenkinsfile 的输出,dockercompose 文件的输入)。那么,你有两种可能:
如果您需要将 ENV 保存在my-service容器内,请将 ENV 保存在 中./your_envfile.env,然后添加
版本:'3.6'
服务:
我的服务:
图片:微服务/我的服务:${VERSION}
容器名称:我的服务
env_file: ./your_envfile.env如果您需要在 docker-compose 文件中使用 ENV,正如我在您的image部分中看到的那样${VERSION},您需要将 ENV 保存在.env文件中。
.env文件必须与执行 docker-compose 位于同一路径中,或者至少有一个名为的符号链接,./env该符号链接指向您以这种格式保存 ENV 的某个位置:
VERSION=1.0.0
...
| 归档时间: |
|
| 查看次数: |
4083 次 |
| 最近记录: |