-2

我正在尝试标记我的 docker 图像`。我正在使用 Jenkins 通过声明一个字符串参数来为我做这件事。

docker-compose.yml文件中,我的图像如下:

image: api:"${version}"

我收到一条错误消息,提示标签不正确。

在我的 Jenkins 管道中,我有一个名为versiondefault的字符串参数LATEST。但是,我希望能够输入v1v2用作图像标签。

我正在使用蓝绿部署。

4

2 回答 2

0

问题

在我的 Jenkins 管道中,我有一个名为 version 的字符串参数,默认为 LASTEST。但是我希望能够输入 v1 或 v2,这是容器使用的标签。

假设 docker compose 在您的 Jenkins 管道中运行,那么${version} you use indocker-compose.yml` 必须在 Jenkins 管道的 shell 环境中可用,否则将评估为无,从而给您错误提示标签无效。

解决方案

抱歉,我不熟悉 Jenkins,所以我不知道如何正确设置${version}正在运行的 shell 环境中的值,因此您需要围绕这个进行一些搜索。

小费

就像提示一样,docker-compose.yml您可以使用 bash 扩展为您使用的变量分配默认值,例如:

image: api:"${version:-latest}"

或者如果你想要一个明确的错误

image: api:"${version? Mipssing version for docker image!!!}"
于 2019-02-01T18:01:44.027 回答
0

您可以在管道中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在本例中不使用,在环境中设置版本没有区别。

于 2019-02-03T11:24:18.417 回答