《OpenShift 4.x HOL教程汇总》
说明:本文已经在 OpenShift 4.8 环境中验证(OpenShift 4.9 环境的 Jenkins 版本较新,编译 Java 报错)

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环境

配置操作过程

准备运行所需资源

  1. 新建三个项目,分别是运行Jenkins的CICD项目,以及开发(Dev)和准上线环境(Stage)。
$ USER_ID=YOUR-USER-ID
$ oc new-project ${USER_ID}-cicd
$ oc new-project ${USER_ID}-dev
$ oc new-project ${USER_ID}-stage
  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. 执行命令创建应用模板,然后可直接基于模板文件创建应用,或者用以下(4)-(8)用OpenShift控制台基于应用模板创建应用。
$ oc create -f https://raw.githubusercontent.com/liuxiaoyu-git/OpenShift-HOL/master/Maven-Gogs-Sonar-Pipeline-Template.yaml -n openshift
$ oc new-app --template=jenkins-ephemeral -n ${USER_ID}-cicd
$ oc new-app --template=cicd -n ${USER_ID}-cicd -p DEV_PROJECT=${USER_ID}-dev -p STAGE_PROJECT=${USER_ID}-stage
  1. 成功后进入OpenShift控制台中的“开发者”视图,然后在USER-ID-cicd项目中进入“拓扑”菜单。
  2. 点击上图“开始构建应用程序”链接,然后搜索“jenkins”。在结果列表中选中下图的“Jenkins (Ephemeral)”,然后点击“实例化模板”按钮。
  3. 在“Instantiate Template”页面中接受所有缺省选项,然后Create该模板包含的Jenkins运行环境,完成后如下图。
  4. 点击上图的拓扑中点击右键,然后在“添加至项目”菜单中选择“从目录”。
  5. 在“开发者目录”页面中选“CI/CD”,然后找到“Gogs+Nexus+Sonar used by Jenkins”并进入。然后在右滑界面中点击“实例化模板”按钮。
  6. 在“Instantiate Template”页面中将DEV project nameSTAGE project name设为USER-ID-dev和USER-ID-stage,最后点击Create即可。
  7. 在部署完后(状态应该是深蓝色),可以在OpenShift Console的"开发者"视图中查看USER-ID-cicd项目部署的应用和状态。应该如下图包括5个DC(DeploymentConfig)和1个D(Deployment);另外还有一个名为cicd-demo-installer的Job,它负责按照模板安装相关资源,最后会是执行完成状态。
  8. 确认在“${USER_ID}-dev”项目中有以下资源。其中当前的“buildconfig”和“deploymentconfig”都为“0”,这是因为要部署的应用资源还不存在。
$ oc get all -n ${USER_ID}-dev
NAME                            DESIRED   CURRENT   READY   AGE
replicationcontroller/tasks-1   0         0         0       3m8s
replicationcontroller/tasks-2   0         0         0       3m6s
replicationcontroller/tasks-3   0         0         0       3m5sNAME            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/tasks   ClusterIP   10.217.4.89   <none>        8080/TCP   3m6sNAME                                       REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/tasks   3          1         0         configNAME                                   TYPE     FROM     LATEST
buildconfig.build.openshift.io/tasks   Source   Binary   0NAME                                     IMAGE REPOSITORY                                                                TAGS     UPDATED
imagestream.image.openshift.io/tasks     default-route-openshift-image-registry.apps-crc.testing/cicd-demo-dev/tasks     latest
imagestream.image.openshift.io/wildfly   default-route-openshift-image-registry.apps-crc.testing/cicd-demo-dev/wildfly   latest   3 minutes agoNAME                             HOST/PORT                                                             PATH   SERVICES   PORT   TERMINATION   WILDCARD
route.route.openshift.io/tasks   tasks-cicd-demo-dev.2886795273-80-hazel04.environments.katacoda.com          tasks      8080                 None
  1. 确认在“${USER_ID}-stage”项目中有以下资源。其中当前的“deploymentconfig”为“0”,这是因为要部署的应用资源还不存在。
