100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > OpenShift 4 Hands-on Lab (8) 基于Gogs+Nexus+Sonarqube的Jenkins CI/CD Pipeline

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

时间:2023-11-07 11:57:09

相关推荐

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

《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流程。该流程实现如下持续集成和部署操作和场景:

首先从GitGogs中获取java应用代码。然后将其编译成WAR应用包。使用JUnit进行功能测试使用SonarQube对其进行代码分析将WAR应用包推送至Nexus的Maven仓储中构建App Image部署到DEV环境人工确认是否迁生至STAGE环境最后将App Image部署至STAGE环境

配置操作过程

准备运行所需资源

新建三个项目,分别是运行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

用管理员用户执行命令,允许从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

执行命令创建应用模板,然后可直接基于模板文件创建应用,或者用以下(4)-(8)用OpenShift控制台基于应用模板创建应用。

$ oc create -f /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

成功后进入OpenShift控制台中的“开发者”视图,然后在USER-ID-cicd项目中进入“拓扑”菜单。

点击上图“开始构建应用程序”链接,然后搜索“jenkins”。在结果列表中选中下图的“Jenkins (Ephemeral)”,然后点击“实例化模板”按钮。

在“Instantiate Template”页面中接受所有缺省选项,然后Create该模板包含的Jenkins运行环境,完成后如下图。

点击上图的拓扑中点击右键,然后在“添加至项目”菜单中选择“从目录”。

在“开发者目录”页面中选“CI/CD”,然后找到“Gogs+Nexus+Sonar used by Jenkins”并进入。然后在右滑界面中点击“实例化模板”按钮。

在“Instantiate Template”页面中将DEV project nameSTAGE project name设为USER-ID-dev和USER-ID-stage,最后点击Create即可。

在部署完后(状态应该是深蓝色),可以在OpenShift Console的"开发者"视图中查看USER-ID-cicd项目部署的应用和状态。应该如下图包括5个DC(DeploymentConfig)和1个D(Deployment);另外还有一个名为cicd-demo-installer的Job,它负责按照模板安装相关资源,最后会是执行完成状态。

确认在“${USER_ID}-dev”项目中有以下资源。其中当前的“buildconfig”和“deploymentconfig”都为“0”,这是因为要部署的应用资源还不存在。

$ oc get all -n ${USER_ID}-devNAME DESIRED CURRENT READY AGEreplicationcontroller/tasks-1 0 0 0 3m8sreplicationcontroller/tasks-2 0 0 0 3m6sreplicationcontroller/tasks-3 0 0 0 3m5sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/tasks ClusterIP 10.217.4.89 <none> 8080/TCP 3m6sNAME REVISION DESIRED CURRENT TRIGGERED BYdeploymentconfig.apps.openshift.io/tasks 31 0 configNAMETYPEFROMLATESTbuildconfig.build.openshift.io/tasks Source Binary 0NAME IMAGE REPOSITORY TAGSUPDATEDimagestream.image.openshift.io/tasksdefault-route-openshift-image-registry.apps-crc.testing/cicd-demo-dev/taskslatest 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 WILDCARDroute.route.openshift.io/tasks tasks-cicd-demo-dev.2886795273-80-hazel04.tasks8080 None

确认在“${USER_ID}-stage”项目中有以下资源。其中当前的“deploymentconfig”为“0”,这是因为要部署的应用资源还不存在。

$ oc get all -n ${USER_ID}-stageNAME DESIRED CURRENT READY AGEreplicationcontroller/tasks-1 0 0 0 8m16sreplicationcontroller/tasks-2 0 0 0 8m13sreplicationcontroller/tasks-3 0 0 0 8m13sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/tasks ClusterIP 10.217.4.18 <none> 8080/TCP 8m14sNAME REVISION DESIRED CURRENT TRIGGERED BYdeploymentconfig.apps.openshift.io/tasks 31 0 configNAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARDroute.route.openshift.io/tasks tasks-cicd-demo-stage.2886795273-80-hazel04.tasks8080 None

执行命令获得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。

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

运行Jenkins Pipeline

执行下面命令启动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

参考

本文参考了/siamaksade/openshift-cd-demo的内容。

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

/RedHatGov/devsecops-workshop-dashboard/tree/develop/jenkins/workshop

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。