jenkins - 如何使用 Jenkins 管道构建 docker 镜像?

标签 jenkins jenkins-pipeline

通过使用 jenkins,我创建了一个“Pipeline”类型的项目。我设置“Pipeline from SCM”来获取 Jenkinsfile。你可以查看我的GitHub repository :

我想使用 Jenkins 管道构建 Docker 镜像。这是 Jenkinsfile:

node {
   sh "docker build -t 192.168.59.224:5000/ubuntu-test ."
}

Dockerfile也很简单:

FROM ubuntu:14.04

RUN sudo apt-get update && sudo apt-get install -y wget

当我运行该项目时。我收到以下错误:

unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /var/jenkins_home/workspace/test/Dockerfile: no such file or directory

这是完整的控制台输出

Started by user kai
[Pipeline] node
Running on master in /var/jenkins_home/workspace/test
[Pipeline] {
[Pipeline] sh
[test] Running shell script
+ docker build -t 192.168.59.224:5000/ubuntu-test .
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /var/jenkins_home/workspace/test/Dockerfile: no such file or directory
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

我检查了工作区:

ls /var/jenkins_home/workspace/test/


ls /var/jenkins_home/workspace/test@script/
Dockerfile
Jenkinsfile

test目录下没有任何内容,但是Jenkinsfile和Dockerfile都在test@script目录下。

看来Jenkins只能从存储库中获取Jenkins。当它执行Jenkinsfile时,如果没有Dockerfile,则无法构建docker镜像。

如何解决这个问题?

最佳答案

您没有指示 Jenkins 检查您的存储库。您可以通过在调用 docker 之前添加 checkout scm 来实现此目的。像这样:

node {
  checkout scm
  sh "docker build -t 192.168.59.224:5000/ubuntu-test ."
}

当您使用“Pipeline from SCM”时,变量 scm 由 Jenkins 设置,并指向 Jenkins 获取 Jenkinsfile 的位置。

关于jenkins - 如何使用 Jenkins 管道构建 docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42453967/

相关文章:

Jenkins 管道如何更改到另一个文件夹并运行 npm 测试

jenkins - 如何参数化 Jenkinsfile 作业

java - 为 Maven 将分拆的子 JVM 进程设置 permgen 大小

node.js - 在 mac-os-x Yosemite 上调用 "npm"时 Jenkins 构建步骤失败

Jenkins 管道多配置项目

Jenkins Pipeline waitUntil bash命令返回特定字符串

linux - java.lang.NoSuchMethodError : No such DSL method 'bash' found among steps 错误

Jenkins 多分支流水线轻量级结账

java - jenkins pipeline 错误 此环境中没有提供编译器 也许您正在 JRE 而不是 JDK 上运行

github - 当授权用户对 github pull request 发表评论时如何触发 jenkins 管道阶段?