$ oc get all -n ${USER_ID}-stage
NAME                            DESIRED   CURRENT   READY   AGE
replicationcontroller/tasks-1   0         0         0       8m16s
replicationcontroller/tasks-2   0         0         0       8m13s
replicationcontroller/tasks-3   0         0         0       8m13sNAME            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/tasks   ClusterIP   10.217.4.18   <none>        8080/TCP   8m14sNAME                                       REVISION   DESIRED   CURRENT   TRIGGERED BY
deploymentconfig.apps.openshift.io/tasks   3          1         0         configNAME                             HOST/PORT                                                               PATH   SERVICES   PORT   TERMINATION   WILDCARD
route.route.openshift.io/tasks   tasks-cicd-demo-stage.2886795273-80-hazel04.environments.katacoda.com          tasks      8080                 None
  1. 执行命令获得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}}')

访问用户名和密码为:
14. gogs: gogs/gogs
15. nexus: admin/admin123
16. sonarqube:admin/admin

配置Gogs并导入应用代码

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

  1. 访问gogs控制台,在首页面右上方点击“登录”链接,用gogs/gogs登录。
  2. 登陆后点击页面右上方“+”图标,然后在下拉菜单中选择“迁移外部仓储”。
  3. 在“克隆地址”栏中填https://github.com/liuxiaoyu-git/openshift-tasks,然后在“仓库名称”填openshift-tasks,最后点击“迁移仓储”。成功会看到gogs/openshift-tasks的Repository和相关应用代码。

运行Jenkins Pipeline

  1. 执行下面命令启动Jenkins的Pipeline流程,或在控制台中通过进入“构建”菜单并进入“tasks-pipeline”,然后用“操作”中的“开始构建”来启动Pipeline流程。
$ oc start-build tasks-pipeline -n ${USER_ID}-cicd


2. 在OpenShift 控制台的“开发者”视图中进入“构建->tasks-pipeline->构建->tasks-pipeline-1”查看pipeline的执行进度。当出现以下步骤时, 点击"Input Required"链接跳转到Jenkins。

3. 在Jinkins Console中通查看Jenkins -> USER-ID-cicd -> USER-ID-cicd/tasks-pipeline -> #1的Console Output,此时执行停在以下步骤中。然后点击Promote即可。

4. 用admin/admin登录并访问SonarQube的控制台,可以查看Bugs的情况。


5. 访问Nexus控制台,用admin/admin123登录,然后查看下载的应用依赖文件。

7. 获取部署在USER-ID-dev和USER-ID-stage项目中的应用route,然后用浏览器访问。

$ oc get route tasks -o template --template '{{.spec.host}}' -n ${USER_ID}-dev
$ oc get route tasks -o template --template '{{.spec.host}}' -n ${USER_ID}-stage

参考

本文参考了https://github.com/siamaksade/openshift-cd-demo的内容。
在我们使用的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版本后再次创建模板即可。

https://github.com/RedHatGov/devsecops-workshop-dashboard/tree/develop/jenkins/workshop

