Jenkins:无法访问初始 运行 上的工件
Jenkins: unable to access the artifacts on the initial run
我的设置:Linux 上的主节点 运行 和 Windows 上的代理。我想在代理上编译一个库,存档这些工件并将它们复制到主节点上,以创建一个与 Linux 已编译二进制文件一起发布的版本。
这是我的 Jenkinsfile
:
pipeline {
agent none
stages {
stage('Build-Windows') {
agent {
dockerfile {
filename 'docker/Dockerfile-Windows'
label 'windows'
}
}
steps {
bat "tools/ci/build.bat"
archiveArtifacts artifacts: 'build_32/bin/mylib.dll'
}
}
}
post {
success {
node('linux') {
copyArtifacts filter: 'build_32/bin/mylib.dll', flatten: true, projectName: '${JOB_NAME}', target: 'Win32'
}
}
}
}
我的问题是,当我第一次 运行 这个项目时,出现以下错误
Unable to find project for artifact copy: mylib
但是当我评论 copyArtifacts
块并重新 运行 项目时,它是成功的并且我在项目概述中有可行的工件。在此之后我可以重新启用 copyArtifacts
然后工件将按预期复制。
如何配置管道以便它可以在初始 运行 上访问工件?
copyArtifacts
功能通常用于在不同构建之间复制工件,而不是在同一构建的代理之间复制工件。相反,要实现您想要的效果,您可以使用 stash and unstash 关键字,这些关键字专为在同一管道执行中传递来自不同代理的工件而设计:
stash: Stash some files to be used later in the build.
Saves a set of files for later use on any node/workspace in the same Pipeline run. By default, stashed files are discarded at the end of a pipeline run
unstash: Restore files previously stashed.
Restores a set of files previously stashed into the current workspace.
在你的情况下它可能看起来像:
pipeline {
agent none
stages {
stage('Build-Windows') {
agent {
dockerfile {
filename 'docker/Dockerfile-Windows'
label 'windows'
}
}
steps {
bat "tools/ci/build.bat"
// dir is used to control the path structure of the stashed artifact
dir('build_32/bin'){
stash name: "build_artifact" ,includes: 'mylib.dll'
}
}
}
}
post {
success {
node('linux') {
// dir is used to control the output location of the unstash keyword
dir('Win32'){
unstash "build_artifact"
}
}
}
}
我的设置:Linux 上的主节点 运行 和 Windows 上的代理。我想在代理上编译一个库,存档这些工件并将它们复制到主节点上,以创建一个与 Linux 已编译二进制文件一起发布的版本。
这是我的 Jenkinsfile
:
pipeline {
agent none
stages {
stage('Build-Windows') {
agent {
dockerfile {
filename 'docker/Dockerfile-Windows'
label 'windows'
}
}
steps {
bat "tools/ci/build.bat"
archiveArtifacts artifacts: 'build_32/bin/mylib.dll'
}
}
}
post {
success {
node('linux') {
copyArtifacts filter: 'build_32/bin/mylib.dll', flatten: true, projectName: '${JOB_NAME}', target: 'Win32'
}
}
}
}
我的问题是,当我第一次 运行 这个项目时,出现以下错误
Unable to find project for artifact copy: mylib
但是当我评论 copyArtifacts
块并重新 运行 项目时,它是成功的并且我在项目概述中有可行的工件。在此之后我可以重新启用 copyArtifacts
然后工件将按预期复制。
如何配置管道以便它可以在初始 运行 上访问工件?
copyArtifacts
功能通常用于在不同构建之间复制工件,而不是在同一构建的代理之间复制工件。相反,要实现您想要的效果,您可以使用 stash and unstash 关键字,这些关键字专为在同一管道执行中传递来自不同代理的工件而设计:
stash: Stash some files to be used later in the build.
Saves a set of files for later use on any node/workspace in the same Pipeline run. By default, stashed files are discarded at the end of a pipeline run
unstash: Restore files previously stashed.
Restores a set of files previously stashed into the current workspace.
在你的情况下它可能看起来像:
pipeline {
agent none
stages {
stage('Build-Windows') {
agent {
dockerfile {
filename 'docker/Dockerfile-Windows'
label 'windows'
}
}
steps {
bat "tools/ci/build.bat"
// dir is used to control the path structure of the stashed artifact
dir('build_32/bin'){
stash name: "build_artifact" ,includes: 'mylib.dll'
}
}
}
}
post {
success {
node('linux') {
// dir is used to control the output location of the unstash keyword
dir('Win32'){
unstash "build_artifact"
}
}
}
}