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

时间:2019-10-16 09:00:45

标签: docker jenkins jenkins-pipeline

我正在尝试将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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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 :(得分:0)

我对相对路径也有问题,但是通过在相对路径pwd之前添加build的简单解决方法已解决。

Thx @yzT