前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从零到一,构建你的持续交付流程(三):搭建基于Jenkins+Docker的持续交付环境

从零到一,构建你的持续交付流程(三):搭建基于Jenkins+Docker的持续交付环境

作者头像
御剑
发布2021-10-19 14:11:52
8140
发布2021-10-19 14:11:52
举报
文章被收录于专栏:微言码道微言码道

工欲善其事,必先利其器。

对于持续交付也是如此。这一篇我着重讲下,搭建前面我说的这样一个持续交付,要用到哪些工具及搭建。

这是从零到一,构建你的持续交付流程的第三篇,本系列其它文章为:

  1. 从零到一,构建你的持续交付流程(一):一个持续交付流程的构思
  2. 从零到一,构建你的持续交付流程(二):好的工程实践是必要的前提

一)

整体上来说,我的这个实现是基于Jenkins Pipeline + Docker来构建的。

这不代表只能这样。

我们一定要学会触类旁通,也就是知其然,知其所有然。持续交付关键在于把需要手工操作的东西自动化,流水线化。只要能支持这个过程的工具或技术都可以使用,并无特别的限定。

举例说明,

微言码道的官网https://taoofcoding.tech的部署与更新,我是用Shell来完成的。

代码语言:javascript
复制
#!/bin/sh
git pull --ff-only && echo "更新代码成功" || exit 1
npm install && echo "npm install成功" || exit 1
npm run build && echo "npm build成功" || exit 1
cd ./public
zip -r ./taoofcode_tech.zip * && echo "生产包构建成功" || exit 1
scp ./taoofcode_tech.zip root@taoofcoding.tech:/usr/share/nginx && echo "上传到远程服务器成功" ||  exit 1
rm ./taoofcode_tech.zip && echo "删除本地构建包" || exit 1
ssh root@taoofcoding.tech 'bash -s' < ../auto_deploy.sh && echo "远程部署成功" || exit 1

也就是每次修改完,我只要执行这个Shell脚本就自动完成部署与更新了。它也分为很多步骤,比如构建,打包,上传及远程解压等。

事实上,我正再考虑把这个过程迁移到Github Action中去,这样就少了自己执行脚本这个步骤了。

但我完全没有想过把这个过程使用Jenkins Pipeline或结合Docker来完成,这样就复杂化了。

因此,记住技术只是工具,选择最合适的方式就好。

二)

我们再来看下这个交付流程图

如果要满足这么一个流程,至少以下工具是必不可少的。

持续交付相关环境最好搭建在专门的服务器,或开发或测试环境服务器上为宜(基本24小时不停机的那种)。不要搭建在个人电脑上。

简单申明下: 这个系列不是技术教程,更多的偏向理论,我不会就各种工具一步一步教你如何下载与安装,这不是我这个系列的目的。 后续会出专门的教程来更详细的讲解它们。

1. Docker

我们需要Docker,主要用于两个目的,其中一个可选,一个必选。

可选目的:

减少对环境的特定工具版本的依赖,比如JDK版本,Node版本等。因为Jenkins Pipeline是支持Docker的,意味着你可以在Docker环境内去编译你的源码,单元测试,构建二进制包等。

必选目的:

我们用Docker来管理我们的服务,比如重启,停止或启动。这会极大的简化对服务的管理。

它还有一个额外的优势,当你的持续交付是单服务时,你直接用docker能管理好,如果是多服务,比如后台服务+数据库+前端页面,你可以用docker compose来管理。而分布式部署的多服务,可以基于docker swam或k8s来管理。

代码语言:javascript
复制
# 启动服务
docker start XXService
# 停止服务
docker stop XXService
# 多服务启动
docker-compose up -d

2. Jenkins

我们用开源的Jenkins来做持续交付。

安装它的方式有两种,一种是基于Docker安装,一种是将Docker安装在本地。

如果需要安装在本地也行,从官网下载Jar包,安装JDK,直接运行。

从简单方便的方式来看,我更喜欢直接用docker来安装。

代码语言:javascript
复制
docker run --name=jenkins -d -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts

如果有Docker环境,你只需要上述这个命令就好了。

启动后,注意使用docker logs查看启动的过程,第一次会在console中初始密码。初始化时需要这个。

代码语言:javascript
复制
#查看docker输出日志
docker logs -f jenins

你应该会看到类似的输出

代码语言:javascript
复制
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
f9b3befb252a46ad8cbdbea4292b3dbf
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

然后访问http://127.0.0.1:8080进行初始化。

初始化过程的插件选推荐的就好。至于管理员用户名及密码,按自己喜好填写。

安装docker pipeline插件

默认推荐的插件,不包含docker pipeline插件,由于我们可能在pipeline中使用到docker,所以我们需要安装这个插件

三)

其实最核心的就是Docker+Jenkins这两个就足够了。

很多人会觉得奇怪,难道不需要安装node支持前端构建,或JDK支持后端构建。

当然,你安装node或JDK也可以,不安装也行。

因为我们完全可以基于Docker来构建我们的项目,也就是本地没有JDK,也能在Docker中去编译运行它。

这一点,我后面会简要说明。

下一篇:从零到一,构建你的持续交付流程(四):利用Docker,将所有服务容器化。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微言码道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一)
  • 二)
  • 三)
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档