groovy 如何根据Jenkins中的触发者为已完成的构建获取不同的值?

6qftjkof  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(167)

我在Groovy的Jenkins中有一个代码,它向Slack发送通知,并提供谁开始构建的信息:

def startedBy = "${env.BUILD_USER_ID}"
def message =  "\nJob started by: ${startedBy}"
return message

我使用的是build-vars-plugin
有三种变体:

  • 如果通过UI启动构建或由另一个触发,启动管道=则我看到Job started by: john.doe
  • 如果通过curl =开始构建,则会看到Job started by: remoteHost
  • 通过cron =启动fi构建,然后我看到Job started by: timer

我如何重写脚本,以便我可以看到:

  • Job started by: john.doe@example.com每当值由两个字段组成时name.surname +我为公司中所有人员添加相同邮件
  • Job started by: remoteHost(由curl远程启动时)
  • Job started by: timer(由cron启动时)
6za6bjd0

6za6bjd01#

我看有两个办法可以解决:
1.正如您所说的,我们可能依赖于这样一个事实,即您的用户总是使用{forename}.{surname},然后我们应该尝试将BUILD_USER_ID值拆分为.,并检查是否存在两部分。
1.我们还可以依赖于这两个用户ID remoteHosttimer是恒定的并且排除它们。
两个版本我都实现了,看看username为tommy的情况,函数返回的结果不一样。

[
    'john.doe',
    'max.mustermann',
    'tommy',
    'timer',
    'remote'
].each {
    println "env.BUILD_USER_ID: ${it}; createMessage1: '${createMessage1(it)}'; createMessage2: '${createMessage2(it)}'"
}

String createMessage1(String userId) {
    def startedBy
    if (userId?.split("\\.")?.size() == 2) {
        startedBy = "${userId}@example.com"
    } else {
        startedBy = userId
    }
    "Job started by: ${startedBy}"
}

String createMessage2(String userId) {
    def startedBy
    if (!(userId in ['timer', 'remoteHost'])) {
        startedBy = "${userId}@example.com"
    } else {
        startedBy = userId
    }
    "Job started by: ${startedBy}"
}

我希望它能帮助你继续前进。

相关问题