当前位置: 首页 > 知识库问答 >
问题:

jenkinsfile groovy脚本中bash的访问字符串变量

况明贤
2023-03-14

我正在使用gradle和bash脚本在docker图像中构建几个android应用程序。该脚本由运行docker映像的jenkins触发。在bash脚本中,我收集有关构建成功的信息。我想将该信息传递给jenkinsfile的groovy脚本。我试图在docker容器中创建一个txt文件,但jenkinsfile中的groovy脚本找不到该html" target="_blank">文件。这是我的jenkinsfile的groovy脚本:

script {
    try {
        sh script:'''
        #!/bin/bash
        ./jenkins.sh
        '''
    } catch(e){
        currentBuild.result = "FAILURE"
    } finally {
        String buildResults = null
        try {
            def pathToBuildResults="[...]/buildResults.txt"
            buildResults = readFile "${pathToBuildResults}"
        } catch(e) {
            buildResults = "error receiving build results. Error: " + e.toString()
        } 
    }
}

在我的jenkins.shbash脚本中,我执行以下操作:

[...]
buildResults+=" $appName: Build Failed!" //this is done for several apps
echo "$buildResults" | cat > $pathToBuildResults //this works I checked, if the file is created
[...]

文件已创建,但groovy找不到它。我认为原因是jenkins脚本不在docker容器内运行。

如何在groovy jenkins脚本中访问bash脚本的字符串构建结果?

共有1个答案

乜栋
2023-03-14

为了避免读取结果文件,您有一个选择,就是修改您的jenkins。sh脚本将结果打印到输出中,而不是将其写入文件,然后使用sh步骤捕获该输出并使用它代替文件
类似于:

script {
    try {
        String buildResults = sh returnStdout: true, script:'''
           #!/bin/bash
           ./jenkins.sh
           '''
        // You now have the output of jenkins.sh inside the buildResults parameter
    } catch(e){
        currentBuild.result = "FAILURE"
    }
}

这样,您就避免了处理输出文件并直接获得所需结果的需要,然后可以根据需要对其进行解析和使用。

 类似资料:
  • 问题内容: 我正在尝试提交post变量的地方编写bash脚本,但是wget将其视为多个URL,我相信是因为它不是URLENCODED …这是我的基本思想 我遇到了错误,alert.php没有得到post变量,而且它还很糊糊地说 无法解决我无法解决我无法解决尝试..依此类推。 上面的示例是一个简单的sudo示例,但我相信如果可以对其进行url编码,它将通过,我什至尝试了php: 但PHP错误了..任

  • 我一直在尝试写一个bash脚本。它的一部分应该用来代替字符串的一部分。 这就是我想做的 我尝试了stack的一些建议。但什么都没有。我尝试添加sed,但似乎没有效果。 我的想法是,我有一个脚本,它接受一个db导入文件名,比如说和输出。 我正在运行Ubuntu 16.04 LTS。

  • 问题内容: 如何使用bash脚本查找出现字符串的行号? 例如,如果文件看起来像这样, 我运行脚本来查找字符串“ line”,它将输出数字2,因为它是第一次出现。 问题答案: 鉴于您的示例仅显示字符串首次出现的行号,也许您正在寻找: 如果您确实希望所有出现(例如,如果您的示例的期望输出实际上是“ 2 \ n3 \ n”),请省略。

  • 问题内容: 如果我有一个字符串变量,谁的值是如何使用空格作为分隔符来对此进行标记?我会用吗? 问题答案: 使用外壳程序对未加引号的变量的自动标记化: 如果要更改定界符,则可以设置变量,该变量代表内部字段分隔符。的默认值是(空格,制表,换行)。 (请注意,在第二个示例中,我在第二行周围添加了括号。这创建了一个子shell,因此对的更改不会持续。您通常不想永久更改,因为它可能会对毫无疑问的shell命

  • 我必须从我的 Groovy 脚本访问一个环境变量。我没有使用詹金斯。如何获取变量?

  • 问题内容: 我正在尝试使用通过函数传递的变量访问JSON: 显然,这是行不通的,因为“类别”是我通过函数传递的内容,而不是属性的真实名称,但是我一直尝试尝试不同的可能性。提前致谢! 问题答案: 在JS中,是的同义词。 另外,您正在处理的是JavaScript对象,而不是JSON(尽管它可能 起源于 JSON ) *对于遇到这种情况并使用ES6的用户进行 *更新 ,现在可以在分配过程中使用变量: 作