当前位置: 首页 > 知识库问答 >
问题:

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

濮阳鸿祯
2023-03-14

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

我有 bitbucket 存储库,其中“Jenkinsfile”将包含部署步骤,而“Dockerfile”则希望从中创建容器并在其中运行部署步骤。

我想先用一些例子来测试一下。所以我有这样的“Dockerfile”。

#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 

我有下面这样的“詹金斯文件”。

pipeline {
    agent { node { label 'slave_node' } }
    stages {
        stage('Test') {
            agent {
                dockerfile true
            }
            steps {
                sh 'cat /etc/os-release'
                sh 'curl --version'
                sh 'echo Successfully compiled'
            }
        }
    }
} 

当我执行这个管道作业时,

    < li >它获取Jenkins文件。 < li >在提到的从节点上正确启动。 < li >检查回购代码。 < li >进入阶段 < li >但当进入阶段(“测试”)时,Node会变回“Master Jenkins”,并再次开始检查回购代码。[这就是我的问题所在。我不知道为什么会切换] < li >进入阶段 < li >运行“Docker文件” < li >尝试从Hub中提取图像。但是由于“找不到Docker命令”而导致作业失败(预期错误,因为主节点没有设置。

问题是:为什么工作从Slave_node变成了master_node?请帮忙。谢谢。

如果我在我的个人笔记本电脑上运行这个,它的工作原理非常好。

共有3个答案

乐华晖
2023-03-14

找到了另一种方法来实现这一目标。我们可以使用 dockerfile 功能本身与任何代理节点结合使用。

示例如下

#!/usr/bin/env groovy
pipeline {
  agent {
    dockerfile {
      filename 'Dockerfile'
      label 'slave_node'
    }
  }
  stages {
    stage("example stage") {
      steps {
        script {
          sh 'cat /etc/os-release'
          sh 'curl --version'
          sh 'echo Successfully compiled'
        }
      }
    }
  }
}

代码可以在这里找到:语法和搜索关键字“dockerfile”来查找详细信息。

方祺
2023-03-14

参考 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'
    }
}

谢谢

井嘉胜
2023-03-14

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

您可以通过在本文档中搜索“指定Docker标签”来找到此特定选项的参考。

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

 类似资料:
  • 我有一个多分支管道架构的以下Jenkinsfile 我试图在Ubuntu和Red Hat节点上并行运行“构建”阶段,而仅在Ubuntu节点上运行“测试”阶段。 任何人都可以帮助我指定如何选择在哪些节点上运行哪些阶段。我在网上找到的解决方案很少,但他们建议重写构建阶段两次:一次用于Red Hat节点,另一次用于Ubuntu节点。难道没有办法在没有代码重复的情况下做到这一点吗? 非常感谢

  • 问题内容: 我有一大堆具有相同标签的节点。我希望能够在Jenkins中运行一个作业,该作业在具有相同标签的 所有 节点上执行并同时执行。 我看到了在詹金斯中使用矩阵配置选项的建议,但我只能想到一个轴(标签组)。当我尝试运行该作业时,似乎它只执行一次而不是300次(该标签组中的每个节点1次)。 我的另一条轴应该是什么?还是…有一些插件可以做到这一点?我曾经尝试过NodeLabel参数插件,然后选择“

  • 并编写下面的查询,它是只在我的master上运行,还是将所有10个节点都用作worker? 如果不是,我必须做什么才能让我的Spark Sql使用完整的集群?

  • 我对是否可以在从属节点中使用Groovy脚本运行Jenkins作业感到困惑。我提到了一个 StackOverflow 答案 [1],它说 System Groovy 脚本作业可以在主站而不是从站中运行,并且要在从站中运行作业,它必须是 Groovy 脚本而不是 System Groovy 脚本。有人可以澄清我是否可以使用系统时髦脚本运行从属作业吗?由于我正在尝试通过Groovy脚本,因此无法访问几

  • 问题内容: 我正在尝试从Jenkins运行TestNG测试(在一个包含的Java项目中),但是没有运气。 似乎Jenkins的TestNG插件(https://wiki.jenkins-ci.org/display/JENKINS/testng- plugin )仅发布TestNG测试的结果,但实际上不运行测试类…或我错了吗? 无论如何,我如何在Jenkins的TestNG项目中实际运行TestN

  • 我试图从Jenkins那里运行TestNG测试(在一个包含Java的项目中),但没有成功。 看起来好像是Jenkins的TestNG插件(https://wiki.jenkins-ci.org/display/JENKINS/testng-plugin)只发布TestNG测试的结果,但不实际运行测试类。。。还是我错了? 在任何情况下,我如何在与Jenkins的TestNG项目中实际运行TestNG