Tim*_*lin 5 groovy jenkins jenkins-groovy jenkins-pipeline
我想使用Jenkins的“输入步骤”将二进制文件上传到当前工作区。
但是,下面的代码似乎将文件上传到 Jenkins master,而不是上传到作业正在运行的 slave 上的当前作业的工作区。有没有办法解决这个问题?
最好不必在主盘上添加执行程序或将文件弄乱主盘。
def inFile = input id: 'file1', message: 'Upload a file', parameters: [file(name: 'data.tmp', description: 'Choose a file')]
Run Code Online (Sandbox Code Playgroud)
正如您在JENKINS-27413 中看到的那样,Jenkins 似乎正式不支持上传二进制文件。您仍然可以使用该input步骤在您的工作区中获取二进制文件。我们将使用一种方法来使其工作,但我们不会在内部使用它,Jenkinsfile否则我们会遇到与In-process Script Approval. 相反,我们将使用Global Shared Libraries,这被认为是 Jenkins 的最佳实践之一。
请按照以下步骤操作:
1)创建共享库
vars在上面的存储库中创建一个名为的目录。在vars目录中,创建一个copy_bin_to_wksp.groovy包含以下内容的文件:def inputGetFile(String savedfile = null) {
def filedata = null
def filename = null
// Get file using input step, will put it in build directory
// the filename will not be included in the upload data, so optionally allow it to be specified
if (savedfile == null) {
def inputFile = input message: 'Upload file', parameters: [file(name: 'library_data_upload'), string(name: 'filename', defaultValue: 'demo-backend-1.0-SNAPSHOT.jar')]
filedata = inputFile['library_data_upload']
filename = inputFile['filename']
} else {
def inputFile = input message: 'Upload file', parameters: [file(name: 'library_data_upload')]
filedata = inputFile
filename = savedfile
}
// Read contents and write to workspace
writeFile(file: filename, encoding: 'Base64', text: filedata.read().getBytes().encodeBase64().toString())
// Remove the file from the master to avoid stuff like secret leakage
filedata.delete()
return filename
}
Run Code Online (Sandbox Code Playgroud)
2) 配置 Jenkins 以在任何管道作业中访问共享库
3)在你的工作中访问共享库
Jenkinsfile,添加以下代码:@Library('my-shared-library@master') _
node {
// Use any file name in place of *demo-backend-1.0-SNAPSHOT.jar* that i have used below
def file_in_workspace = copy_bin_to_wksp.inputGetFile('demo-backend-1.0-SNAPSHOT.jar')
sh "ls -ltR"
}
Run Code Online (Sandbox Code Playgroud)
你已经准备好运行这项工作了。:)
笔记:
代码参考:James Hogarth 的评论
| 归档时间: |
|
| 查看次数: |
9962 次 |
| 最近记录: |