0%

基于 Jenkins 的自动化部署实践

Jenkins 是基于 Java 开发持续集成工具,可以拉取远程代码仓库的代码,进行编译、打包,执行 Shell 和 Groovy 脚本从而实现自动化部署。此外,Jenkins 也提供了丰富的插件进行功能扩展,以满足不同场景的使用。这篇文章文带你了解如何使用 Jenkins 进行项目自动化部署。

下面是 Jenkins 结合 Docker 进行自动化部署的流程和原理图:

简单描述一下整个流程,我们需要提前编写一份 Groovy 脚本,一般脚本里面的内容包括:如何拉取代码、对代码进行编译打包、执行 shell 脚本部署到远程服务器等内容;将这份脚本交由 Jenkins 去执行,就可以实现自动化部署了。接下来讲述一下如何基于 Docker 搭建这样一个自动化部署的平台。

基础环境配置与搭建

Docker 的使用与安装

以下是简单的安装流程

1
2
3
4
5
6
# 使用脚本自动安装
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
# 启动 Docker 并设置开机启动
sudo systemctl enable docker
sudo systemctl start docker

使用 Docker 安装基础软件

Jenkins

1
2
3
4
5
6
7
8
9
10
11
docker run -d -p 8060:8080 -p 50000:50000 \
--user=root \
--name jenkins --privileged=true \
--restart=always \
-v /data/jenkins/jenkins_home:/var/jenkins_home \ #Jenkins 目录挂载
-v /data/maven/apache-maven-3.6.3:/usr/local/maven \
-v /data/jdk/jdk1.8.0_161:/usr/local/java \
-v /var/run/docker.sock:/var/run/docker.sock \ #Docker 相关目录挂载,这样做才能使用 Docker 命令
-v /usr/bin/docker:/usr/bin/docker \
-v /data/node/node-v14.16.1-linux-x64:/usr/local/nodejs \ #NodeJS 目录挂载
jenkins/jenkins

NodeJS

用于前端工程打包

1
2
3
4
5
6
7
8
9
cd /data/nodejs
wget https://npm.taobao.org/mirrors/node/v14.16.1/node-v14.16.1-linux-x64.tar.xz
xz -d node-v14.16.0-linux-x64.tar.xz
tar -xzvf node-v14.16.0-linux-x64.tar
# 配置环境变量
export NODE_HOME=/data/nodejs/node-v14.16.1-linux-x64
export PATH=$NODE_HOME/bin:$PATH
# 检测是否安装成功
node -v

Maven

用于后端工程编译和打包

1
2
3
4
5
6
7
8
9
10
11
cd /home/mydata/data/maven
wget https://mirrors.aliyun.com/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
# 解压缩
tar -xzvf apache-maven-3.6.3-bin.tar.gz
# 环境变量配置:添加环境变量
vim /etc/profile
export M2_HOME=/home/mydata/maven/repo
export MAVEN_HOME=/home/mydata/maven/apache-maven-3.6.3
export PATH=$PATH:${MAVEN_HOME}/bin
# 刷新配置
source /etc/profile

Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
# 从容器当中复制配置文件到指定目录
docker run -p 80:80 --name nginx
docker cp nginx:/etc/nginx/nginx.conf /data/nginx
docker cp nginx:/etc/nginx/conf.d/ /data/nginx
docker stop nginx
docker rm nginx
# 生成容器并挂载目录
docker run -p 80:80 --name nginx --restart always \
--net host \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \ #主配置文件挂载
-v /data/nginx/conf.d:/etc/nginx/conf.d \
-v /data/nginx/logs:/var/log/nginx -d nginx # 日志挂载

部署脚本示例

下面是一个自动部署 Java 后端服务的一个示例脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
pipeline {
agent any
//环境变量,变量名称都可以自定义,在后面的脚本中使用
environment {
//远程 git 仓库地址
GIT_REGISTRY = 'http://ip:port/xxx.git'
//代码分支
GIT_BRANCH = 'develop'
//拉取代码的凭证,需要在 Jenkins 当中进行配置
GITLAB_ACCESS_TOKEN_ID = 'xxxx-xxx-xxxx-xxx'
}

stages {
//代码拉取与编译打包
stage('Build') {
steps {
// 获取代码
git credentialsId: "${env.GITLAB_ACCESS_TOKEN_ID}", url: "${env.GIT_REGISTRY}", branch: "${env.GIT_BRANCH}"
// 使用 maven 对项目进行编译打包
sh "mvn clean install"
}
}
stage('Image Build') {
//将jar包拷贝到Dockerfile所在目录,并制作镜像
}
stage('Image Push') {
//将制作好的镜像推送到镜像仓库
}
stage('Execute service') {
//服务部署
}
}
}

扩展阅读