【发布时间】:2018-09-21 21:52:55
【问题描述】:
我对以下示例有两个问题:
pipeline {
agent { label "docker" }
stages {
stage('Build') {
agent {
docker {
image 'maven:3.5.0-jdk-8'
}
}
steps {
...
}
}
}
}
问题 1:
当我在 Jenkinsfile 的顶层声明代理时,这意味着它将用于以下所有阶段。那么有什么区别:
agent { label "docker" }
和
agent {
docker {
image 'maven:3.5.0-jdk-8'
}
}
第一个将使用 docker 代理,第二个将使用带有 maven 映像的 docker 代理作为可执行环境?标签“docker”代理在哪里配置/安装?
问题 2:
label 标签是如何工作的?我知道某处已经创建代理并使用标签我只是指向它 - 就像上面的示例一样:默认情况下我使用“docker”代理?这也意味着在steps {...} 期间,此代理将被 maven 代理覆盖?
问题 3:
以下示例的最后一个问题:
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v ... -e ...'
}
}
stages {
stage('Maven Build') {
steps {
sh '...'
}
}
stage('Docker push') {
agent {
docker 'openjdk:8-jdk-alpine'
}
steps {
script {
docker.build("my-image")
}
}
}
}
post {
...
}
}
我想使用带有 maven:3-alpine 图像的 docker 容器构建第一阶段。在构建期间打印以下错误:
...tmp/durable-54b54bdc/script.sh: line 1: docker: not found
所以我修改了这个例子,这是工作结果:
pipeline {
agent any
stages {
stage('Docker push') {
steps {
script {
docker.build("my-image")
}
}
}
}
}
在这种情况下 agent any 是如何工作的?哪个代理可以执行 docker.build?
【问题讨论】:
标签: docker jenkins jenkins-pipeline