【问题标题】:Run groovy script from bash script从 bash 脚本运行 groovy 脚本
【发布时间】: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


【解决方案1】:

这似乎是环境变量的问题,因为您正在尝试使用 shebang 中的 env 本地化 groovy

我会做两件事:

  1. 获取安装 groovy 的详细信息

去服务器尝试运行:

mbp:~ jhartman$ which groovy
/usr/local/bin/groovy
  1. 然后将脚本的第一行替换为确切的位置:
#!/usr/local/bin/groovy
import jenkins.model.Jenkins

最好的问候, 贾雷克

【讨论】:

    猜你喜欢
    • 2017-11-04
    • 2017-06-10
    • 1970-01-01
    • 2013-06-25
    • 2023-04-07
    • 2011-01-22
    • 2013-09-14
    • 2013-11-06
    • 2013-03-14
    相关资源
    最近更新 更多