Jenkins自动化部署

2023/10/29 Jenkins自动化部署

项目部署个人认为还是比较麻烦的事情,那我们就想能每次提交代码后,能够自动化部署就好了。目前Jenkins是自动化部署的主流工具之一,也是比较容易上手的。

# 1、Jenkins介绍

  • Jenkins是一种开源的持续集成服务,用于实施软件开发和发布流程。它帮助软件开发和运维团队在构建、测试和部署软件上实现自动化,使团队能够更快、更准确、更可靠地交付产品。
  • Jenkins是一种开源持续集成服务器,由Java编写,可以基于Web方式安装和配置。
  • Jenkins拥有丰富的插件支持。
  • 分布式构建,支持Jenkins能够让多台计算机一起构建/测试。

# 2、自动部署流程

目标需求

XYGALAXY博客项目,提交代码到Gitee上,通过Jenkins自动部署到服务器上。

所需工具

  • Docker:本次项目使用Docker部署项目,所以服务器需要安装Docker。
  • Docker-compose:Docker的编排工具,用于快速部署项目。
  • Jenkins:自动化部署构建工具,需要安装Jenkins。
  • Gitee:代码托管平台,需要提交代码到Gitee仓库上,并涉及到Gitee的Webhooks功能。
  • Webhooks:Gitee的Webhooks功能,用于触发Jenkins的构建。

Docker和Docker-compose安装可参考Docker详解

自动化执行流程

# 3、Jenkins安装

  • 通过docker-compose安装Jenkins,docker-compose.yml文件内容如下:
version: '3'
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    ports:
      - 8081:8080
    restart: always
    volumes:
      # 共享宿主机docker资源
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /usr/bin/docker-compose:/usr/local/bin/docker-compose
      - /etc/docker:/etc/docker
      - /etc/localtime:/etc/localtime
      - /etc/profile:/etc/profile
      # 配置挂载路径
      - /xygalaxy/jenkins/jenkins_data:/var/jenkins_home
      - /xygalaxy:/xygalaxy
    privileged: true
    user: root
    deploy:
      resources:
         limits: 
            cpus: "0.70"
            memory: 3400M
         reservations: 
            memory: 200M
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
  • 安装完成Jenkins安装必要的插件,这里只需要安装Git和WebHooks插件。

# 4、Jenkins配置博客项目

  • 进入Jenkins,点击新建任务,填写基本信息

  • 配置Gitee仓库地址

  • 配置Generic Webhook Trigger

  • 添加执行Shell脚本,就是执行docker-compose命令构建镜像并运行

shell脚本

# 注意这里必须加上
#!/bin/bash -ilex

# docker-compose 文件路径
dockerComposePath=/xygalaxy/docker-compose.yml
# 镜像名称
dockerImageName="xygalaxy-blog"

# 将打包后的dist文件拷贝到宿主机挂载目录
cp -r ./docs/.vuepress/dist /xygalaxy/xy_galaxy_blog
echo "容器停止中... ..."
docker-compose -f $dockerComposePath down
echo "$dockerImageName镜像删除中... ..."

CON=`docker image ls $dockerImageName | wc -l`
echo "镜像状态:$CON(CON取值为2表示镜像存在,为1镜像不存在)"
if [ $CON == 2 ];
  then
  echo "$dockerImageName镜像删除"
  docker rmi $dockerImageName  #镜像存在时执行此行命令
fi
echo "$dockerImageName容器部署中... ..."
docker-compose -f $dockerComposePath up -d

echo "$dockerImageName部署完成"

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

Jenkins就配置完成了,可以在Jenkins上直接点击构建看能否执行完Shell脚本,如果可以执行完,说明Jenkins配置成功。

# 5、Gitee配置WebHooks

  • Gitee配置WebHook,代码提交到仓库时,WebHooks会自动触发调用Jenkins接口。

配置完成后,就可以点击WebHooks的测试按钮,测试是否可以正常触发Jenkins接口了。配置流程如果遇到问题,可以分段测试,Git只是通过WebHooks跟Jenkins交互,如果Git配置没问题,那么就看Jenkins手动点击构建能够部署项目成功,按照自动部署流程走就行。

# 6、总结

  • 这里只是演示了Jenkins自动化部署的一个基本流程,如果是复杂一点的项目,比如后端微服务,就需要考虑给Jenkins安装Maven等打包工具,安装JDK环境等。然后调整Shell脚本。其实Jenkins自动化部署,就是将平常人为操作的部分,通过脚本自动化,实现一键部署。
  • Jenkins其实很强大,很多功能可以自己参考官方文档进行探索,像流水线部署,配置化部署等都是可以实现的。