重用块字符串而不进行动态处理



我有一块代码目前运行良好。但是重用那个代码有点难看。

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
'''
}
}
}
}
}
}
}

最新更新