Jenkins 如果存在,卸载舵以移除释放装置

Jenkins 如果存在,卸载舵以移除释放装置,jenkins,jenkins-pipeline,kubernetes-helm,Jenkins,Jenkins Pipeline,Kubernetes Helm,我正在使用头盔3,我有3个不同的值。每个环境的yaml。如果我的初始版本在运行helm升级时以失败状态结束,以避免出现错误--安装myapp dev,我希望删除相关环境的版本(如果存在) 因此,根据下面的脚本,如果部署阶段成功运行,那么它将卸载下一阶段的版本。根据前一阶段的“在发生故障的情况下”操作的最佳实践是什么?我应该使用try/catch块还是post部分?同时,在什么情况下我真的应该使用这种清洁剂 stage('Deploy to staging'){

我正在使用头盔3,我有3个不同的值。每个环境的yaml。如果我的初始版本在运行
helm升级时以失败状态结束,以避免出现错误--安装myapp dev
,我希望删除相关环境的版本(如果存在)

因此,根据下面的脚本,如果部署阶段成功运行,那么它将卸载下一阶段的版本。根据前一阶段的“在发生故障的情况下”操作的最佳实践是什么?我应该使用try/catch块还是post部分?同时,在什么情况下我真的应该使用这种清洁剂

        stage('Deploy to staging'){
          when{
            beforeAgent true
            expression{return env.GIT_BRANCH == "origin/test"}
        }
        steps{
            script{
                def namespace = "test"
                def ENV = "test"
                sh " helm upgrade myapp-test my-chart --install -f values.${ENV}.yaml --namespace ${namespace}"          
            }
        }
    }

    stage('Cleanup Stage'){
      when{
        beforeAgent true
        expression{return env.GIT_BRANCH == "origin/test"}
    }
        steps{
            script{
                //Uninstall a release from the cluster
                sh "helm uninstall myapp-test"

                //See currently deployed releases
                sh "helm list -all"
            }
        }
    }

在Jenkinsfile中,实际上应该执行
post
部分中的所有清理,无论发生什么错误都可以执行。例如,在您的情况下:

stages {
        stage('Deploy to staging'){
          when{
            beforeAgent true
            expression{return env.GIT_BRANCH == "origin/test"}
          }
          steps{
            script{
                def namespace = "test"
                def ENV = "test"
                sh " helm upgrade myapp-test my-chart --install -f values.${ENV}.yaml -- 
                 namespace ${namespace}"          
            }
          }
      }
}
post { 
  always { 
    helm uninstall myapp-test
  }
}

这将保证无论中间出现什么故障,您的环境都保持干净。

我可以在类似的阶段(如开发和生产阶段)使用post section吗。我的部署到生产环境和部署到开发环境的阶段相同。或者我应该在同一个post部分中运行命令的其余部分,例如helm uninstall myapp prod
post
实际上适用于整个管道,而不是单独的阶段。因此,如果您有安装到单独测试环境的阶段,您可能希望在文章的后一节中对所有阶段进行清理。显然,对于生产,您实际上不想
卸载
。因此混淆的是前一阶段进行部署,然后post部分将再次卸载它。我的意思是它将卸载以前安装的版本。我想我需要指定一些条件