我有一块代码目前运行良好。但是重用那个代码有点难看。
pipeline {
agent any
stages {
stage('Stage 1') {
steps {
script {
withCredentials([
gitUsernamePassword(credentialsId: 'jenkins-credentials', gitToolName: 'Default', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD')
]) {
sh '''#!/bin/bash
export GIT_USERNAME=${GIT_USERNAME};
export GIT_PASSWORD=${GIT_PASSWORD};
export PROYECT_DIRECTORY=${PROYECT_DIRECTORY};
export CHECKOUT_POINT=${CHECKOUT_POINT};
export GIT_HTTPS_REPO_DEPLOY=${GIT_HTTPS_REPO_DEPLOY};
export MARIADB_HOSTNAME=${MARIADB_HOSTNAME};
./scripts/awesome_script.sh
'''
}
}
}
}
}
}
问题是当我在sh((块中应用if语句来使用不同的脚本bash时。脚本./scripts/awesome _script.sh
需要导出该变量。因此,代码看起来是这样的。
script {
withCredentials([
gitUsernamePassword(credentialsId: 'jenkins-credentials', gitToolName: 'Default', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD')
]) {
sh '''#!/bin/bash
export GIT_USERNAME=${GIT_USERNAME};
export GIT_PASSWORD=${GIT_PASSWORD};
export PROYECT_DIRECTORY=${PROYECT_DIRECTORY};
export CHECKOUT_POINT=${CHECKOUT_POINT};
export GIT_HTTPS_REPO_DEPLOY=${GIT_HTTPS_REPO_DEPLOY};
export MARIADB_HOSTNAME=${MARIADB_HOSTNAME};
./scripts/awesome_script.sh
'''
if(env.APP_ENV == 'testing'){
sh '''#!/bin/bash
export GIT_USERNAME=${GIT_USERNAME};
export GIT_PASSWORD=${GIT_PASSWORD};
export PROYECT_DIRECTORY=${PROYECT_DIRECTORY};
export CHECKOUT_POINT=${CHECKOUT_POINT};
export GIT_HTTPS_REPO_DEPLOY=${GIT_HTTPS_REPO_DEPLOY};
export MARIADB_HOSTNAME=${MARIADB_HOSTNAME};
./scripts/awesome_script_2.sh
'''
}
}
}
很难看,对吧?:/:(
我看到的是类似于此的东西,但语法正确:
script {
env.STRING_BLOCK_WITHOUT_PROCESSING = '''
export GIT_USERNAME=${GIT_USERNAME};
export GIT_PASSWORD=${GIT_PASSWORD};
export PROYECT_DIRECTORY=${PROYECT_DIRECTORY};
export CHECKOUT_POINT=${CHECKOUT_POINT};
export GIT_HTTPS_REPO_DEPLOY=${GIT_HTTPS_REPO_DEPLOY};
export MARIADB_HOSTNAME=${MARIADB_HOSTNAME};
''';
withCredentials([
gitUsernamePassword(credentialsId: 'jenkins-credentials', gitToolName: 'Default', usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD')
]) {
sh '''#!/bin/bash
${STRING_BLOCK_WITHOUT_PROCESSING}
./scripts/awesome_script.sh
'''
if(env.APP_ENV == 'testing'){
sh '''#!/bin/bash
${STRING_BLOCK_WITHOUT_PROCESSING}
./scripts/awesome_script_2.sh
'''
}
}
}
谢谢你能给我的一切帮助。<3
下面这个怎么样。如果需要,可以使用withCredentials
块包装withEnv
块。
pipeline {
agent any
stages {
stage('Build') {
steps {
script {
def CHECKOUT_POINT="checkpoint"
def PROYECT_DIRECTORY = "directoryyy"
def env = "prod"
withEnv(["PROYECT_DIRECTORY=${PROYECT_DIRECTORY}", "CHECKOUT_POINT=${CHECKOUT_POINT}"]) {
if(env == "test") {
sh'''
echo DIR is $PROYECT_DIRECTORY
echo Checkpoint is $CHECKOUT_POINT
'''
} else {
sh'''
echo DIR is $PROYECT_DIRECTORY
echo Checkpoint is $CHECKOUT_POINT
'''
}
}
}
}
}
}
}