Ida*_*dar 6 groovy jenkins jenkins-pipeline
尽管遵循了这个答案和其他答案,但我无法在我的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()
}
}
}
}
}
...
...
}
Run Code Online (Sandbox Code Playgroud)
deployer.groovy:
#!/usr/bin/env groovy
def generateManifest() {
sh "..."
echo "..."
}
Run Code Online (Sandbox Code Playgroud)
在控制台日志(堆栈)中:
[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
Run Code Online (Sandbox Code Playgroud)
更新:
看来问题不在于加载文件,而在于文件的内容,我在其中执行以下操作显然无法正常工作:
sh "node $(pwd)/config/mustacher manifest.template.yml config/environments/common.json config/environments/someFile.json"
echo "..."
Run Code Online (Sandbox Code Playgroud)
如果只有echo,则为堆栈。
所以不是工作sh "node ..."也不是echo工作。即使将其更改为sh "pwd"失败也是如此。会是什么呢?文件中的语法?它在管道中的调用方式?
如果我将在管道中进行相同的节点调用(例如,在withCredentials if语句中,它将起作用)。
return this在文件底部添加deployer.groovy,然后更改load步骤以使用 groovy 文件的相对路径和扩展名,例如load('deployer.groovy').
jenkins.ioreturn this上有记录:
获取工作区中的文件名并将其作为 Groovy 源文本运行。加载的文件可以包含顶层语句或仅加载并运行一个闭包。例如:
Run Code Online (Sandbox Code Playgroud)def pipeline node('slave') { pipeline = load 'pipeline.groovy' pipeline.functionA() } pipeline.functionB()
管道.groovy
Run Code Online (Sandbox Code Playgroud)def pipelineMethod() { ...code } return this
在pipeline.groovy以结尾之前定义了 functionA 和 functionB 函数(以及其他函数)return this
| 归档时间: |
|
| 查看次数: |
8633 次 |
| 最近记录: |