Jenkins 自动化部署
前言
流程:
- Jenkins 拉取 GitLab 仓库源码
- Jenkins 本地构建打包应用
- 把应用按 Dockerfile 打包进 Docker 镜像
- 使用 shell 或 Docker 相关的 Jenkins 插件把镜像上传到 Docker 私有仓库
- 执行 shell 脚本删除旧 Docker 容器,运行新 Docker 容器
参考文章:
- Jenkins集成Docker镜像实现自动发布
- docker+jenkins+git搭建java自动化部署
- 实战docker+jenkins+git+registry构建持续集成环境
- 基于Docker+Jenkins+Gitlab搭建持续集成环境
Git docker
参考《GitLab 搭建》
GitLab 上传了 tale 项目:
私有仓库 docker
参考《Registry 搭建》
Jenkins docker
Jenkins 有很多使用方式,这里使用 Docker 部署:
1 | sudo docker run --detach \ |
–volume /var/run/docker.sock:/var/run/docker.sock
–volume /usr/bin/docker:/usr/bin/docker
docker in docker 的方式,可以让 jenkins 构建 docker 容器,这里需要进容器里安装一个库,不然容器无法使用 docker:
1 apt-get update && apt-get install -y libltdl7
注意:映射本地的 maven 和 jdk 目录,这样容器内就不用再进行安装。
由于 Jenkins 容器的用户默认不是 root,所以在启动时需要指定 root 用户。否则映射目录就需要更改拥有者,不然会因为映射权限不足而无法启动(相关文章:Docker Volume 之权限管理):
1 | sudo chown -R 1000 /docker/jenkins |
配置
启动后看日志,里面有安装时需要用到的密码:
1 | sudo docker logs -f jenkins |
访问 localhost:16000,插件这里就选择推荐的安装了,图略。
之后继续安装一些插件,进入系统管理 -> 插件管理 -> available,搜索安装以下插件:
1 | Docker plugin |
对环境变量进行配置,进入系统管理 -> 全局工具配置:
编辑本地 /usr/lib/systemd/system/docker.service,修改其中的 ExecStart 属性:
1 | [Service] |
进入 Jenkins 界面的系统管理 -> 系统配置,修改 Docker Builder 下的 Docker URL 为:tcp://x.x.x.x:2375,注意这里的 x.x.x.x 是本地的网卡 IP 地址,之后点击测试,确认是否可以连接。
本地打包构建测试
这里先测试下 Jenkins 拉取 GitLab 项目并进行打包是否可行,新建一个 Jenkins 的 Maven 项目,配置如下:
在项目里的 Console Output 看是否打包成功:
可以从日志中看到,打好的包放在 /var/jenkins_home/workspace/test/target/dist,对应的映射本地目录:/docker/jenkins/workspace/test/target/dist