赞
踩
目录
1.2在Jenkins页面安装连接SonarScanner的插件
1.3在Jenkins页面的系统配置中添加SonarQube,用于连接到SonarQube服务器
四.实现自由风格的CI操作(包括Jenkins集成其他服务)
2.Jenkins集成GitLab并从GitLab拉取工程代码
2.2在Jenkins页面集成GitLab(私有仓库需要用户名和密码)
2.3构建项目成功后,可以看见Jenkins服务器的数据卷目录下存在该项目
3.将从GitLab拉取的代码构建为jar包(Jenkins调用本地的maven)
3.1在Jenkins页面的项目添加构建步骤---调用顶层Maven目标
4.1在Jenkins页面的项目添加构建步骤---Execute SonarQube Scanner
4.2再次构建项目(没展示),可以看见SonarQube的页面新增了一个项目(第二个项目,第一个项目为后续流水线创建的)
5.在Jenkins服务器把项目构建为镜像并推送到Harbor
5.2在Jenkins服务器修改/etc/docker/daemon.json(用于连接Harbor服务器),还需重启docker服务
5.3在Jenkins页面的项目添加构建步骤---执行shell($htag为后续步骤使用)
5.4再次构建项目(没展示),可以看见Jenkins服务器中有了镜像,Harbor也有了上传过来的镜像
6.1在Target服务器修改/etc/docker/daemon.json---跟Jenkins服务器是一样的
6.2在Target服务器PATH路径下,具体为/usr/local/bin目录下创建脚本文件deploy.sh,赋予可执行权限:chmod +x deploy.sh(这样文件就可以在任意目录下运行)
6.3在Jenkins页面添加端口号参数和构建步骤---Send build artifacts over SSH(Jenkins使目标服务器运行脚本,传递位置参数,其中$htag为后续步骤使用)
6.4再次构建项目(没展示),可以看见Target服务器已成功拉取镜像和启动容器(带版本号的为后续操作结果)
1.在IDEA修改代码并推送到GitLab,GitLab给修改后的代码添加标签
2.再次修改代码并推送到GitLab,GitLab再次添加标签
3.在Jenkins页面添加Git参数与构建步骤---执行shell(此步骤要执行在最前面)
4.再次构建项目时,可以看到新增了htag参数(export_port参数是之前的步骤添加的),并且可以选择构建哪个版本
Target服务器也有了不同版本的镜像跟用2.0版本镜像启动的容器
3.工程代码中新增Jenkinsfile文件并推送到GitLab
5.重新构建后会发现,新增了一个新的阶段 Checkout SCM,即从 SCM 中检出脚本。
6.流水线管理项目,通过流水线语法将项目步骤生成流水线脚本并写入Jenkinsfile文件,代码内容如下
五台CentOS7虚拟机(Jenkins、GitLab、SonarQube、Harbor、Target),都需要安装docker和docker compose。
服务器的IP地址分别为:
GitLab:192.168.249.191
SonarQube:192.168.249.192
Harbor:192.168.249.193
Jenkins:192.168.249.194
Target:192.168.249.195
注意:GitLab服务器的内存至少为4G
系统架构图:
分别在五台CentOS虚拟机上,拉取镜像并启动容器,在容器里运行GitLab、SonarQube、Harbor、Target和Jenkins服务,并配置好相关文件。
GitLab、SonarQube、Harbor和Jenkins四台服务器的安装配置如下:
GitLab:Docker:GItLab的安装配置_不吃辣9的博客-CSDN博客
SonarQube:Docker:SonarQube的安装配置_不吃辣9的博客-CSDN博客
Harbor:Docker:Harbor的安装配置_不吃辣9的博客-CSDN博客
Jenkins:Docker:Jenkins的安装配置_不吃辣9的博客-CSDN博客
Target目标服务器:
从SonarQube官网上下载Linux版本SonarScanner,命令:
修改/var/jenkins_home/sonar-scanner/conf/sonar-scanner.properties配置文件如下:
这里是已安装的插件,安装插件在Available plugins
在全局工具配置中进行配置:
在系统配置中新增SSH Servers并添加
这里我使用的是IDEA,需要在IDEA创建一个Git本地仓库(由于我主要学习的是python,所以IDEA我不是特别会用,每个人学习的语言也可能会有差异,因此这里不讲Git的配置)
注意:第一次提交代码时,需要填写远程仓库的URL,clone下的http地址
配置了sonarqube服务器的用户名、密码和需要检测的项目名
shell命令的内容主要为,让Jenkins服务器制作镜像后连接到Harbor并上传镜像
文件内容如下:
CD操作很直观的让我感受到了对项目版本的控制,通过Jenkins可以非常方便的进行项目的交付与部署。
Jenkins流水线任务具有可编排性、可视化、可追踪性、可重复性、自动化、并行执行、弹性和灵活性等优点,能够帮助开发团队实现高效的持续集成和交付流程,并提升软件开发和交付的质量和效率,生产环境下一般用流水线任务而不是自由风格。但是对于自由风格的学习让我对整个CICD的流程有了十分清晰的了解。
选择SCM方式,SCM选择Git,仓库地址从GitLab复制过来,跟之前一样,脚本路径为Jenkinsfile
- pipeline {
- agent any
-
- environment {
- harbor_user='admin'
- harbor_password='scy030325'
- harbor_host='192.168.249.193'
- harbor_repo='jks'
- }
- stages {
- stage('从gitlab拉取代码') {
- steps {
- checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '3cf5ee72-196f-4e9b-a16f-f3addffff636', url: 'http://192.168.249.191:9999/root/hello_myjenkins.git']])
- }
- }
- stage('将项目构建为jar包包') {
- steps {
- sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
- }
- }
- stage('代码质量检测') {
- steps {
- sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.login=admin -Dsonar.password=scy030325 -Dsonar.projectKey=${JOB_NAME}'
- }
- }
- stage('构建并推送镜像到harbor') {
- steps {
- sh '''mv ./target/*.jar ./docker/
- docker build -t ${JOB_NAME}:${ptag} ./docker
- docker login -u ${harbor_user} -p ${harbor_password} ${harbor_host}
- docker tag ${JOB_NAME}:${ptag} ${harbor_host}/${harbor_repo}/${JOB_NAME}:${ptag}
- docker image prune -f
- docker push ${harbor_host}/${harbor_repo}/${JOB_NAME}:${ptag}'''
- }
- }
- stage('通知目标服务器执行脚本') {
- steps {
- sshPublisher(publishers: [sshPublisherDesc(configName: 'my_target-server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harbor_host $harbor_repo $JOB_NAME $ptag 8080 $export_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
- }
- }
- }
- }
注意:流水线也可以添加Git参数和端口号参数
可以看到的是,流水线任务可视化,条理清晰地将项目步骤展示出来,如果项目构建失败,可以很直观的看到是哪一步出错了,也可以方便地看见项目每一个步骤的日志。
目标服务器中跟Harbor服务器中,都有了流水线任务制作的镜像,目标服务器的容器也成功启动
访问目标服务器的页面也成功
结果其实跟自由风格的项目一样,但是流水线任务的优势非常明显,也因此,流水线任务在生产环境下的应用更多。
我对docker容器在生产环境下的应用有了新的认识,加强了我对CI/CD流程和相关服务的了解,对后续学习新的云原生技术有了更浓厚的兴趣。
增强了我的排错能力与网络故障的分析能力,学会了如何从多方面考虑问题所在之处
让我对不同生产环境下,项目功能的不同需求有了更多地了解
注意:最后的钉钉提醒功能并未实现,是因为最近钉钉限制了添加自定义机器人的功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。