【问题标题】:How to use source command within Jenkins pipeline script如何在 Jenkins 流水线脚本中使用 source 命令
【发布时间】:2016-12-04 12:31:49
【问题描述】:

我最近将 bash 执行命令重写到 Jenkins 管道中。旧代码是这样的

...
source environment.sh
//Build
//Test
...

现在我使用管道脚本来包装命令,像这样

sh '''
    ...
    source environment.sh
    //Build
    //Test
    ...
'''

但是,我收到了一个错误,as.../.jenkins/script.sh: line 9: source: environment.sh: file not found。当我尝试less environment.sh 时,它显示正确。所以我怀疑sh wrap 中的source command 有问题。

在使用管道之前,source environment.sh 命令在 shell 执行中运行良好。所以源是安装在 Jenkins 服务器上的,看来流水线脚本不知道源命令是什么。

如何在 sh 包装块中运行 source 命令?

【问题讨论】:

  • 调试使用echo $pwd; ls .

标签: linux bash shell jenkins jenkins-pipeline


【解决方案1】:

sourcebash/ksh/etc 扩展,作为. 的更“实质性”同义词提供。

sh中,需要使用.,以防底层shell是不支持命令source的一种(如dash)。

sh '''
    ...
    . ./environment.sh
    //Build
    //Test
    ...
'''

【讨论】:

  • 我想三引号是管道脚本中的语法,它标识多行命令。我尝试使用. 而不是source,但是,没有运气。类似的错误抛出/.jenkins/script.sh: line 9: .: environment.sh: file not found
  • 啊,错过了这不仅仅是一个shell脚本。 (虽然这应该很明显,抱歉。)看起来真正的问题是 Jenkins 的工作目录与您的原始脚本不同。使用绝对路径(而不仅仅是environment.sh)应该可以工作。
  • 谢谢,使用绝对路径,它可以工作。尽管如此,linux找不到文件还是很奇怪
  • @Neil 你必须把'./'放在第一位:. ./environment.sh。它对我有用。
  • 已修复;如果文件名中没有/,我总是忘记. 使用路径查找。
【解决方案2】:

source environment.sh 替换为

. ./environment.sh

请注意,第一个点后面有一个空格。

【讨论】:

  • 这个有效。我不再需要使用绝对路径。谢谢
【解决方案3】:

如果有人想使用源代码执行脚本,解决方案是将“Shell 可执行文件”更改为 bash in ->Manage Jenkins->Configure System

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2022-08-25
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多