我有这个Jenkinsfile:
#!groovy
pipeline
{
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
}
agent {
label 'docker && new'
}
stages
{
stage('Docker build')
{
when {
branch 'dev'
}
steps
{
sh "echo ${env.BUILD_NUMBER}"
sh "./scripts/push.sh Docker http://xxxxx.xxxx ${env.BUILD_NUMBER} ${env.GIT_BRANCH}"
sh "echo ${env.BUILD_NUMBER}"
sh "echo ${env.GIT_BRANCH}"
}
}
stage("Initialise")
{
agent {
dockerfile {
filename 'Dockerfile'
label 'docker && new'
args '--entrypoint ""'
}
}
steps {
sh "terraform init -input=false"
}
}
stage("WorkspaceDev") {
agent {
dockerfile {
filename 'Dockerfile'
label 'docker && new'
args '--entrypoint ""'
}
}
when {
branch 'dev'
}
steps {
sh "terraform workspace select dev || terraform workspace new dev"
}
}
}
}
它从我的Dockerfile构建一个容器,但是运行此作业时,它正在创建一个新的Docker容器以运行称为WorkspaceDev的下一阶段。我需要在第一阶段使用单独的代理,然后在所有其他阶段使用dockerfile代理
如何使用为初始化阶段构建的相同容器?
问题:
运行此管道时,“ Docker构建”阶段将按预期在代理本身上执行。 然后进入“初始化”阶段。这将构建一个新的Docker容器(docker构建(我在此阶段的代理部分中指定的我的Dockerfile)。此阶段在此容器内完成。 接下来进入“ WorkspaceDev”阶段,然后再次使用docker build重建容器。
我想使用在“初始化”阶段构建的相同容器
答案 0 :(得分:0)
您不能使用agent { label 'NODE_LABEL' }
吗?
您的问题不是很清楚,但似乎您在Jenkinsfile的上部定义了一个全局代理。如果您要在其他代理上运行的阶段是“ Docker build”阶段,则只需像在其他阶段中一样指定代理即可。
答案 1 :(得分:0)
我认为当您使用Dockerfile-agent时,标签没有任何意义(因此将被忽略),因此它会为每个阶段创建一个新容器。
因此,请尝试以下操作:
#!groovy
pipeline
{
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
}
agent {
dockerfile {
filename 'Dockerfile'
args '--entrypoint ""'
}
}
stages
{
stage('Docker build')
{
agent {
dockerfile {
filename 'Dockerfile'
args '--entrypoint ""'
}
}
when {
branch 'dev'
}
steps
{
sh "echo ${env.BUILD_NUMBER}"
sh "./scripts/push.sh Docker http://xxxxx.xxxx ${env.BUILD_NUMBER} ${env.GIT_BRANCH}"
sh "echo ${env.BUILD_NUMBER}"
sh "echo ${env.GIT_BRANCH}"
}
}
stage("Initialise")
{
steps {
sh "terraform init -input=false"
}
}
stage("WorkspaceDev") {
when {
branch 'dev'
}
steps {
sh "terraform workspace select dev || terraform workspace new dev"
}
}
}
}