CI/CD Pipeline之Jenkins部署
一、Jenkins是什么?
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。我们可以用Jenkins来构建和部署我们的项目,比如说从我们的代码仓库获取代码,然后将我们的代码打包成可执行的文件,之后通过远程的ssh工具执行脚本来运行我们的项目。
二、CI/CD是什么?
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。
三、部署Jenkins
3.1 Yum安装
(1)环境准备
[root@10-27-0-224 ~]# yum install java -y [root@10-27-0-224 ~]# java -version openjdk version "1.8.0_292" OpenJDK Runtime Environment (build 1.8.0_292-b10) OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode) [root@10-27-0-224 ~]# yum install -y git [root@10-27-0-224 ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo [root@10-27-0-224 ~]# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
官网地址:https://pkg.jenkins.io/redhat-stable/
(2)安装jenkins
# 安装与更新 [root@10-27-0-224 ~]# yum install java -y [root@10-27-0-224 ~]# yum update jenkins -y
# 配置文件 [root@10-27-0-224 ~]# vim /etc/sysconfig/jenkins JENKINS_LISTEN_ADDRESS="0.0.0.0" [root@10-27-0-224 ~]# systemctl restart jenkins [root@10-27-0-224 ~]# chkconfig jenkins on
(3)WEB登录配置Jenkins
[root@10-27-0-224 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword 5d9f1a5b57f140d49949f8b74a0bd622
【注】默认访问端口为8080。
3.2 容器化部署
(1)下载Jenkins的Docker镜像
[root@10-27-0-224 ~]# docker search jenkins NAME DESCRIPTION STARS OFFICIAL AUTOMATED jenkins DEPRECATED; use "jenkins/jenkins:lts" instead 5308 [OK] [root@10-27-0-224 ~]# docker pull jenkins/jenkins:lts
(2)在Docker容器中运行Jenkins
[root@10-27-0-224 ~]# docker run -p 8080:8080 -p 50000:5000 --restart=always --name jenkins \ -u root \ -v /data/jenkins_home:/var/jenkins_home \ -d jenkins/jenkins:lts
四、配置Jenkins
4.1 初始配置
(1)运行成功后访问该地址登录Jenkins,第一次登录需要输入管理员密码
(2)使用管理员密码进行登录,可以使用以下命令从容器启动日志中获取管理密码
[root@10-27-0-224 ~]# docker logs jenkins ************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: 4489e1e232f540aa8ab4edd86e1197a0 This may also be found at: /var/jenkins_home/secrets/initialAdminPassword *************************************************************
(3)选择安装插件方式,这里我们直接安装推荐的插件
(4)安装完成后,创建管理员账号
(5)进行实例配置,配置Jenkins的URL
4.2 Jenkins Dashboard配置
(1)点击Manage Jenkins/Manage Plugins,进行一些自定义的插件安装
根据角色管理权限的插件:Role-based Authorization Strategy
远程使用ssh的插件:SSH plugin
【注】安装完插件后,选择重启Jenkins,重新登录后,英文部分名称,会变成中文。
(2)通过系统管理->全局工具配置来进行全局工具的配置,比如新增maven的安装配置
(3)在系统管理->系统配置中添加全局ssh的配置,这样Jenkins使用ssh就可以执行远程的linux脚本了
4.3 角色权限管理
我们可以使用Jenkins的角色管理插件来管理Jenkins的用户,比如我们可以给管理员赋予所有权限,运维人员赋予执行任务的相关权限,其他人员只赋予查看权限。
(1)在系统管理->全局安全配置中启用基于角色的权限管理(需提前安装:Role-based Authorization Strategy插件)
(2)进入系统管理->Manage and Assign Roles界面
(3)添加角色与权限的关系
(4)给用户分配角色
五、打包部署SpringBoot应用
这里我们使用mall-learning
项目中的mall-tiny-jenkins
模块代码来演示下如何使Jenkins一键打包部署SpringBoot应用。
5.1 将开源代码fork到自己的GitHub仓库
(1)mall-tiny-jenkins
项目源码地址:https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-jenkins
(2)fork到GitHub仓库后地址:https://github.com/UStarGao/mall-learning/tree/master/mall-tiny-jenkins
(3)修改GitHub项目中 pom.xml的dockerHost地址改成自己的Docker镜像仓库地址
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.1.0</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <imageName>mall-tiny/${project.artifactId}:${project.version}</imageName> <dockerHost>http://10.27.0.224:5000</dockerHost> <baseImage>java:8</baseImage> <entryPoint>["java", "-jar","/${project.build.finalName}.jar"] </entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build>
(4)创建新仓库mall-tiny-jenkins,将mall-learning
项目中的mall-tiny-jenkins
模块代码推送到新仓库中
[root@ansible ~]# git clone https://github.com/UStarGao/mall-learning.git [root@ansible ~]# git clone https://github.com/UStarGao/mall-tiny-jenkins.git [root@ansible ~]# cd mall-tiny-jenkins/ [root@ansible mall-tiny-jenkins]# cp -r ../mall-learning/mall-tiny-jenkins/* . [root@ansible mall-tiny-jenkins]# git status On branch master Your branch is up to date with 'origin/master'. Untracked files: (use "git add <file>..." to include in what will be committed) pom.xml src/ nothing added to commit but untracked files present (use "git add" to track) [root@ansible mall-tiny-jenkins]# git add pom.xml src/ [root@ansible mall-tiny-jenkins]# git commit -m"add mall-tiny-jenkins code" [master 3b449f2] add mall-tiny-jenkins code 26 files changed, 2200 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/com/macro/mall/tiny/MallTinyApplication.java create mode 100644 src/main/java/com/macro/mall/tiny/common/api/CommonPage.java create mode 100644 src/main/java/com/macro/mall/tiny/common/api/CommonResult.java create mode 100644 src/main/java/com/macro/mall/tiny/common/api/IErrorCode.java create mode 100644 src/main/java/com/macro/mall/tiny/common/api/ResultCode.java create mode 100644 src/main/java/com/macro/mall/tiny/config/MyBatisConfig.java create mode 100644 src/main/java/com/macro/mall/tiny/config/Swagger2Config.java create mode 100644 src/main/java/com/macro/mall/tiny/controller/PmsBrandController.java create mode 100644 src/main/java/com/macro/mall/tiny/mbg/CommentGenerator.java create mode 100644 src/main/java/com/macro/mall/tiny/mbg/Generator.java create mode 100644 src/main/java/com/macro/mall/tiny/mbg/mapper/PmsBrandMapper.java create mode 100644 src/main/java/com/macro/mall/tiny/mbg/model/PmsBrand.java create mode 100644 src/main/java/com/macro/mall/tiny/mbg/model/PmsBrandExample.java create mode 100644 src/main/java/com/macro/mall/tiny/service/PmsBrandService.java create mode 100644 src/main/java/com/macro/mall/tiny/service/impl/PmsBrandServiceImpl.java create mode 100644 src/main/resources/application-dev.yml create mode 100644 src/main/resources/application-prod.yml create mode 100644 src/main/resources/application-qa.yml create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/com/macro/mall/tiny/mbg/mapper/PmsBrandMapper.xml create mode 100644 src/main/resources/generator.properties create mode 100644 src/main/resources/generatorConfig.xml create mode 100644 src/main/resources/mall-tiny-jenkins.sh create mode 100644 src/test/java/com/macro/mall/tiny/MallTiny01ApplicationTests.java create mode 100644 src/test/java/com/macro/mall/tiny/MallTinyApplicationTests.java [root@ansible mall-tiny-jenkins]# git push Username for 'https://github.com': UStarGao Password for 'https://UStarGao@github.com': Enumerating objects: 57, done. Counting objects: 100% (57/57), done. Delta compression using up to 2 threads Compressing objects: 100% (39/39), done. Writing objects: 100% (56/56), 16.62 KiB | 1.38 MiB/s, done. Total 56 (delta 3), reused 0 (delta 0) remote: Resolving deltas: 100% (3/3), done. To https://github.com/UStarGao/mall-tiny-jenkins.git 4ba2725..ed44420 master -> master
5.2 执行脚本准备
(1)将mall-tiny-jenkins.sh
脚本文件上传到/data/sh
目录下,脚本内容如下
[root@10-27-0-224 ~]# mkdir /data/sh [root@10-27-0-224 ~]# vim /data/sh/mall-tiny-jenkins.sh #!/usr/bin/env bash app_name='mall-tiny-jenkins' docker stop ${app_name} echo'----stop container----' docker rm ${app_name} echo'----rm container----' docker run -p 8088:8088 --name ${app_name} \ --link mysql:db \ -v /etc/localtime:/etc/localtime \ -v /mydata/app/${app_name}/logs:/var/logs \ -d mall-tiny/${app_name}:1.0-SNAPSHOT echo'----start container----'
(2)给.sh脚本添加可执行权限
[root@10-27-0-224 ~]# chmod +x /data/sh/mall-tiny-jenkins.sh
六、在Jenkins中创建执行任务
6.1 Jenkins创建新任务
(1)设置任务名称后选择构建一个自由风格的软件项目
(2)在源码管理中添加我们的git仓库地址
6.2 构建镜像
(1)添加一个构建,选择调用顶层maven目标,该构建主要用于把我们的源码打包成Docker镜像并上传到我们的Docker镜像仓库去
选择我们的maven版本,然后设置maven命令和指定pom文件位置
(2)添加一个执行远程shell脚本的构建,用于在我们的镜像打包完成后执行启动Docker容器的.sh脚本(提前安装:SSH构建包装)
(3)在任务列表中点击运行来执行该任务
(4)可以通过控制台输出来查看整个任务的执行过程
(5)运行成功后,访问该地址即可查看API文档:http://10.27.0.224:8088/swagger-ui.html
作者:UStarGao
链接:https://www.starcto.com/devops/199.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2021-09-16开源SQL审计检查分析平台
- 2021-02-27K8S中RC模块和Deployment模块区别
- 2021-02-14MongoDB集合(collection)与其物理文件对照关系查询
- 2021-10-28PostgreSQL日志轮滚配置教程
- 2021-06-23 Linux性能异常经典案例分析之包量吞吐