OpenShift 4 Hands-on Lab (6) 基于Gogs+Nexus+Sonarqube的Jenkins CI/CD Pipeline

OpenShift 4之实现一个基于Gogs+Nexus+Sonarqube的Jenkins CI/CD Pipeline

  • 场景说明
  • 运行环境
  • 配置操作过程
    • 准备运行所需资源
    • 配置Gogs并导入应用代码
  • 运行Jenkins Pipeline
  • 其他说明

场景说明

本文实现的是一个比较复杂的基于Jenkins的CI/CD Pipeline流程。该流程实现如下持续集成和部署操作和场景:

  1. 首先从GitGogs中获取java应用代码。
  2. 然后将其编译成WAR应用包。
  3. 使用JUnit进行功能测试
  4. 使用SonarQube对其进行代码分析
  5. 将WAR应用包推送至Nexus的Maven仓储中
  6. 构建App Image
  7. 部署到DEV环境
  8. 人工确认是否迁生至STAGE环境
  9. 最后将App Image部署至STAGE环境
    在这里插入图片描述

运行环境

本场景可以在OpenShift 3.11/4.x运行环境,并已经在minishift和OpenShift CRC的运行环境中验证。不过由于运行的软件比较多,如使用minishift/OpenShift CRC,建议启动时指定内存至少为10GB。

配置操作过程

准备运行所需资源

  1. 新建三个项目,分别是运行Jenkins的CICD项目,以及开发(Dev)和准上线环境(Stage)。
$ oc new-project USER-ID-dev
$ oc new-project USER-ID-stage
$ oc new-project USER-ID-cicd
  1. 用管理员用户执行命令,允许从USER-ID-cicd项目访问另外两个项目的资源。
$ oc policy add-role-to-group edit system:serviceaccounts:USER-ID-cicd -n USER-ID-dev
$ oc policy add-role-to-group edit system:serviceaccounts:USER-ID-cicd -n USER-ID-stage
  1. 执行命令创建应用模板(其实也可直接基于模板文件创建应用)
$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/Maven-Gogs-Sonar-Pipeline-Template.yaml -n openshift
  1. 成功后可以进入OpenShift Console中的Developer视图,然后在USER-ID-cicd项目中进入“+Add”的“From Catalog”。
    在这里插入图片描述
  2. 在模板中选择CI/CD分类中点击下图的“Jenkins (Ephemeral)”,然后接受所有缺省选项,直到创建成功。
    在这里插入图片描述
  3. 再次执行第4步,在模板中选择CI/CD分类中点击“Gogs+Nexus+Sonar used by Jenkins”,然后点击“Instantiate Template”,然后在“Instantiate Template”页面中将DEV和STAGE项目名设为USER-ID-dev和USER-ID-stage,最后点击Create即可。
    在这里插入图片描述
  4. 在部署完后(其状态应该是深蓝色),可以在OpenShift Console的Developer视图中查看USER-ID-cicd项目部署的应用和状态。应该如下图包括6个部署(其中4个应用2个数据库)。
    在这里插入图片描述
  5. 执行命令获得Jenkins、Gogs、Nexus和SonarQube的控制台访问地址,并设置到环境变量中。
$ GOGS=http://$(oc get route gogs -n USER-ID-cicd -o template --template '{{.spec.host}}')
$ JENKINS=https://$(oc get route jenkins -n USER-ID-cicd -o template --template '{{.spec.host}}')
$ NEXUS=http://$(oc get route nexus -n USER-ID-cicd -o template --template '{{.spec.host}}')
$ SONARQUBE=https://$(oc get route sonarqube -n USER-ID-cicd -o template --template '{{.spec.host}}')

访问用户名和密码为:

  • gogs: gogs/gogs
  • nexus: admin/admin123
  • sonarqube:admin/admin

配置Gogs并导入应用代码

为了能让Jenkins从Gogs获取应用代码,我们先需要将应用代码导入到Gogs。

  1. 访问gogs控制台,在首页面右上方点击“Sign In”链接,用gogs/gogs登录。
  2. 登陆后点击右上方“+”图标,然后在下拉菜单中选择“New Migration”。
    在这里插入图片描述
  3. 在Clone Adress栏中填https://github.com/OpenShiftDemos/openshift-tasks,然后在Repository填openshift-task,最后点击Migration Repository。成功会看到gogs/openshift-tasks的Repository和相关应用代码。

运行Jenkins Pipeline

  1. 执行命令启动Jenkins的Pipeline流程。
$ oc start-build tasks-pipeline
  1. 可以在OpenShift Console中进入Builds->tasks-pipeline->Builds->tasks-pipeline-1查看执行进度。当出现以下步骤时, 点击"Input Required"链接跳转到Jenkins。
    在这里插入图片描述
  2. 在Jinkins Console中通查看Jenkins -> USER-ID-cicd -> USER-ID-cicd/tasks-pipeline -> #1的Console Output,此时执行停在以下步骤中。然后点击Promote即可。
    在这里插入图片描述
  3. 用admin/admin登录并访问SonarQube的控制台,可以查看Bugs的情况。
    在这里插入图片描述
    在这里插入图片描述
  4. 访问Nexus控制台,用admin/admin123登录,然后查看下载的应用依赖文件。
    在这里插入图片描述
  5. 获取部署在USER-ID-dev和USER-ID-stage项目中的应用route,然后用浏览器访问。
$ oc get route -n USER-ID-dev -o template --template '{{.spec.host}}')
$ oc get route -n USER-ID-stage -o template --template '{{.spec.host}}')

在这里插入图片描述

其他说明

在我们使用的https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/Maven-Gogs-Sonar-Pipeline-Template.yaml模板文件中引用了gogs-template.yaml、sonarqube-template.yml等另外几个模板,在这些模板中指定了用到的Image的名称和版本。如果这些Image更新后无法访问旧版本了,需要手工修改这些Template的YAML文件,更新它们使用的Image版本后再次创建模板即可。

你可能感兴趣的:(OpenShift,4,微服务,Jenkins)