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

场景说明

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

  1. 首先从**Git(Gogs)**中获取java应用代码。
  2. 然后将其编译成WAR应用包。
  3. 使用JUnit进行功能测试
  4. 使用SonarQube对其进行代码分析
  5. 将WAR应用包推送至Nexus的Maven仓储中
  6. 构建应用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 my-dev
$ oc new-project my-stage
$ oc new-project my-cicd
  1. 用管理员用户执行命令,允许从my-cicd项目访问另外两个项目的资源。
$ oc policy add-role-to-group edit system:serviceaccounts:my-cicd -n my-dev
$ oc policy add-role-to-group edit system:serviceaccounts:my-cicd -n my-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视图,然后在my-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项目名设为my-dev和my-stage,最后点击Create即可。
    在这里插入图片描述
  4. 在部署完后(其状态应该是深蓝色),可以在OpenShift Console的Developer视图中查看my-cicd项目部署的应用和状态。应该如下图包括6个部署(其中4个应用2个数据库)。此时可通过以下地址和用户信息访问Jenkins、Gogs、Nexus和SonarQube。
    https://jenkins-my-cicd.apps-crc.testing
    http://gogs-my-cicd.apps-crc.testing (gogs/gogs)
    http://nexus-my-cicd.apps-crc.testing (admin/admin123)
    https://sonarqube-my-cicd.apps-crc.testing (admin/admin)
    在这里插入图片描述

配置Gogs并导入应用代码

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

  1. 访问gogs的route地址http://gogs-my-cicd.apps-crc.testing,在首页面右上方点击“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 -> my-cicd -> my-cicd/tasks-pipeline -> #1的Console Output,此时执行停在以下步骤中。然后点击Promote即可。
    在这里插入图片描述
  3. 访问SonarQube的控制台,可以查看Bugs的情况。
    在这里插入图片描述
    在这里插入图片描述
  4. 访问Nexus控制台,查看下载的应用依赖文件。
    在这里插入图片描述
  5. 可以访问以下部署在my-dev和my-stage中的应用。
    http://tasks-my-dev.apps-crc.testing/
    http://tasks-my-stage.apps-crc.testing/
    在这里插入图片描述

其他说明

在我们使用的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版本后再次创建模板即可。


版权声明:本文为weixin_43902588原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。