OpenShift 4 - DevSecOps Workshop (10) - 向Stage环境部署应用镜像

OpenShift 4.x HOL教程汇总
说明:本文已经在OpenShift 4.8环境中验证

本节将应用镜像部署到“”STAGE区域的项目中。
在这里插入图片描述

  1. 创建“stage-tekton-tasks”任务,将应用镜像部署到STAGE区域。
$ oc apply -f - << EOF
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: stage-tekton-tasks
  namespace: ${
    
    CICD}
spec:
  params:
    - default: tasks
      description: The name of the app
      name: app_name
      type: string
    - description: The name dev project
      name: dev_project
      type: string
    - description: The name stage project
      name: stage_project
      type: string
    - description: The app revision/gitsha to send to Stage
      name: app_revision
      type: string
  steps:
  - name: cleanup-stage-project
    script: >
      #!/bin/sh
 
      set -e -o pipefail
 
      echo "Tagging image stream in \$(params.stage_project)/\$(params.app_name):\$(params.app_revision)"          
 
      oc tag 
      \$(params.dev_project)/\$(params.app_name):\$(params.app_revision)
      \$(params.stage_project)/\$(params.app_name):\$(params.app_revision)          
 
      if oc get dc/\$(params.app_name) -n \$(params.stage_project); then
 
        echo "Tasks dc exists, cleaning up resources " 
         
        oc delete -n \$(params.stage_project) dc/\$(params.app_name) svc/\$(params.app_name) route/\$(params.app_name) || echo "Some resources didn't clean up as expected"; 
 
      fi
 
    image: 'quay.io/openshift/origin-cli:latest'
 
  - name: deploy-new-version-to-stage
    script: >
      #!/bin/sh
 
      set -e -o pipefail
 
      echo "Deploying new version into \$(params.stage_project)  project "  
 
      oc new-app --image-stream=\$(params.app_name):\$(params.app_revision) -n \$(params.stage_project) 
      --as-deployment-config=true -o yaml | oc apply -n \$(params.stage_project)  -f -   
 
      if ! oc get route/\$(params.app_name) -n \$(params.stage_project) ; then
         
        echo "Route not found, creating a new one" 
 
        oc expose svc \$(params.app_name) -n \$(params.stage_project); 
 
      fi  
 
    image: 'quay.io/openshift/origin-cli:latest'
EOF
  1. (可选)在测试运行“stage-tekton-tasks”任务前可先手动删除STAGE区域的资源。
$ oc delete all -l app=tekton-tasks -n ${STAGE}
$ oc delete all -l build=tekton-tasks -n ${STAGE}
  1. 测试运行“stage-tekton-tasks”任务,确认可以运行成功。其中的“user1-stage/tekton-tasks:bde3105 set to user1-dev/tekton-tasks@sha256:dfeb236854a1326d2aba2e95e41ad678715531c3060610a35dc59013fd13c947”是指向应用镜像。注意:参数中“**bde3105 **”为前面获得的“gitsha”。
$ tkn task start stage-tekton-tasks -n ${CICD} --showlog \
	--param app_name=tekton-tasks \
	--param dev_project=${DEV} \
	--param stage_project=${STAGE} \
	--param app_revision=bde3105 
。。。
[cleanup-stage-project] Tagging image stream in  user1-stage/tekton-tasks:bde3105
[cleanup-stage-project] Tag user1-stage/tekton-tasks:bde3105 set to user1-dev/tekton-tasks@sha256:dfeb236854a1326d2aba2e95e41ad678715531c3060610a35dc59013fd13c947.
[cleanup-stage-project] Error from server (NotFound): deploymentconfigs.apps.openshift.io "tekton-tasks" not found
 
[deploy-new-version-to-stage] Deploying new version into user1-stage  project
[deploy-new-version-to-stage] deploymentconfig.apps.openshift.io/tekton-tasks created
[deploy-new-version-to-stage] service/tekton-tasks created
[deploy-new-version-to-stage] Error from server (NotFound): routes.route.openshift.io "tekton-tasks" not found
[deploy-new-version-to-stage] Route not found, creating a new one
[deploy-new-version-to-stage] route.route.openshift.io/tekton-tasks exposed
  1. 确认已经在“STAGE”项目中生成新的DeploymentConfig和Route等对象。
