栏目头部广告

CI/CD Pipeline之Jenkins部署

一、Jenkins是什么?

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins是开源CI&CD软件领导者,提供超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。我们可以用Jenkins来构建和部署我们的项目,比如说从我们的代码仓库获取代码,然后将我们的代码打包成可执行的文件,之后通过远程的ssh工具执行脚本来运行我们的项目。

二、CI/CD是什么?

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。

CI.png

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。

CD.png

三、部署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,第一次登录需要输入管理员密码

http://10.27.0.224:8080/

CI/CD Pipeline之Jenkins部署(图3)

(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)选择安装插件方式,这里我们直接安装推荐的插件

CI/CD Pipeline之Jenkins部署(图4)

CI/CD Pipeline之Jenkins部署(图5)

(4)安装完成后,创建管理员账号

CI/CD Pipeline之Jenkins部署(图6)

(5)进行实例配置,配置Jenkins的URL

CI/CD Pipeline之Jenkins部署(图7)

CI/CD Pipeline之Jenkins部署(图8)

4.2 Jenkins Dashboard配置

(1)点击Manage Jenkins/Manage Plugins,进行一些自定义的插件安装

CI/CD Pipeline之Jenkins部署(图9)

根据角色管理权限的插件:Role-based Authorization Strategy

远程使用ssh的插件:SSH plugin

CI/CD Pipeline之Jenkins部署(图10)

【注】安装完插件后,选择重启Jenkins,重新登录后,英文部分名称,会变成中文。

(2)通过系统管理->全局工具配置来进行全局工具的配置,比如新增maven的安装配置

CI/CD Pipeline之Jenkins部署(图11)

CI/CD Pipeline之Jenkins部署(图12)

(3)在系统管理->系统配置中添加全局ssh的配置,这样Jenkins使用ssh就可以执行远程的linux脚本了

CI/CD Pipeline之Jenkins部署(图13)

CI/CD Pipeline之Jenkins部署(图14)

4.3 角色权限管理

我们可以使用Jenkins的角色管理插件来管理Jenkins的用户,比如我们可以给管理员赋予所有权限,运维人员赋予执行任务的相关权限,其他人员只赋予查看权限。

(1)在系统管理->全局安全配置中启用基于角色的权限管理(需提前安装:Role-based Authorization Strategy插件)

CI/CD Pipeline之Jenkins部署(图15)

CI/CD Pipeline之Jenkins部署(图16)

(2)进入系统管理->Manage and Assign Roles界面

CI/CD Pipeline之Jenkins部署(图17)

CI/CD Pipeline之Jenkins部署(图18)

(3)添加角色与权限的关系

CI/CD Pipeline之Jenkins部署(图19)

(4)给用户分配角色

CI/CD Pipeline之Jenkins部署(图20)

五、打包部署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

CI/CD Pipeline之Jenkins部署(图21)

(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模块代码推送到新仓库中

CI/CD Pipeline之Jenkins部署(图22)

[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创建新任务

CI/CD Pipeline之Jenkins部署(图22)

(1)设置任务名称后选择构建一个自由风格的软件项目

CI/CD Pipeline之Jenkins部署(图23)

(2)在源码管理中添加我们的git仓库地址

CI/CD Pipeline之Jenkins部署(图25)

CI/CD Pipeline之Jenkins部署(图26)

CI/CD Pipeline之Jenkins部署(图27)

CI/CD Pipeline之Jenkins部署(图28)

6.2 构建镜像

(1)添加一个构建,选择调用顶层maven目标,该构建主要用于把我们的源码打包成Docker镜像并上传到我们的Docker镜像仓库去

CI/CD Pipeline之Jenkins部署(图28)

选择我们的maven版本,然后设置maven命令和指定pom文件位置

CI/CD Pipeline之Jenkins部署(图29)

(2)添加一个执行远程shell脚本的构建,用于在我们的镜像打包完成后执行启动Docker容器的.sh脚本(提前安装:SSH构建包装)

CI/CD Pipeline之Jenkins部署(图30)

CI/CD Pipeline之Jenkins部署(图31)

CI/CD Pipeline之Jenkins部署(图32)

CI/CD Pipeline之Jenkins部署(图33)

CI/CD Pipeline之Jenkins部署(图35)

(3)在任务列表中点击运行来执行该任务

CI/CD Pipeline之Jenkins部署(图34)

(4)可以通过控制台输出来查看整个任务的执行过程

CI/CD Pipeline之Jenkins部署(图37)

(5)运行成功后,访问该地址即可查看API文档:http://10.27.0.224:8088/swagger-ui.html

CI/CD Pipeline之Jenkins部署(图37)

作者:UStarGao
链接:https://www.starcto.com/devops/199.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

标签: Jenkins部署
文章页广告

随便看看

栏目底部广告
`