实现项目自动化部署,解放双手啦
这篇文章使用Docker+Jenkins+阿里云镜像仓库
实现Go语言项目的CI/CD。
首先讲一下大致的实现思路:
- 推送代码至Git服务器
- 阿里云镜像仓库自动构建镜像
- 触发Jenkins服务器配置的 Web Hooks
- 从Jenkins服务器进入远程应用服务器
- 从docker镜像仓库中拉取镜像
- 停止并删除该项目正在运行的docker容器
- 使用该新镜像构建并启动docker容器
- 删除其他旧版本镜像
- 完成
然后讲一下实践过程中用到的一些技术点:
Docker
使用
Docker
的主要原因主要有,应用移植方便,并且可有效解决同一应用在不同服务器上部署带来的环境问题影响。Docker Compose
docker-compose
也是由Docker提供的一个命令行工具,这里主要用于简化Jenkins
服务器上对容器的操作,仅此而已,可直接使用shell
脚本代替。Jenkins
Jenkins
是一个自动化服务器,也可以作为简单的CI/CD
服务器。
Git
Git
想必大家都不会陌生,这里同样使用它作为项目的代码管理仓库,并且利用它的Web Hooks
,作为Jenkins
任务构建的触发器。
镜像仓库
这里选择阿里云提供的容器服务作为我们的镜像仓库,因为当git仓库代码更新后阿里云可以自动构建镜像。
安装 Jenkins
- 拉取 Jenkins 镜像
1
docker pull jenkins/jenkins:latest
编写 docker-compose.yml 文件
1
2
3
4
5
6
7
8
9
10
11
12
13version: "2"
services:
jks:
image: jenkins/jenkins:latest
ports:
- 8080:8080
- 50000:50000
volumes:
- /data/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock #docker Server
- /bin/docker:/bin/docker #docker client
container_name: jks
user: root创建用于挂载的 /data/jenkins 文件夹, 并修改该文件夹的拥有者为 ID=1000 的用户
1
2mkdir -p /data/jenkins
chown -R 1000:1000 /data/jenkins通过 docker-compose 启动 jenkins 容器
1
docker-compose -f /data/compose/docker-compose.yml up -d jks
安装 Jenkins 插件
在浏览器输入 http://IP:8080 进入
Jenkins
管理页面通过命令
cat /data/jenkins/secrets/initialAdminPassword
获取初始密码,对 Jenkins 进行解锁,解锁后先跳过插件安装(无需担心漏装推荐的插件,在后续安装插件过程中,会自动安装解锁后推荐的所有插件)(可选)修改配置文件,并重启 Jenkins 容器,实现插件安装加速
1
2
3
4
5
6
7
8
9
10
11编辑jenkins配置文件
vim /data/jenkins/updates/default.json
执行ex命令, 替换所有插件下载URL
:1,$s/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g
执行ex命令, 替换连接测试URL
:1,$s/http:\/\/www.google.com/https:\/\/www.baidu.com/g
重启jenkins容器
docker-compose -f /data/compose/docker-compose.yml restart jks
- 进入Jenkins -> Plugin Manager页面安装以下插件
- Localization: Chinese (Simplified)
- Generic Webhook Trigger
配置 Jenkins
构建任务
点击Jenkins -> 新建任务,创建一个 Jenkins 任务
点击构建触发器
- 勾选Generic Webhook Trigger
- 在
token
那一栏填写自己的token,最好是项目名清晰明了 - 然后通过
http://用户名:用户APIToken 或者密码@IP:PORT/generic-webhook-trigger/invoke?token=你填写的TOKEN
例如:http://admin:admin@127.0.0.1:8080/generic-webhook-trigger/invoke?token=test
- 在阿里云镜像中心创建仓库并填写触发器
在jenkins任务构建中填写shell语句
1 | 容器名 |
这就大功告成了
docker相关请查看docker基本命令