在Jenkins的if-else语句中使用环境变量

9rnv2umw  于 2023-04-29  发布在  Jenkins
关注(0)|答案(1)|浏览(144)

在Jenkins中,我创建了一个管道来经历几个阶段。在第二阶段,在第一阶段克隆存储库之后,我想检查${REPOSITORY_NAME}/apps目录中是否存在名为${FILENAME}的文件。
如果存在,我想执行kubectl rollout restart deployment ${APPLICATION_NAME},如果不存在,我想创建这样的应用程序。
我不习惯Jenkins的环境变量,在if-else语句中使用它时遇到了麻烦。
即使${FILENAME}存在,env.ALREADY_EXISTS也不会变成"true";但是我已经确认了echo "ALREADY_EXISTS = ${ALREADY_EXISTS}"的结果是ALREADY_EXISTS = true
为什么env.ALREADY_EXISTS没有更新,如何解决这个问题?先谢谢你了。

pipeline {
    agent any
    environment {
      APPLICATION_NAME="myapp"
      REPOSITORY_NAME="myrepo"
      FILENAME="${APPLICATION_NAME}-app.yaml"
      ALREADY_EXISTS="false"
    }
    stages {
        stage("Clone Git Repository") {
            steps {
                git(
                    url: "https://github.com/myid/${REPOSITORY_NAME}.git",
                    branch: "main",
                    changelog: true,
                    credentialsId: 'mycreds',
                    poll: true
                )
            }
        }
        stage("Check if file already exists") {
            steps {
                sh '''
                  cd ./apps
                  if [ -f "${FILENAME}" ]; then
                    echo "${FILENAME} exists"
                    ALREADY_EXISTS="true"
                  else
                    echo "${FILENAME} does not exist"
                    ALREADY_EXISTS="false"
                  fi
                  echo "ALREADY_EXISTS = ${ALREADY_EXISTS}"
                  cd ..
                '''
            }
        }
        stage("Rollout or create app") {
            steps {
                script {
                    if (env.ALREADY_EXISTS == "true") {
                        withKubeConfig([namespace: "${APPLICATION_NAME}-${CLIENT_ID}"]) {
                            sh 'curl -LO https://dl.k8s.io/release/v1.26.3/bin/linux/amd64/kubectl'
                            sh 'chmod u+x ./kubectl'
                            sh './kubectl rollout restart deployment ${APPLICATION_NAME}'
                        }
                    } else {
                      sh '''
                        # Create new app ...
                      '''
                    }
                }
            }
        }
    }
}
ulydmbyx

ulydmbyx1#

不能在sh块中设置环境变量或管道变量。这里是你如何可以做到这一点。以下是使用fileExists实用程序步骤的简化版本。

def fExists = false

pipeline {
  agent any
  stages {
    stage('Stage 1') {
      steps {
        script {
            sh 'echo "test" >> file.txt'
            def exists = fileExists 'file.txt'
            if(exists){
                echo "File exists"
                fExists = true
            }
        }
      }
    }
    stage('Stage 2') {
      steps {
        script {     
            echo "$fExists"
        }
      }
    }
  }
}

相关问题