OpenShift 4 Hands-on Lab (8) 基于Gogs+Nexus+Sonarqube的Jenkins CI/CD Pipeline相关推荐

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

    OpenShift 4之实现一个基于Gogs+Nexus+Sonarqube的Jenkins CI/CD Pipeline 场景说明 运行环境 配置操作过程 准备运行所需资源 配置Gogs并导入应用代 ...

  2. 基于K8S构建企业级Jenkins CI/CD平台实战(三) 之 带你实战Spring boot/Cloud 项目 CI/CD jenkins自动化构建、部署过程

    需要环境 Git(GitLab) Harbor 私服 kubernetes-plugin 使用 Kubernetes jenkins 通过前面三篇我们已经了解了jenkins和 kubernetes- ...

  3. 基于springboot的多环境应用CI/CD应用实践

    基于springboot的多环境应用CI/CD应用实践 持续集成/部署应用实践 1.jenkins配置 2.Gitlab配置 3.代码的自动编译打包 4.docker容器编排 5.jenkins执行d ...

  4. 基于OpenStack+Docker设计与实现CI/CD

    本文所述内容的背景是,基于Docker容器技术的OpenStack研发.测试.运维及其相关的CI/CD.DevOps等活动.思想是相通的,读者可以取其可用部分用于自己的业务需求中. IaaS云和容器云 ...

  5. OpenShift 4 - 在 CI/CD Pipeline 中创建 KubeVirt 容器虚拟机 - 方法1+2 (视频)

    <OpenShift / RHEL / DevSecOps 汇总目录> 说明:本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证 文章目录 准备环境 安装可实 ...

  6. 基于K8S构建企业级Jenkins CI/CD平台实战(二) 之 kubernetes-plugin 插件使用

    1. 传统架构与K8S 架构的区别 (1). 传统Master/Slave架构,Master收到Job后,将请求转发到Slave节点处理.Slave节点数固定,Slave节点未能自动申缩容. (2). ...

  7. 中国.NET开发者峰会特别活动-基于k8s的微服务和CI/CD动手实践报名

    2019.11.9 的中国.NET开发者峰会将在上海举办,到目前为止,大会的主题基本确定,这两天就会和大家会面,很多社区的同学基于对社区的信任在我们议题没有确定的情况下已经购票超过了300张,而且分享 ...

  8. 基于K8S构建企业级Jenkins CI/CD平台实战(一) 之 环境搭建

    一. 持续集成/部署/交付概述 持续集成(Continuous Integration,CI): 代码合并.构建.部署.测试都在一起,不断地执行这个过程,并对结果反馈. 持续部署(Continuous ...

  9. 基于docker-compose的Gitlab CI/CD实践排坑指南

    长话短说 经过长时间实操验证,终于完成基于Gitlab的CI/CD实践,本次实践的坑位很多, 实操过程尽量接近最佳实践(不做hack, 不做骚操作),记录下来加深理解. 看过博客园<docker ...

最新文章

  1. 雷柏鼠标怎么配对接收器_四款蓝牙鼠标的详细使用体验对比
  2. 微信小程序 - 时间戳转时间
  3. Flask出现Error code 400, message Bad request syntax异常
  4. signature=35e01da53254eb12b5fc3c020f572e6a,Signature Analyzer Use NXP MCU
  5. 安装php7的mysql扩展,php7安装mysql扩展的方法是什么
  6. 信息论常见概念:熵、互信息、KL散度和信息增益
  7. Cinchoo ETL-对大型CSV文件进行排序
  8. [Ext JS]treelist实现tooltip
  9. 《redis-php中文参考手册》-php版
  10. Web***系列教程之跨站脚本***和防范技巧详解
  11. python异常和错误的区别_python中错误和异常有什么区别
  12. cocostudio中的一些控件的使用
  13. access无法与wincc链接_step7与s7-300 PLC连接,但是wincc与PLC连接不上怎么办?
  14. 多目标优化系列1---NSGA2的非支配排序函数的讲解
  15. google code 代码托管 用git创建仓库
  16. c语言加权成绩,[求助]写了一个计算加权平均分的程序,总是报错。大神啊~
  17. 计算机专业考研410分,从一个中专生到考研410分的历程
  18. 联想微型计算机设置从u盘启动,联想bios设置u盘启动教程
  19. WIN7访问局域网内另外一台电脑的共享文件夹
  20. cube的意思中文翻译_cube是什么意思_cube的翻译_音标_读音_用法_例句_爱词霸在线词典...

热门文章

  1. 阿里云 redis mysql_Redis 和 MySQL数据一致
  2. android 坐标布局变形,Android:scrollBy实现view随意移动并显示坐标
  3. python编辑七段数码管引脚图_初识原理图
  4. layer 同步调用_YYText源码解读-YYText同步/异步渲染流程(一)—UIView与CALayer
  5. 海报设计素材|中国风的插画设计,国画浓抹中国色彩
  6. UI模板素材|教你App中的页面指示器要如何设计
  7. oracle几何体数据类型,Oracle数据库之spatial操作geometry方法
  8. ad中电容用什么封装_【AD封装】VH3.96mm插件座子(带3D)
  9. 用户登录界面(Bootstrap)入门教程01(适合初学者)
  10. 部署项目到Linux服务器步骤