使用不带交互模式的Docker Pipeline插件

问题描述 投票:0回答:3

我正在尝试将Docker与Jenkins脚本化管道一起使用,并遇到一些问题。

如果在sh docker ...中使用它会导致错误

command not found docker

  1. 我试图通过更改全局配置工具中的安装​​设置来修复它-但失败了。

  2. 我正在尝试使用Docker插件。

def run_my_stage(String name, String cmd, String commit) {
return {
    stage(name) {
        node("builder") {
                docker.withRegistry("192.168.1.33:5000") {
                    def myimg = docker.image("my-img")
                    sh "docker pull ${myimg.imageName()}"
                    sh "docker run ${cmd}"
                }
            }
        }
}

其中cmd == --user=\$UID --rm -t -v ./build/:/home/user/build 192.168.1.33:5000/my-img

我将此代码用于并行阶段(动态生成的阶段列表),并收到此错误

java.net.MalformedURLException: no protocol: 192.168.1.33:5000

此插件的正确用法是什么?我在withRun中发现了很多示例,在docker中还发现了其他方法,但是我不需要在此映像中运行任何命令,我在Dockerfile中有命令(因此它是我的容器内置的)。

docker jenkins pipeline
3个回答
1
投票

错误本身有答案:)。

java.net.MalformedURLException:无协议:192.168.1.33:5000

您在自定义注册表中缺少protocol。请参阅https://jenkins.io/doc/book/pipeline/docker/#custom-registry

def run_my_stage(String name, String cmd, String commit) {
return {
    stage(name) {
        node("builder") {
                docker.withRegistry("https://192.168.1.33:5000") {
                    def myimg = docker.image("my-img")
                    sh "docker pull ${myimg.imageName()}"
                    sh "docker run ${cmd}"
                }
            }
        }
}

2
投票

您缺少协议,注册表必须为https://192.168.1.33:5000


0
投票

[我也对相对路径有问题,但是通过在pwd的相对路径之前添加build来进行简单修复。

Thx @yzT

© www.soinside.com 2019 - 2024. All rights reserved.