如何在Jenkins从节点上运行Dockerfile代理?

时间:2020-08-11 18:48:29

标签: docker jenkins

请在下面帮助我。 我在一台共享服务器上安装了Jenkins。当前由多个团队使用,因此不允许在此处安装其他软件包/软件。 每个团队都添加了专用的从属节点,可以根据需要在其中进行配置。 同样,我们有一个专用节点来运行我们的工作。(这也是我也要运行我的工作的地方)

我有一个Bitbucket存储库,其中带有“ Jenkinsfile ”,其中包含部署步骤,而“ Dockerfile ”中,我们想从中创建容器并在其中运行部署步骤

我正在尝试通过一些示例对此进行测试。所以我有这样的“ Dockerfile ”。

unique=True

我的“ Jenkinsfile ”如下所示。

#This image is Developed from ubuntu:18.04-Dockerhub
FROM ubuntu:18.04

#Updating System Packages and installing required packages
RUN apt-get update && \
    apt-get install -y openssh-server wget git curl zip unzip && \
    apt-get clean

#Installing rsync
RUN apt-get install -y rsync 

当我执行此管道作业时,

  • 它获取Jenkins文件。
  • 在提到的从节点上正确启动。
  • 签出回购代码。
  • 进入阶段
  • 但是进入阶段(“测试”)时,Node变回“ Master Jenkins”,并且再次开始检出回购代码。 [这是我遇到的问题。我不知道为什么要切换它]
  • 进入阶段
  • 运行“ Docker文件”
  • 尝试从集线器中拉出图像。但由于“找不到Docker命令”而使作业失败(由于主节点没有设置,因此发生了预期错误。

问题是:为什么Job从Slave_node切换到master_node? 请帮忙。预先感谢。

如果我在我的个人笔记本电脑上运行它,它就可以正常工作。

2 个答案:

答案 0 :(得分:0)

我会在Jenkins中检查您的Docker设置。可能是您已将主节点定义为默认的Jenkins代理,因此,当您仅使用“ dockerfile:true”运行时,它将尝试在主节点上运行构建。

您可以通过在本文档中搜索“指定Docker标签”来找到对该特定选项的引用。

https://www.jenkins.io/doc/book/pipeline/docker/

答案 1 :(得分:0)

引用https://www.jenkins.io/doc/book/pipeline/docker/ 我可以使用脚本化管道满足我的需求。所以在这里发布答案作为答案。

但是我仍然不知道声明性管道有什么问题。

node ('slave_node') {
    checkout scm
    def customImage = docker.build("custom-image-name")
    customImage.inside {
        sh 'Inside Container'
        sh 'cat /etc/os-release'
        sh 'curl --version'
        sh 'echo Successfully compiled'
    }
}

谢谢