gpt4 book ai didi

Jenkins 声明式管道,在从属代理上运行 groovy 脚本

转载 作者:行者123 更新时间:2023-12-02 04:09:36 31 4
gpt4 key购买 nike

我有一个 Jenkins 声明式管道,一直在 Jenkins master 上运行,并且运行良好。但是,现在我已经尝试在从属节点上执行此操作,管道中调用的 groovy 脚本无法访问工作区中的文件。

我的 Jenkins 文件看起来像这样......

pipeline {

agent {
label {
label "windows"
customWorkspace "WS-${env.BRANCH_NAME}"
}
}

stages {
stage('InitialSetup') {
steps {
"${env.WORKSPACE}/JenkinsScripts/myScript.groovy"
}
}
}

我可以在从属设备上看到它正在创建工作区,从 git 进行 checkout ,并正确执行脚本。但是,如果脚本中的某些内容尝试与工作区中的文件进行交互,则会失败。

如果我有这样简单的事情......

def updateFile(String filename) {
echo env.NODE_NAME
filename = "${env.WORKSPACE}/path/to/file"
def myFile = new File(filename)
<do other things with the file>
}

...它说找不到指定的文件。它为我提供了它正在寻找的路径,我可以确认该文件存在,并且代码在仅在主机上构建时运行。

为什么脚本可以在主节点上运行时找不到这种方式的文件?我将“echo env.NODE_NAME”命令添加到我的 groovy 文件中,它表示脚本正在正确的节点上执行。

谢谢。

最佳答案

事实证明,Groovy File 命令被认为是不安全的,尽管它们会在主服务器上运行,但不会在从服务器上运行。如果您从将代理设置为另一个节点的脚本中调用它们,它仍然会很好地执行命令,只是在主节点上,而不是在代理上。以下是文章 https://support.cloudbees.com/hc/en-us/articles/230922508-Pipeline-Files-manipulation 的摘录

<小时/>

File 类的操作在 master 上运行,因此仅当 build 在 master 上运行时才有效,在本示例中,我创建一个文件并检查是否可以使用存在的方法在节点上访问它,它不存在,因为new File(file) 在 master 上执行,为了检查这一点,我搜索存在于我的 master 上但不在节点中的文件夹 Users

stage 'file move wrong way'

//it only works on master
node('slave') {

def ws = pwd()
def context = ws + "/testArtifact"
def file = ws + '/file'
sh 'touch ' + file
sh 'ls ' + ws

echo 'File on node : ' + new File(file).exists()
echo 'Users : ' + new File('/Users').exists()

sh 'mv ' + file + ' ' + context
sh 'ls ' + ws
}

要执行文件操作命令,我们建议使用 native 命令。

这是一个简单的shell操作示例

stage 'Create file'
sh 'touch test.txt'

stage 'download file'
def out='$(pwd)/download/maven.tgz'
sh 'mkdir -p ./download'
sh 'curl -L http://ftp.cixug.es/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz -o ' + out

stage 'move/rename'
def newName = 'mvn.tgz'
sh 'mkdir -p $(pwd)/other'
sh 'mv ' + out + ' ' + newName
sh 'cp ' + newName + ' ' + out
}

关于Jenkins 声明式管道,在从属代理上运行 groovy 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43748826/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com