$ oc get all -n $STAGE
NAME                        READY   STATUS      RESTARTS   AGE
pod/tekton-tasks-1-deploy   0/1     Completed   0          2m38s
pod/tekton-tasks-1-mfrkb    1/1     Running     0          2m35s
 
NAME                                   DESIRED   CURRENT   READY   AGE
replicationcontroller/tekton-tasks-1   1         1         1       2m38s
 
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
service/tekton-tasks   ClusterIP   172.30.164.21   <none>        8080/TCP,8443/TCP,8778/TCP   2m39s
 
NAME                                              REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/tekton-tasks   1          1         1         config,image(tekton-tasks:bde3105)
 
NAME                                          IMAGE REPOSITORY                                                                                                TAGS      UPDATED
imagestream.image.openshift.io/tekton-tasks   default-route-openshift-image-registry.apps.cluster-84b8.84b8.sandbox996.opentlc.com/user1-stage/tekton-tasks   bde3105   2 minutes ago
 
NAME                                    HOST/PORT                                                                PATH   SERVICES       PORT       TERMINATION   WILDCARD
route.route.openshift.io/tekton-tasks   tekton-tasks-user1-stage.apps.cluster-84b8.84b8.sandbox996.opentlc.com          tekton-tasks   8080-tcp                 None
  1. 执行以下命令新建“tasks-stage-pipeline”管道,在其中调用了“stage-tekton-tasks”任务。
$ oc apply -f - << EOF
apiVersion: tekton.dev/v1alpha1
kind: Pipeline
metadata:
  name: tasks-stage-pipeline
  namespace: ${
    
    CICD}
spec:
  params:
    - description: App version to deploy
      name: app_version
      type: string
  tasks:
    - name: deploy-app-to-stage
      taskRef:
        kind: Task
        name: stage-tekton-tasks
      params:
        - name: app_name
          value: tekton-tasks
        - name: dev_project
          value: ${
    
    DEV}
        - name: stage_project
          value: ${
    
    STAGE}
        - name: app_revision
          value: \$(params.app_version)
EOF

或者参照下图在OpenShift控制台中新建名为“tasks-stage-pipeline”的管道,然后在“管道构建器”中创建名为“deploy-app-tasks”的任务,并配置相关参数。
在这里插入图片描述
7. 如果需要可以开通从Stage区域访问CICD区域的访问权限。

$ oc policy add-role-to-group edit system:serviceaccounts:${CICD} -n ${STAGE}
  1. 执行以下命令运行“tasks-stage-pipeline”管道。
$ tkn pipeline start tasks-stage-pipeline -n ${CICD} --showlog --param app_version=bde3105
PipelineRun started: tasks-stage-pipeline-run-x2qwp
Waiting for logs to be available...
[deploy-app-to-stage : cleanup-stage-project] Tagging image stream in  user1-stage/tekton-tasks:bde3105
[deploy-app-to-stage : cleanup-stage-project] Tag user1-stage/tekton-tasks:bde3105 set to user1-dev/tekton-tasks@sha256:8735953414726498440f475a1b31dc493fd7a5ba9290398a5d0fc099ac6923d5.
[deploy-app-to-stage : cleanup-stage-project] Error from server (NotFound): deploymentconfigs.apps.openshift.io "tekton-tasks" not found
 
[deploy-app-to-stage : deploy-new-version-to-stage] Deploying new version into user1-stage  project
[deploy-app-to-stage : deploy-new-version-to-stage] deploymentconfig.apps.openshift.io/tekton-tasks created
[deploy-app-to-stage : deploy-new-version-to-stage] service/tekton-tasks configured
[deploy-app-to-stage : deploy-new-version-to-stage] NAME           HOST/PORT                                                                 PATH   SERVICES       PORT       TERMINATION   WILDCARD
[deploy-app-to-stage : deploy-new-version-to-stage] tekton-tasks   tekton-tasks-user1-stage.apps.cluster-39c8.39c8.sandbox139.opentlc.com          tekton-tasks   8080-tcp                 None
  1. 进入OpenShift控制台的“拓扑”确认在“user1-stage”项目中应用已经部署好,并可通过“路由”地址访问应用。
    在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43902588/article/details/119765699
今日推荐