将批处理变量添加到groovy email-ext管道

时间:2016-08-31 13:04:14

标签: batch-file jenkins groovy jenkins-pipeline

不是常规或批处理的专业人士,但这里就是。

我有一个时髦的脚本,其中一小部分在jenkins pipleine发生故障时发送电子邮件。这是捕获代码,如果出现问题,它会发送电子邮件。

catch (Exception e){
    def buildNumber = env.BUILD_NUMBER
    def buildurl = env.BUILD_URL        
    def buildjobname = env.JOB_NAME

    bat 'for /f "delims=" %%a in (user_id.txt) do set USER_ID=%%a'

    emailext body: "Failure in build number $buildNumber for the job name $buildjobname. See URL for more detail: $buildurl",
    subject: "Failure in build number $buildNumber for the job name $buildjobname",
    to: 
}

正如您所看到的,我有一行执行一些bat shell脚本,它通过读取文件将user_id内容存储到USER_ID变量中。现在我想在我的to属性中使用USER_ID变量(类似这样:to: USER_ID),但似乎这不是这样做的。

我的错误是什么

编辑:我想我必须使用EnvInject插件?

3 个答案:

答案 0 :(得分:1)

在Jenkins管道代码中,您可以使用bat输出将userId作为变量。示例:

catch (Exception e){
    def buildNumber = env.BUILD_NUMBER
    def buildurl = env.BUILD_URL        
    def buildjobname = env.JOB_NAME

    def userId = bat script: 'for /f "delims=" %%a in (user_id.txt) do echo %%a', returnStdout: true

    emailext body: "Failure in build number $buildNumber for the job name $buildjobname. See URL for more detail: $buildurl",
    subject: "Failure in build number $buildNumber for the job name $buildjobname",
    to: "${userId}"
}

我不太确定如何使用bat脚本输出你的userId(更熟悉shell脚本,抱歉)但是你明白了......

答案 1 :(得分:1)

使用jenkins插件解决了这个问题

readFile 'user_id.txt'

答案 2 :(得分:0)

在groovy中,您可以访问以下环境变量:

groovy -e "println System.env.LOGNAME"

因此可以(如果USER_ID是环境变量)可以访问变量的内容,如

to: System.env.USER_ID

但也许在你的jenkins env中,变量已经存在了?

to: env.USER_ID

另一种可能性是:

to: new File("user_id.txt").text.replace("\n", "")