0

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: How to set environment variables in Jenkins?, fails, as the answer has been deleted.
The solutions here: Is there any way to pass variables from bash script to Jenkinsfile without using extra plugins, 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.

PythonSnek
  • 542
  • 4
  • 21

1 Answers1

1

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

Ruslan
  • 444
  • 3
  • 8