我想使用 Jenkins 声明性管道和代理语法来构建一个人工制品,然后我想将其部署到侧车容器中,如以下伪代码所示:
pipeline {
agent none
stages {
stage('Build Artefact') {
agent { docker 'build-agent' }
steps {
< I want to create the artefact to deploy to a side car container here >
}
}
stage('Deploy Artefact') {
agent { docker 'side-car' }
steps {
< I want to deploy the artefact created in the previous stage here >
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在努力解决如何将文件从“构建人工制品”阶段使用的容器传递到“部署人工制品”中使用的容器,据我所知stash不会跨容器工作,除非有人有否则体验。
根据 Jenkins 文档,您可以使用 args 参数为声明性管道语法指定卷:
pipeline {
agent {
docker {
image 'maven:3-alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
stages {
stage('Build') {
steps {
sh 'mvn -B'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有更优雅的解决方案,不涉及传递卷。
如果工件不是太大,您可以使用该stash指令在不同容器的阶段之间传递一些文件。
pipeline {
agent none
stages {
stage('Build Artefact') {
agent { docker 'build-agent' }
steps {
sh 'make'
stash includes: 'myartefact', name: 'ARTEFACT'
}
}
stage('Deploy Artefact') {
agent { docker 'side-car' }
steps {
unstash 'ARTEFACT'
sh 'deploy.sh'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
有关完整详细信息,请参阅stash 文档
当您使用“docker run”时,您可以使用 -v 参数将逻辑 docker 卷与物理 jenkins 目录(例如自己的作业工作区)映射。
这里有更详细的信息: