Bash Jenkins:在shell脚本和stage之间传递一个变量
我试图建立一个Jenkins管道,在这里我用一个shell脚本获取“相关”服务器名并将其存储在一个变量($server)中,然后我想在下一阶段使用该变量登录到该服务器并远程执行一个脚本。 我提出了以下方法,但无法确定如何在第一个和第二个函数之间传递服务器名称:Bash Jenkins:在shell脚本和stage之间传递一个变量,bash,shell,jenkins,groovy,Bash,Shell,Jenkins,Groovy,我试图建立一个Jenkins管道,在这里我用一个shell脚本获取“相关”服务器名并将其存储在一个变量($server)中,然后我想在下一阶段使用该变量登录到该服务器并远程执行一个脚本。 我提出了以下方法,但无法确定如何在第一个和第二个函数之间传递服务器名称: 1 def SERVER 2 3 def fetch_server() { 4 sh """#!/bin/bash 5 SERVER = ${env.LOCAL_SCRIPT_PATH}/getServe
1 def SERVER
2
3 def fetch_server() {
4 sh """#!/bin/bash
5 SERVER = ${env.LOCAL_SCRIPT_PATH}/getServer.sh ${params.HOSTNAME} ${TOKEN}
6 """
7 }
8 def provisioning() {
9 sh """#!/bin/bash
10 ssh -o StrictHostKeyChecking=no username@$SERVER 'bash -s' ${env.REMOTE_SCRIPT_PATH}/script.py
11 """
12 }
13
14 pipeline {
15 agent {
16 label 'slave1'
17 } // end agent
18 environment {
19 REMOTE_SCRIPT_PATH = '/usr/local/bin/scripts'
20 LOCAL_SCRIPT_PATH = './jobs/scripts'
21 }
22 parameters {
23 string(
24 name: 'HOSTNAME',
25 defaultValue: '---',
26 description: 'Enter the hostname of server'
27 ) // end HOSTNAME parameter
28 } // end parameters
29 stages {
30 stage('Stage 1') {
31 steps {
32 withCredentials([string(credentialsId: 'some_cred', variable: 'TOKEN')]) {
33 fetch_server()
34 }
35 } // end steps
36 } // end Stage 1
37 stage('Stage 2') {
38 steps {
39 sshagent(credentials : ['username']) {
40 provisioning()
41 } // end ssh credentials
42 } // end steps
43 } // end Stage 2
44 } // end stages
45 post {
46 always {
47 cleanWs()
48 } // end always
49 } // end post step
50 } // end pipeline
~
甚至可能是我在这里试图做的吗?分配给shell脚本的环境变量在shell会话之外不会持久存在。您必须从
sh
步骤中获取标准输出,并将其分配给Groovy变量,如下所示:
@groovy.transform.Field String SERVER = null
def fetch_server() {
SERVER = sh( returnStdout: true,
script: "${env.LOCAL_SCRIPT_PATH}/getServer.sh ${params.HOSTNAME} ${TOKEN}" ).trim()
}
注意使用
@groovy.transform.Field
注释,这是从函数中访问变量所必需的(否则它实际上将是的隐式run
方法的局部变量)。@Cyrus我使用bashTnx进行解释,这对我帮助很大!