我正在尝试标记我的 docker 图像`。我正在使用 Jenkins 通过声明一个字符串参数来为我做这件事。
在docker-compose.yml
文件中,我的图像如下:
image: api:"${version}"
我收到一条错误消息,提示标签不正确。
在我的 Jenkins 管道中,我有一个名为version
default的字符串参数LATEST
。但是,我希望能够输入v1
或v2
用作图像标签。
我正在使用蓝绿部署。
我正在尝试标记我的 docker 图像`。我正在使用 Jenkins 通过声明一个字符串参数来为我做这件事。
在docker-compose.yml
文件中,我的图像如下:
image: api:"${version}"
我收到一条错误消息,提示标签不正确。
在我的 Jenkins 管道中,我有一个名为version
default的字符串参数LATEST
。但是,我希望能够输入v1
或v2
用作图像标签。
我正在使用蓝绿部署。
在我的 Jenkins 管道中,我有一个名为 version 的字符串参数,默认为 LASTEST。但是我希望能够输入 v1 或 v2,这是容器使用的标签。
假设 docker compose 在您的 Jenkins 管道中运行,那么${version} you use in
docker-compose.yml` 必须在 Jenkins 管道的 shell 环境中可用,否则将评估为无,从而给您错误提示标签无效。
抱歉,我不熟悉 Jenkins,所以我不知道如何正确设置${version}
正在运行的 shell 环境中的值,因此您需要围绕这个进行一些搜索。
就像提示一样,docker-compose.yml
您可以使用 bash 扩展为您使用的变量分配默认值,例如:
image: api:"${version:-latest}"
或者如果你想要一个明确的错误
image: api:"${version? Mipssing version for docker image!!!}"
您可以在管道中VERSION
为构建使用设置环境withEnv
,例如:
# Jenkinsfile
---
stage('build'){
node('vagrant'){
withEnv([
'VERSION=0.1'
]){
git_checkout()
dir('app'){
ansiColor('xterm') {
sh 'mvn clean install'
}
}
// build docker image with version
sh 'docker build --rm -t app:${VERSION} .'
}
}
}
def git_checkout(){
checkout([
$class: 'GitSCM',
branches: [[name: '*/' + env.BRANCH_NAME]],
doGenerateSubmoduleConfigurations: false,
extensions: [
[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: false, reference: '', trackingSubmodules: true],
[$class: 'AuthorInChangelog'],
[$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false]
],
submoduleCfg: [],
userRemoteConfigs: [
[credentialsId: '...', url: 'ssh://vagrant@ubuntu18/usr/local/repos/app.git']
]
])
}
# Dockerfile
---
FROM ubuntu:18.04
RUN apt update && \
apt install -y openjdk-11-jre && \
apt clean
COPY app/special-security/target/special-security.jar /bin
ENTRYPOINT ["java", "-jar", "/bin/special-security.jar"]
命令使用 Jenkins 构建环境中设置的版本号docker build
。
注意:java
我正在构建的应用程序maven
(例如mvn clean install
)纯粹是出于示例目的,代码可在https://stackoverflow.com/a/54450290/1423507获得。此外,Jenkins 控制台中的彩色输出需要AnsiColor 插件,如https://stackoverflow.com/a/53227633/1423507所述。最后,docker-compose
在本例中不使用,在环境中设置版本没有区别。