Batch file 将批处理变量添加到groovy电子邮件扩展管道
不是groovy或batch上的专业人士,但现在开始 我有一个groovy脚本,其中一小部分在jenkins pipleine出现故障时发送电子邮件。下面是一个catch代码,如果出现问题,它会发送电子邮件Batch file 将批处理变量添加到groovy电子邮件扩展管道,batch-file,jenkins,groovy,jenkins-pipeline,Batch File,Jenkins,Groovy,Jenkins Pipeline,不是groovy或batch上的专业人士,但现在开始 我有一个groovy脚本,其中一小部分在jenkins pipleine出现故障时发送电子邮件。下面是一个catch代码,如果出现问题,它会发送电子邮件 catch (Exception e){ def buildNumber = env.BUILD_NUMBER def buildurl = env.BUILD_URL def buildjobname = env.JOB_NAME bat
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:
}
如您所见,我有一行代码,它执行一些batshell脚本,通过读取一个文件将user_id内容存储到user_id变量中。现在我想在我的to
属性中使用USER\u ID变量(类似于:to:USER\u ID
),但似乎不是这样做的
我错了什么
编辑:我想我必须使用EnvInject插件?在groovy中,您可以访问如下环境变量:
groovy -e "println System.env.LOGNAME"
因此,有可能(如果USER_ID是一个环境变量)访问变量的内容,如
to: System.env.USER_ID
但也许在你的jenkins环境中,变量已经存在了
to: env.USER_ID
?
另一种可能是:
to: new File("user_id.txt").text.replace("\n", "")
在groovy中,您可以访问如下环境变量:
groovy -e "println System.env.LOGNAME"
因此,有可能(如果USER_ID是一个环境变量)访问变量的内容,如
to: System.env.USER_ID
但也许在你的jenkins环境中,变量已经存在了
to: env.USER_ID
?
另一种可能是:
to: new File("user_id.txt").text.replace("\n", "")
在Jenkins管道代码中,可以使用bat输出将用户ID作为变量。例如:
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脚本(更熟悉shell脚本,抱歉)输出您的用户ID,但您知道……在Jenkins pipelines代码中,您可以使用bat输出将您的用户ID作为变量。例如:
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脚本(更熟悉shell脚本,抱歉)输出您的用户ID,但您知道了…使用a jenkins插件解决了这个问题
readFile 'user_id.txt'
通过使用jenkins插件解决了这个问题
readFile 'user_id.txt'
不,没有
env.USER\u ID
这样的东西,但是有env.USERNAME
但是没有给出启动构建的用户ID。可能不直接在“to:”之后的地图中。您可以尝试创建一个def userId=new File(“user_id.txt”).text.replace(“\n”,”)的变量,并在to:userId中使用该变量…嗯,我似乎无法使用它?我发现这个错误脚本不允许使用新的java.io.File java.lang.String
,这很可悲。我目前对詹金斯一无所知…:-(感谢您的帮助。我正在查看inject环境变量是否有帮助,因为没有env.USER_ID
这样的东西,但是有env.USERNAME
,但没有提供启动构建的用户ID。可能不直接在“to:”之后的映射中。您可以尝试创建一个def userId=new File(“USER_ID.txt”)的变量.text.replace(“\n”,”)并使用to:userId中的变量…嗯,似乎我无法使用它?我得到了这个错误脚本,不允许使用新的java.io.File java.lang.String
,这很遗憾。我目前对jenkins一无所知…:-(感谢您的帮助。我正在查看inject环境变量是否有帮助。我尝试了它,得到了以下错误:类hudson.plugins.emailext.EmailExtStep.setTo()需要类java.lang.String,但收到类java.lang.Integer
我已经相应地编辑了我的答案,请尝试使用“${userId}”
而不是userId
,这将得到一个字符串0@domain.com而'${userId}'
给我${userId}@domain.com。“${userId}”
基本上是编写一个启用变量替换的字符串,这意味着它将用它的值替换变量userid,因此显示0
。'${userid}“
正在编写一个没有变量替换的字符串,这不是您想要的。但是如果代码是正确的,如果您对显示的0
不满意,您应该检查为什么您的文件具有此用户ID而不是您想要的用户ID…但这与此问题无关!我尝试了它,得到了此错误:class hudson!”.plugins.emailext.EmailExtStep.setTo()需要类java.lang.String,但收到类java.lang.Integer
我已相应地编辑了我的答案,请尝试使用“${userId}”
而不是userId
,这将得到一个字符串。编写“${userId}”将给我提供一个字符串0@domain.com'${userId}'
给我${userId}@domain.com.“${userId}”
基本上是用变量替换启用来编写字符串,这意味着它将用它的值替换变量userId,因此显示0
。'${userId}“
正在编写一个没有变量替换的字符串,这不是您想要的。但是,如果提供的代码是正确的,如果您对显示的0
不满意,您应该检查为什么您的文件有此用户ID而不是您想要的…但这与此问题无关!