gpt4 book ai didi

jenkins - 如何从 Jenkinsfile 调用 groovy 函数?

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

尽管关注 this answer和其他人,我无法在我的 Jenkinsfile 中成功使用本地 groovy 文件(两者都在同一个存储库中)。

def deployer = null
...
...
...
pipeline {
agent {
label 'cf_slave'
}

options {
skipDefaultCheckout()
disableConcurrentBuilds()
}

stages {
stage ("Checkout SCM") {
steps {
checkout scm
}
}
...
...
...
stage ("Publish CF app") {
steps {
script {
STAGE_NAME = "Publish CF app"
deployer = fileLoader.load ('deployer')

withCredentials(...) {
if (BRANCH_NAME == "develop") {
...
...
...
} else {
deployer.generateManifest()
}
}
}
}
}
...
...
}

deployer.groovy :
#!/usr/bin/env groovy

def generateManifest() {
sh "..."
echo "..."
}

在控制台日志 ( stack ) 中:
[Pipeline] stage
[Pipeline] { (Publish CF app)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
before loading groovy file
[Pipeline] echo
Loading from deployer.groovy
[Pipeline] load
[Pipeline] // load
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage

更新:

似乎问题不在于加载文件,而在于文件的内容,我在其中执行以下显然效果不佳的命令:
sh "node $(pwd)/config/mustacher manifest.template.yml config/environments/common.json config/environments/someFile.json"
echo "..."

当只有 echo有吗, this is the stack .

所以不是 sh "node ..."也不是 echo工作。甚至将其更改为 sh "pwd"也失败了。会是什么呢?文件中的语法?它在管道中的调用方式?

如果我将在管道中进行相同的节点调用(例如在 withCredentials if 语句中,它会起作用。

最佳答案

添加 return this到底部 deployer.groovy文件,然后更改您 load使用相对路径和扩展名到 groovy 文件的步骤,如 load('deployer.groovy') .return this记录在 jenkins.io :

Takes a filename in the workspace and runs it as Groovy source text.The loaded file can contain statements at top level or just load and run a closure. For example:

def pipeline
node('slave') {
pipeline = load 'pipeline.groovy'
pipeline.functionA()
}
pipeline.functionB()

pipeline.groovy

def pipelineMethod() {
...code
}

return this

哪里 pipeline.groovy在以 return this 结尾之前定义 functionA 和 functionB 函数(以及其他)

关于jenkins - 如何从 Jenkinsfile 调用 groovy 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42790966/

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