之前项目的修改很少,所以都是我用原始的手动部署方式
现在不想这么整了,感觉好累、好繁琐。。。
docker hub 已经改成自建的私库了,也准备用 jenkins 自动化部署
我现在的想法是这样的,不知道有没有问题?
那么有问题如何回滚?
1
aoTao 2019-06-27 18:28:13 +08:00
制作镜像的时候,给镜像以版本信息(commitID 或者版本号)多打一个 tag,回滚的时候用指定版本的镜像启动容器是不是可以解决问题?不确定是不是你的场景~
|
2
xzYao 2019-06-27 18:34:09 +08:00
回滚代码,打新镜像,推上去。。。
|
3
wangkai123 2019-06-27 18:36:04 +08:00
portainer 有 webhook
|
4
rootww21 2019-06-27 18:36:37 +08:00
jenkins 参数化构建根据代码版本发布,回滚时只需要选择上一个正式版打包
|
5
cwlmxwb 2019-06-27 18:39:17 +08:00 via iPhone
华为云流水线了解下
|
6
luozic 2019-06-27 18:44:32 +08:00 via iPhone
Jenkins 各家大的 ci cd 平台都有打包 部署 k8s 集成一条龙
|
8
dunhanson OP 哈哈哈 准备不用 portainer 部署了
|
10
dunhanson OP pull 镜像难道就只有我说的那种方式?没有其它的了?
|
11
miyuki 2019-06-27 19:55:23 +08:00
rancher 1.x
|
12
Lpl 2019-06-27 19:59:56 +08:00 via iPhone
哪有直接 pull latest 的。大家都是更新一个服务,就给这个服务打个最新的标签。你 latest 回退都没办法搞
|
13
Lpl 2019-06-27 20:03:50 +08:00
我给你出个最简单的解决方案,也不用上编排工具。
1. 自建一个 registry 2. Jenkins 做自动构建并 Push Image 到 Registry 中 3. Jenkins 自动做远程更新。 这样子就不需要手动了,只需要手动改下要发布版本的 tag 就可以了。 |
14
ssoor 2019-06-27 20:17:56 +08:00
gitlab 有个全家桶,
gitlab , gitlab-runner 建议楼主可以了解一下 , 我们公司就是用 gitlab 全家桶 + k8s 做的自动部署. gitlab // 源代码管理 gitlab regisry // gitlab 自带有私有仓库, 开启即可 gitlab-runner // ci - 自动编译, 构建镜像, 更新 k8s k8s // 自动扩缩容, 灰度切换, 快速回退 整个流程跑起来还是比较流畅的, 就是对 gitlab CD 这块接触不多, 直接使用 gitlab-runner 部署. 楼主的话, 可以只用全家桶, k8s 可以不上. CD 这方面目前在调研 CD 系统,目前考虑用 spinnaker 来做 CD 或者基于 k8s 的 CRD 做自研.主要对于 CD 来说 spinnaker 太重了. |
15
suom 2019-06-28 00:10:09 +08:00
k8s 3 台机器起步,保障高可用的话双集群也要 6 台机器,对小公司来说成本太高。
楼主思路其实蛮实用的。 其实回滚也好解决,需要回滚时,改 jenkins 的脚本指定一下镜像版本号就行。毕竟回滚这种事情不经常出现。 |
16
AlloVince 2019-06-28 00:14:14 +08:00
涉及到自动化部署了,上 k8s 是迟早的事,回滚就是一行命令。
可以参考我关于持续集成的文章 https://avnpc.com/pages/drone-gitflow-kubernetes-for-cloud-native-ci |
18
abcdocker 2019-06-28 01:22:22 +08:00
不考虑试用一下 k8s 吗? 直接了解一下 k8s,prometheus 还有 grafana。 逼格多高,满足 spring cloud,我们公司的 zuul 和 eurek 就跑在 k8s 上。
abcdocker 运维博客 https://i4t.com/? 我这整理的都是生产环境,像 kubeadm 完全学不到啥东西,出了问题没法解决 |
21
mritd 2019-06-28 07:26:33 +08:00 via iPhone
GitLab CI + k8s + harbor + traefik = ok
|
22
anubu 2019-06-28 08:21:38 +08:00
流程是这样的没错,回滚就是使用镜像标签,回滚基本是秒级的。这是制品回滚相对于代码回滚的优势。
关于 Jenkins 远程操作部署主机,你这里使用 SSH 也是可以的。实际上,更倾向于使用 docker 命令来操作远程 docker 主机,加上双向 TLS 验证,还是比较安全的。 上面说 k8s 的比较多,在这里应该不是重点,实际上把整个流程走通后,从部署到 docker 改为 k8s 也就是在 Jenkinsfile 里面把 docker 操作替换为 kubectl 操作就可以了。 |
23
jss 2019-06-28 08:28:56 +08:00 via iPhone
新手:我每天都手动操作这一切,你们说的自动化部署,看的我一脸懵逼…
|
24
airfling 2019-06-28 08:32:24 +08:00
三四年前用 daocloud 的时候,那时候是用 jenkins 构建镜像到他们的服务器,他们有个界面可以方便配置和回滚,docker 相关操作的代码 github 上都有,你可以自己写一个
|
26
wxb2dyj 2019-06-28 09:09:06 +08:00
新手,最近也在折腾这个问题。参考的这篇博客 https://blog.51cto.com/ganbing/2085769,但没有走通。参看这两篇博客 http://www.debugger.wiki/article/html/1559455233686297 和 https://blog.csdn.net/weinichendian/article/details/81047778,只走通了 Github 的 public 类型项目,private 的也实现自动构建了,但还没有构建成功。
|
27
akinoniku 2019-06-28 09:17:13 +08:00
一步到位,GitOps 了解一下
|
37
bhaltair 2019-06-28 10:18:49 +08:00
k8s ?
|
41
fivesmallq 2019-06-28 14:35:41 +08:00
我们目前就是通过 jenkins 执行的脚本
``` def switchContainer(String server, String project) { sh "ssh ${server} mkdir -p /apps/${project}" sh "scp docker-compose.yml ${server}:/apps/${project}" sh "scp .env ${server}:/apps/${project}" sh "ssh ${server} docker network create --subnet=${env.docker_network_range} ${env.docker_network} || true" sh "ssh ${server} docker-compose -f /apps/${project}/docker-compose.yml pull" sh "ssh ${server} docker-compose -f /apps/${project}/docker-compose.yml down --remove-orphans -v" sh "ssh ${server} docker-compose -f /apps/${project}/docker-compose.yml up -d" sh "ssh ${server} docker image prune -f" } ``` |
42
figael 2019-06-29 17:08:50 +08:00
1 )如果可以断线更新,直接用 docker-compose。
2 )如果不能断线更新,在服务前加一层反向代理,如 nginx。在新版本实例就绪前,旧版本实例还可以继续对外服务。 |