首页 > 解决方案 > 在 openshift 中部署特定的标记图像

问题描述

嗨,我正在开发 Openshift 3.9。下面是一段詹金斯管道代码

     stage('Build Image') {
        openshift.withCluster() {
            openshift.withProject(env.DEV_PROJECT) {
                        def bcSelector = openshift.selector("bc", "jboss")
                        def bcExists = bcSelector.exists()
                   if (!bcExists) { 
                    openshift.newBuild("--name=jboss", "--image-stream=jboss-eap70-openshift:1.5", "--binary=true") 
                   } else {echo "The specified image already exists"}                       
            }}
   }    
      stage('Build Image with app') {
        sh "rm -rf oc-build && mkdir -p oc-build/deployments"
        sh "cp /var/lib/jenkins/jobs/devpipeline/jobs/devpipeline-tasks-pipeline/workspace/target/hello-1.0.war oc-build/deployments/ROOT.war"                                
           openshift.withCluster() {
             openshift.withProject(env.DEV_PROJECT) {
               openshift.selector("bc", "jboss").startBuild("--from-dir=oc-build", "--wait=true")
             }
           }
      }
      stage('deploy to Dev') {
                              openshift.withCluster() {
          openshift.withProject(env.DEV_PROJECT) {
            if (openshift.selector('dc', 'jboss').exists()) {
              openshift.selector('dc', 'jboss').delete()
              openshift.selector('svc', 'jboss').delete()
              openshift.selector('route', 'jboss').delete()
            }

            def app = openshift.newApp("jboss:latest")
            app.narrow("svc").expose();
            def dc = openshift.selector("dc", "jboss")
           openshift.tag("${env.DEV_PROJECT}/jboss:latest", "${env.DEV_PROJECT}/jboss:${build_number}")
         }
    }
   }

Build阶段 iam 正在使用 jboss 容器。在Build Image with app阶段,我正在获取构建的war文件并使用war文件构建jboss的图像。在deploy to dev我将应用程序图像部署到dev中并用jenkins构建号标记图像${env.DEV_PROJECT}/jboss:${build_number}。我正在研究管道中的回滚机制我想将特定的内部版本号映像部署到开发环境中。假设如果我的詹金斯内部版本号是 14 并且我想要部署 10,那么我如何将特定的标记图像部署到开发中。在 openshift 的图像中,我可以看到从 1 到 14 的所有标记图像。现在我想将特定的标记图像部署到开发中。可能吗?

标签: jenkinsopenshiftjenkins-pipelineopenshift-originopenshift-3

解决方案


您可以做的是使用您正在部署的映像的另一个版本 (:latest) 更改 DeploymentConfig。您可以使用 EDIT 部署在 de Web 控制台中执行此操作,然后从图像流 jboss 中选择另一个 :tag。

或使用 oc patch 命令更改 DC

oc patch dc --patch='{"spec":{"template":{"spec":{"containers":[{"name": "", "image":"image-name:tag"}] }}}}'


推荐阅读