如何指定已在文件中安装docker的节点类型?
我想使用docker来构建我的代码。并非所有jenkin奴隶都安装了docker,因此如果我只指定:如何指定已在文件中安装docker的节点类型?,docker,jenkins,jenkins-pipeline,Docker,Jenkins,Jenkins Pipeline,我想使用docker来构建我的代码。并非所有jenkin奴隶都安装了docker,因此如果我只指定: agent { dockerfile true } 它失败,并显示一条消息“docker not found”。我相信这是因为docker并没有安装在相应的jenkins从/主设备中,而jenkins从/主设备就是负责这项工作的。所以我的问题是:如何确保jenkins作业由安装了docker的节点选择 如果我使用: agent { node { label 'h
agent {
dockerfile true
}
它失败,并显示一条消息“docker not found”。我相信这是因为docker并没有安装在相应的jenkins从/主设备中,而jenkins从/主设备就是负责这项工作的。所以我的问题是:如何确保jenkins作业由安装了docker的节点选择
如果我使用:
agent {
node {
label 'has-docker'
dockerfile true
}
}
我得到以下错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 2: Only one agent type is allowed per agent section @ line 2, column 5.
agent {
^
WorkflowScript: 2: No agent type specified. Must be one of [docker, dockerfile, label, any, none] @ line 2, column 5.
agent {
您需要为docker安装了通用标签的代理提供一个通用标签,并在管道的代理部分中使用该标签。jenkins文档在定义节点时为
标签
标记说明了以下内容
标签(或标签)用于将多个代理分组为一个逻辑代理
小组。例如,如果您有多个Windows代理,并且
必须在Windows上运行的作业,然后您可以配置所有
Windows代理具有Windows标签,然后将该作业绑定到
这个标签。这将确保您的作业在其中一台计算机上运行
Windows代理,但不在没有此标签的任何代理上
标签不一定必须表示计算机上的操作系统
代理人;您还可以使用标签来说明CPU体系结构,或者
代理上安装了某个工具
多个标签必须用空格分隔。例如,windows
docker将为代理分配两个标签:windows和docker
标签可以包含任何非空格字符,但应避免
以下任何一种特殊字符:&|(),和其他詹金斯一样
功能允许定义标签表达式,其中包含这些字符
可以使用
在您的情况下,也可以通过使用常见标签(如“docker”)标记安装了docker的节点来执行相同的操作
至于您遇到的错误,我们提到了修复方法
使用两个
agent
指令可以解决此问题:
agent none
用于整个管道,dockeragent
用于特定阶段
您的文件应如下所示:
pipeline{
agent none
stages{
stage('stage_name'){
agent {
dockerfile{
label 'slave-label'
dir 'relative/location/of/Dockerfile'
}
}
...
}
}
}
您可以在
docker
块内提供一个额外的参数label
,如文档所述
码头工人使用给定容器执行管道或阶段,该容器将在预先配置为接受基于Docker的管道的节点上,或在与可选定义的
标签
参数匹配的节点上动态配置
如果您使用的是dockerfile而不是docker,则情况类似
pipeline {
agent {
dockerfile {
filename 'Dockerfile'
dir 'build'
label 'docker-node'
}
}
stages {
...
}
}
您不能在
docker
闭包中指定dockerfile
,因此上述修复无法工作
pipeline {
agent {
docker {
image 'node:14-alpine'
label 'docker-node'
}
}
stages {
...
}
}
pipeline {
agent {
dockerfile {
filename 'Dockerfile'
dir 'build'
label 'docker-node'
}
}
stages {
...
}
}