我正在尝试将Docker与Jenkins脚本化管道一起使用,并遇到一些问题。
如果我在sh docker ...
中使用它会导致错误
command not found docker
我试图通过更改“全局配置”工具中的“安装”设置来修复它,但没有成功。
我正在尝试使用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中有命令(因此它是我的容器内置的) )。
答案 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