- 场景说明
- 运行环境
- 配置操作过程
- 准备运行所需资源
- 配置Gogs并导入应用代码
- 运行Jenkins Pipeline
场景说明
本文实现的是一个比较复杂的Jenkins的CI/CD Pipeline流程。该流程实现如下持续集成和部署场景:
- 首先从Git(Gogs)中获取java应用代码。
- 然后将其编译成WAR应用包。
- 使用JUnit进行功能测试
- 使用SonarQube对其进行代码分析
- 将WAR应用包推送至Nexus的Maven仓储中
- 构建应用Image
- 部署到DEV环境
- 人工确认是否迁生至STAGE环境
- 最后将App Image部署至STAGE环境
运行环境
本场景可以在OpenShift 3.11/4.x运行环境,并已经在minishift/CRC的运行环境中验证。不过由于运行的软件比较多,如使用minishift/CRC,建议启动时指定内存至少为10GB。
配置操作过程
准备运行所需资源
- 新建三个项目,分别是运行Jenkins的CICD项目,以及开发(Dev)和准上线环境(Stage)。
$ oc new-project my-dev$ oc new-project my-stage$ oc new-project my-cicd
- 用管理员用户执行命令,允许从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
- 执行命令创建应用模板(其实也可直接基于模板文件创建应用)
$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/Maven-Gogs-Sonar-Pipeline-Template.yaml -n openshift
- 成功后可以进入OpenShift Console中的Developer视图,然后在my-cicd项目中进入“+Add”的“From Catalog”。
- 在模板中选择CI/CD分类中点击下图的“Jenkins (Ephemeral)”,然后接受所有缺省选项,直到创建成功。
- 再次执行第4步,在模板中选择CI/CD分类中点击“Gogs+Nexus+Sonar used by Jenkins”,然后点击“Instantiate Template”,然后在“Instantiate Template”页面中将DEV和STAGE项目名设为my-dev和my-stage,最后点击Create即可。
- 在部署完后(其状态应该是深蓝色),可以在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。
- 访问http://gogs-my-cicd.apps-crc.testing,在首页面右上方点击“Sign In”链接,用gogs/gogs登录。
- 登陆后点击右上方“+”图标,然后在下拉菜单中选择“New Migration”。
- 在Clone Adress栏中填https://github.com/OpenShiftDemos/openshift-tasks,然后在Repository填openshift-task,最后点击Migration Repository。成功会看到gogs/openshift-tasks的Repository和相关应用代码。
运行Jenkins Pipeline
- 执行命令启动Jenkins的Pipeline流程。
$ oc start-build tasks-pipeline
- 可以在OpenShift Console中进入Builds->tasks-pipeline->Builds->tasks-pipeline-1查看执行进度。当出现以下步骤时, 点击"Input Required"链接跳转到Jenkins。
- 在Jinkins Console中通查看Jenkins -> my-cicd -> my-cicd/tasks-pipeline -> #1的Console Output,此时执行停在以下步骤中。然后点击Promote即可。
- 访问SonarQube的控制台,可以查看Bugs的情况。
- 访问Nexus控制台,查看下载的应用依赖文件。
- 可以访问以下部署在my-dev和my-stage中的应用。
http://tasks-my-dev.apps-crc.testing/
http://tasks-my-stage.apps-crc.testing/