Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jenkins管道参数标记docker图像_Docker_Jenkins_Docker Compose_Jenkins Pipeline_Docker Tag - Fatal编程技术网

使用Jenkins管道参数标记docker图像

使用Jenkins管道参数标记docker图像,docker,jenkins,docker-compose,jenkins-pipeline,docker-tag,Docker,Jenkins,Docker Compose,Jenkins Pipeline,Docker Tag,我正在尝试标记我的docker图像“”。我使用Jenkins通过声明一个字符串参数来实现这一点 在docker compose.yml文件中,我的图像如下: image:api:“${version}” 我收到一个错误,说标签不正确 在Jenkins管道中,我有一个名为version的字符串参数,默认值为LATEST。但是,我希望能够输入将用作图像标记的v1或v2 我正在使用蓝绿色部署进行此操作。问题 在Jenkins管道中,我有一个名为version的字符串参数,默认为LASTEST。但是,我

我正在尝试标记我的docker图像“”。我使用Jenkins通过声明一个字符串参数来实现这一点

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

image:api:“${version}”

我收到一个错误,说标签不正确

在Jenkins管道中,我有一个名为
version
的字符串参数,默认值为
LATEST
。但是,我希望能够输入将用作图像标记的
v1
v2

我正在使用蓝绿色部署进行此操作。

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

假设docker compose在Jenkins管道内运行,那么在docker compose.yml`中使用的
${version}必须在Jenkins管道的shell环境中可用,否则将计算为空,从而导致错误,表明标记无效

解决方案 抱歉,我不熟悉Jenkins,因此我无法告诉您如何在shell环境中正确设置
${version}
的值,因此您需要对此进行一些搜索

提示 正如
docker compose.yml
中的提示一样,您可以使用bash扩展为您使用的变量指定默认值,如:

image: api:"${version:-latest}"
或者如果你想要一个明确的错误

image: api:"${version? Mipssing version for docker image!!!}"

您可以使用管道中的
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']
        ]
    ])
}
Jenkins构建环境中设置的版本号由
docker build
命令使用

注意:我正在使用
maven
构建的
java
应用程序(例如
mvn clean install
)纯粹是出于示例目的,代码是可用的。此外,Jenkins控制台中的彩色输出需要AnsiColor插件,如前所述。最后,在本例中,不使用
docker compose
,在环境中设置版本没有区别

# 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"]