英文:
Transferring variables from bash script to Jenkins pipeline without plugins
问题
我正在处理一个需要执行bash脚本以从API获取信息的流水线。然后,我需要将这些值返回到Jenkinsfile中以供以后使用。这里的主要问题是有多个变量,如果只有一个变量,我可以通过STDOUT捕获它。
关于此问题的解决方案已经被评论在此处:链接,但不幸的是,答案已被删除。
这里的解决方案使用额外的文件,我想尽量避免这种情况。那个答案也有4年的历史了,我不确定Jenkins是否添加了任何允许这种变量传递的新功能。
英文:
I am working on a pipeline which requires a bash script to be executed in order to get some information from an API. I then need to get these values back into the Jenkinsfile to use them later. The big problem here is the multiple variables, as if it was one, I could just capture it through STDOUT.
The link to a solution commented here: https://stackoverflow.com/questions/10625259/how-to-set-environment-variables-in-jenkins/53430757#53430757, fails, as the answer has been deleted.
The solutions here: https://stackoverflow.com/questions/56846461/is-there-any-way-to-pass-variables-from-bash-script-to-jenkinsfile-without-using, use an extra file, and I would like to avoid that as much as possible. That answer is also 4 years old and I am unsure if there have been any features added to Jenkins that would allow for such transfer of variables.
答案1
得分: 1
你正在尝试以一种巧妙的方式来实现这个,我认为来自Jenkins的任何人都不会实现这个(在脚本中将变量从脚本传输到Jenkins而不创建临时文件)。
另外,你可以使用stdout的解决方法,如下:
pipeline {
agent any
stages {
stage('mainstage') {
steps {
script {
// ---- test.sh内容 ----
// #!/bin/bash
// my_first_variable="contentoffirstvar"
// my_second_variable="contentofsecondvar"
// echo "my_first_variable=$my_first_variable;my_second_variable=$my_second_variable"
// -------
def VARIABLES = sh (
script: '/var/jenkins_home/test.sh',
returnStdout: true
).trim().split(';')
VARIABLES.each { var ->
def (var_name, var_value) = var.split('=')
env."${var_name}" = var_value
}
}
}
}
}
}
作为改进的一点,你可以添加类似以下的模式:
===
my-var1=value1
my-var2=value2
===
然后根据模式拆分和查找,根据需要进行处理。
英文:
you are trying to to that in a tricky way, i dont think anyone from jenkins will implement this (transfer var from script to jenkins without tmp file creation)
ps you can use workarounds with stdout like:
pipeline {
agent any
stages {
stage('mainstage') {
steps {
script {
// ---- test.sh content ----
// #!/bin/bash
// my_first_variable="contentoffirstvar"
// my_second_variable="contentofsecondvar"
// echo "my_first_variable=$my_first_variable;my_second_variable=$my_second_variable"
// -------
def VARIABLES = sh (
script: '/var/jenkins_home/test.sh',
returnStdout: true
).trim().split(";")
VARIABLES.each { var ->
def (var_name, var_value) = var.split('=')
env."${var_name}" = var_value
}
}
}
}
}
}
as point for improvement you can add pattern like
===
my-var1=value1
my-var2=value2
===
and split + find by pattern as you want
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论