从 Jenkins Pipeline 调用时,Bash 脚本 if 条件不起作用

从 Jenkins Pipeline 调用时,Bash 脚本 if 条件不起作用

以下是我的 Jenkins Pipeline 阶段

stage ('Import') {

            steps {
                sshagent([sshCredentials]) {
                    sh '''
                        #!/bin/bash
                        sh -x ETL_AUTOMATION/Scripts/export.sh
                    '''

构建输出:-

[[ RMO_TST12 ==  ]]

ETL_AUTOMATION/Scripts/export.sh: 17: ETL_AUTOMATION/Scripts/export.sh: [[: not found

if脚本中的条件:-

if [[ "$SOURCE_FOLDER" == "" ]]; then

    echo "SOURCE_FOLDER not specified... exiting"
    exit 1
fi

#!/bin/bash我在我的脚本中也提到过。

请帮帮我,我真的被困在这里了。

答案1

您正在运行sh -x ETL_AUTOMATION/Scripts/export.sh。这意味着正在由而不是export.sh运行。在 Ubuntu 上,是一个名为 的简单 POSIX shell ,它不支持构造,这是一个问题。因此,只需更改您的脚本,使其使用而不是启动。我根本不了解 Jenkins 语法,但我怀疑您想要其中之一:shbashshdash[[bashbashsh

sshagent([sshCredentials]) {
    sh '''
        ETL_AUTOMATION/Scripts/export.sh
        '''

或者,如果你的export.sh不可执行:

sshagent([sshCredentials]) {
    sh '''
        bash ETL_AUTOMATION/Scripts/export.sh
        '''

或者,也许简单一点:

sshagent([sshCredentials]) {
    bash '''
        ETL_AUTOMATION/Scripts/export.sh
        '''

或者,您可以进行更改,export.sh以使其不使用仅限 bash 的功能:

if [ -z $SOURCE_FOLDER ]; then
    echo "SOURCE_FOLDER not specified... exiting"
    exit 1
fi

相关内容