【发布时间】:2018-05-22 19:05:28
【问题描述】:
我想在 bash 脚本中运行 Groovy 脚本。
我有一个 groovy 脚本,它正在从 jenkins 创建一个我需要的变量。 (出于某种原因,整个 CI 都是用 bash 编写的)。
我需要在 groovy 中运行它,因为我无法在 bash 中重现它。
所以我的 bash 代码如下所示:
LAST_SUCCESSFUL_BUILD_DATE=$(groovy scripts/jenkins-lastbuild-date.groovy)
groovy脚本在文件夹scripts中,是这样的:
#!/usr/bin/env groovy
import jenkins.model.Jenkins
def envVars = Jenkins.instance.getGlobalNodeProperties()[0].getEnvVars()
// the job name is a global Jenkins variable, so I get it from there
def item = Jenkins.instance.getItem(envVars['JOB_NAME'])
def ff=item.getLastSuccessfulBuild()
println ff.getTime().format("yyyy-MM-dd")
但是当我运行它时,我得到了错误
line 254: groovy: command not found
有什么想法吗?我需要从最后一次成功提交中获取日期。
【问题讨论】:
-
如果我理解正确,这没有任何意义。您不能只从该脚本访问 Jenkins API。在管道中运行该代码并将所需信息作为环境变量提供给 bash 脚本怎么样?
env.LAST_SUCCESSFUL_BUILD_DATE = ff.getTime().format("yyyy-MM-dd") -
嗯,理想情况下我会这样做.. 但是管道都是用 bash 编写的,所以我可以从中触发脚本吗?所以就像 CI 是用 shell 脚本编写的一样 ```ci/pdf/script.sh ENVIRONMENT="$(cat ".pdf-bundle-url")" export ENVIRONMENT`
-
然后最好迁移到 Jenkins Pipelines.. 或者将其拆分并一点一点提取。
-
理想情况下我会迁移它,但它的管道很长......嗯,我可以只为管道提供一个 groovy 脚本吗?
-
你不能从外部调用这些 Jenkins Java API。您必须查询 Rest / XML API(在作业 URL 后面附加
/api/)。
标签: bash jenkins groovy continuous-integration cd