导语
随着微服务、容器、云计算的倒退,近些年 DevOps、CI/CD 等概念越来越多地映入大家的眼帘。许多开发团队都心愿利用这些理念来进步软件品质和开发效率,工欲善其事必先利其器,什么样的工具才可能满足开发者的需要?TARS 作为一套优良的开源微服务开发经营一体化平台,领有多语言、高性能、麻利研发、高可用等特点。那么 TARS 是否可能完满反对 DevOps 理念呢?本文通过将开源 CI 工具 Jenkins 与 TARS 集成,进行一次残缺的实际来展现如何实现 TARS 服务的自动化构建与部署的流程。
目录
- 什么是 DevOps 和 CI/CD
- 后期筹备
- 环境
- 部署 TARS 开发环境
- 装置 Jenkins
- 配置 Jenkins
- 拜访 Jenkins
- 插件装置
- 创立 admin 用户
- 关联代码仓库
- 生成 secret text
- 设置 GitHub Webhooks
- 配置 GitHub Plugin
- 自动化构建
- 创立工作
- 新建 TarsCpp 我的项目
- push 到 GitHub
- 主动构建触发
- 自动化部署
- 批改我的项目 Webhook 配置
- 获取 TarsWeb 接口 Token
- 创立工作
- 部署服务
- 主动部署触发
什么是 DevOps 和 CI/CD
随着微服务、容器、云计算的倒退,近些年 DevOps、CI/CD 等概念越来越多地映入大家的眼帘。DevOps 是当初风行的一种软件开发办法,将继续开发、继续测试、继续集成、继续部署、继续监控等贯通到软件开发的生命周期中,用于进步软件的开发品质,被以后简直所有顶级公司采纳。
CI/CD 是实现 DevOps 理念的重要一环,咱们先来理解一下概念:CI 指继续集成(Continuous Integration),CD 指继续交付(Continuous Delivery)和继续部署(Continuous Deployment),意思是通过一系列自动化的脚本执行,实现开发过程中的代码的交付和部署,实现疾速交付,进步团队开发的效率。
越来越多的开发团队都心愿通过 DevOps 来进步软件品质和开发效率,工欲善其事必先利其器,TARS 作为一套优良的开源微服务开发经营一体化平台,领有多语言、高性能、麻利研发、高可用等特点。通过将开源 CI 工具 Jenkins 与 TARS 集成即可实现针对 TARS 服务开发的 CI/CD 流程。
后期筹备
环境
进行本文操作之前,须要提前部署一套 TARS 框架,TARS 框架的装置部署能够查阅官网文档中框架部署局部,要求是部署 Jenkins 的服务器节点可能拜访到 TARS 的框架服务即可;也能够间接将 Jenkins 与 TARS 框架部署在同一节点上。
部署 Jenkins 的服务器节点须要可能被 GitHub 的 webhook 拜访到,个别只有通外网并关上相应端口即可。
文中应用的操作系统、TARS 框架、TarsCpp 和 Jenkins 的版本如下
- 操作系统: CentOS7
- TarsFramework 版本: 2.4.5
- TarsCpp 版本: 2.4.8
- Jenkins 版本: 2.235.2 LTS
本文命令都以 CentOS7 为例,如果是其余 Linux 行版或其余操作系统,请自行查阅文档。
部署 TARS 开发环境
在 Jenkins 主动构建 TARS 我的项目的过程中须要对应的 TARS 开发环境,因而咱们须要在构建的机器上部署相应的开发环境。
本文以 TarsCpp 为例,仅介绍 TarsCpp 开发环境的部署,其余语言 TARS 开发环境能够参照官网文档中的 开发入门 > 开发环境部署,装置对应的 TARS 开发环境。
TarsCpp 依赖装置
装置 TarsCpp 之前,须要装置相应的依赖组件,能够通过以下命令装置,更多依赖组件的详细信息能够看到官网文档中的 TarsCpp 开发环境搭建。
yum -y install glibc-devel gcc gcc-c++ bison flex zlib-devel
接着装置 cmake
,TarsCpp 须要 cmake 3.2
以上版本,能够应用源码装置或者 yum
装置,任选其一即可。
- 源码装置(版本在
3.2
以上即可,这里以3.10.0
为例)
wget https://cmake.org/files/v3.10/cmake-3.10.0-rc3.tar.gz
tar zxvf cmake-3.10.0-rc3.tar.gz
cd cmake-3.10.0-rc3/
./bootstrap
gmake
gmake install
yum
装置
在 CentOS7 中,yum install cmake
默认版本为 2.8
,因而我应用 cmake3
,再创立软连贯到 cmake
。(也能够不创立软连贯,应用 cmake3
代替后续 cmake
命令即可)
yum -y install cmake3
cd /usr/bin
ln -s cmake3 cmake
装置 TarsCpp 开发环境
通过以下命令装置 TarsCpp 开发环境
git clone https://github.com/TarsCloud/TarsCpp.git --recursive
cd TarsCpp
mkdir build
cd build
cmake ..
make
make install
装置 Jenkins
Jenkins 依赖装置
Jenkins 是用 Java 编写的,须要装置 JDK
yum -y install java-1.8.0-openjdk-devel
另外 Jenkins 还须要从 GitLab 或 GitHub 拉取代码,须要装置 Git
yum -y install git
进阶:为了不让环境过于简单,能够应用开发编译容器进行服务的构建,读者能够自行摸索。
装置
Jenkins 有多种装置形式,这里介绍通过 yum
和 rpm 包装置两种形式,抉择其中一种进行装置即可。
-
yum 装置
能够通过以下命令装置 Jenkins,如果装置过程中资源包下载较慢,能够看到下一节应用 rpm 包装置
wget -O /etc/yum.repos.d/jenkins.repo
https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
yum install -y jenkins
-
rpm 包装置
少数状况下,国内网络拜访外网资源较慢,通过 yum
安装时间会比拟长,此时能够通过国内镜像源下载 rpm 包进行装置,这里咱们应用清华 tuna 镜像源
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.235.2-1.1.noarch.rpm
rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
rpm -ivh jenkins-2.235.2-1.1.noarch.rpm
启动 Jenkins
装置实现后即可通过以下命令运行 jenkins 服务
systemctl start jenkins
能够通过以下命令查看 Jenkins 的运行状态
systemctl status jenkins
配置 Jenkins
拜访 Jenkins
在浏览器输出 http://${IP}:8080
来拜访 Jenkins,其中 IP
为服务器公网 IP
第一次拜访须要应用 Administrator password
解锁,在日志和服务器文件 /var/lib/jenkins/secrets/initialAdminPassword
中能够找到,咱们应用 cat
命令输入明码
cat /var/lib/jenkins/secrets/initialAdminPassword
插件装置
能够点击装置举荐插件,默认装置的插件足够满足后续的应用。因为还没有更改插件更新核心的地址,装置过程会比较慢,也能够先抉择跳过,后续批改更新核心地址为国内源后再下载须要的插件。
更新核心即 Jenkins 插件的下载源,默认为官网下载源,国内拜访较慢,具体替换形式和国内镜像源能够查看 Jenkins 中文社区
创立 admin 用户
装置完插件后,会跳转到 admin 用户创立页面,依照页面提醒实现即可。
关联代码仓库
Jenkins 能够关联 git
或 svn
仓库,也能够是代码托管平台,当仓库有新的 push
或 merge
操作时,能够从仓库拉取代码进行构建等操作。这里咱们抉择的 GitHub 作为关联仓库,其余代码托管平台操作类似。
本文中,我关联了 https://github.com/ETZhangSX/TarsCppCIDemo.git 这个仓库。
生成 secret text
在 GitHub 上称为 token。在 GitHub 主页,进入 右上角头像 ->Settings->Developer settings->Personal access tokens
点击 Generate new token
,Scopes
中咱们勾选 repo
和 admin:repo_hook
,而后点击 Generate token
即可生成 token。在生成页面咱们须要复制 token 并保留,因为 token 只会显示一次。
设置 GitHub Webhooks
抉择本人在 GitHub 上的 TARS 我的项目,点击 Settings->Webhooks->Add Webhook
,
在 Payload URL
中输出 http://${IP}:8080/github-webhook/
,其中 IP 为部署 Jenkins 的服务器 IP 或者域名。
接下来要配置插件 GitHub Plugin,如果之前没有装置的话须要装置。
配置 GitHub Plugin
回到 Jenkins 主页,进入 系统管理 -> 零碎设置 ->GitHub-> 增加 GitHub 服务器
。
API URL
中输出 https://api.github.com
,凭据点击 增加
,类型抉择 Secret Text
,Secret
填入之前 GitHub 上生成的 token,填写形容,其余默认即可,最初点击 增加
。
而后在凭据下拉栏抉择刚刚增加的凭据即可,点击 连贯测试
能够测试是否无效。
自动化构建
创立工作
在 Jenkins 主页点击 新建工作
,输出名字后,这里咱们抉择构建自在格调(free style) 的我的项目,点击 确定
进入工作配置,在 General
中,填写工作的形容,勾选 GitHub 我的项目
,填写你的我的项目构建地址,这里我新建了一个测试仓库 TarsCppCIDemo
.
源码治理
中咱们抉择 Git
,Repository URL
中填写我的项目的 git 地址,Credentials
中先点击 增加
,增加你的 GitHub 账号,增加过程须要填写 GitHub 账号用户名和明码,最初在下拉列表中选中增加的账号。
指定分支
中能够抉择你须要操作的分支,比方只对 dev
分支执行构建操作。这里不举荐应用master
分支,可新建 dev
分支用于代码提交。
阐明:
master
分支为主分支,个别作为稳定版分支,能够间接用来公布产品,因而须要保障代码的正确性,构建胜利后并确定没有问题后再合入该分支;日常开发个别会创立如dev
的开发分支,多人合作开发则会创立多个开发分支,并以各自的名字或昵称命名来辨别。
源码库浏览器
抉择 githubweb
,URL
填写我的项目地址,这样每次构建生成的 changes 能够链接到 GitHub,查看变更的详情。
构建触发器
中咱们勾选 GitHub hook trigger for GITScm polling
,这样每次获取到 GitHub 的 webhook 都会触发构建。
构建环境
中抉择 Use secret text(s) or file(s)
,而后在 绑定
的 新增
中选中 Secret text
, 凭据
抉择 指定凭据
,下拉栏选中之前保留的 webhook token。
构建
中可依据本人的需要编写构建的脚本了,在本文生成的测试项目中应用了 TarsCpp,因而构建步骤抉择了 执行 shell
,而后通过以下简略的 shell 脚本即可实现我的项目的构建。
mkdir -p HelloServer/build
cd HelloServer/build
cmake ..
make -j4
make HelloServer-tar
构建后操作
用于指定构建实现后进行的操作,这里我抉择了 Set build status on GitHub commit [deprecated]
,这示意我可能在构建完结时设置本次 commit 的构建状态,直观体现为 GitHub 对应仓库的 commit 记录中会显示 勾
或 叉
示意此次 commit 的构建胜利或失败。
最初点击 保留
,工作就创立好了。
新建 TarsCpp 我的项目
咱们在曾经装置 TarsCpp 环境的机器上拉取我的项目,例如
git clone https://github.com/ETZhangSX/TarsCppCIDemo.git
而后通过 TarsCpp 的服务创立脚本创立服务项目
/usr/local/tars/cpp/script/cmake_tars_server.sh TarsCppCIDemo HelloServer Hello
此时,脚本曾经默认生成了 TarsCpp 服务的 HelloServer 我的项目。
push 到 GitHub
咱们 commit 刚刚创立的我的项目,而后 push。
这些波及
git
的应用,具体请查阅 Git 官网文档
git add .
git commit -m "helloworld"
git push origin master
主动构建触发
Jenkins 获取到 GitHub 的 webhook 事件后(咱们后面曾经关联好了),会主动启动构建流程。它会主动通过 git
下载我的项目,进入我的项目目录,执行构建操作,构建操作即为咱们之前在 构建
中增加的 构建步骤
,执行 shell 脚本。
咱们关上 Jenkins 的页面,能够看到正在运行的构建工作或者已实现的构建,代表 Jenkins 的主动构建配置曾经胜利了
点击编号,图中为 #8
,能够查看本次构建的详细信息,包含 shell 构建过程的日志输入。
构建实现能够在 GitHub 上查看对应 commit 的构建状态。
自动化部署
后面讲完了自动化构建,本节讲述如何实现自动化部署。这里咱们抉择自动化构建相似的形式,应用 Jenkins 实现自动化部署,即通过获取 GitHub 分支状态的变动来进行相应的部署操作。两者次要区别在于操作的分支不同,自动化构建操作 dev
分支,自动化部署操作 master
分支。
批改我的项目 Webhook 配置
因为 master
分支用于 TARS 服务的自动化部署,个别不间接提交代码,而是通过其余分支合入,因而咱们须要获取 master
分支的 Pull requests
事件。咱们关上 GitHub 我的项目 TarsCppCIDemo
的 Webhooks
设置,点击对应 webhook
的 Edit
批改 webhook 的 trigger 形式为 Let me select individual events
,即自定义事件,如下
而后新增勾选与 Pull requests
相干的事件,如下
而后点击 Update webhook
保留,GitHub 我的项目的配置就实现了
获取 TarsWeb 接口 Token
在 TarsWeb 治理界面以外要部署服务,须要调用 TarsWeb 的 API 接口,接口须要传入无效的 Token 进行鉴权。因而须要生成能够用于接口调用的 Token。
首先,登录 TarsWeb 治理页面,点击页面右上角用户名下拉栏中的 用户核心
,而后点击 Token 治理 -- 新增 Token
,抉择生效日期和工夫后点击 确定
即可胜利生成 Token,复制保留 Token 备后续步骤应用。
创立工作
同自动化构建类似,新建工作抉择构建自在格调 (free style) 的我的项目,名字自定义。
工作配置上大部分雷同,仅须要批改两处:
- 批改
源码治理
中的指定分支
为master
- 批改
构建
中的 shell 构建脚本为
#!/bin/sh
mkdir -p HelloServer/build
cd HelloServer/build
cmake .. -DTARS_WEB_HOST=http://123.123.123.123:3000 -DTARS_TOKEN=6b4e9****************************68d55a9
make -j4
make HelloServer-tar
make HelloServer-upload
TarsCpp 曾经实现了服务间接公布的性能,在应用 cmake
构建我的项目时传入相应的参数即可。cmake
命令中通过 -D
传入参数,这里咱们须要传入两个参数,参数 TARS_WEB_HOST
为本人部署 TarsWeb 的地址,TARS_TOKEN
为后面创立的 API TOKEN,如下。
最初点击 保留
即可生成构建工作。
部署服务
留神,在触发 Jenkins 进行主动部署之前,咱们须要提前在 TarsWeb 上进行服务部署,相当于注册服务,后续能力失常公布服务,如下
如果对服务部署存在疑难,能够看到官网的服务开发介绍文档。
主动部署触发
将改变的新代码 push 到 dev
分支,关上 Jenkins 首页,会触发之前创立的主动构建工作,没有触发主动部署的工作。
构建胜利后,关上我的项目的 GitHub 仓库,会呈现以下提醒,点击 Compare & pull request
,提交 Pull request
,接下来主动部署才会被触发。
回到 Jenkins 页面,咱们能够看到主动部署工作被触发,如果显示构建胜利,咱们关上 TarsWeb 治理页面,能够看到服务曾经公布运行。
总结
本文介绍了如何应用 Jenkins 实现 TARS 服务开发过程中的继续集成与继续部署能力,帮忙进步软件的交付速度和构建品质,晋升团队的合作效率。
TARS 能够在思考到易用性和高性能的同时疾速构建零碎并主动生成代码,帮忙开发人员和企业以微服务的形式疾速构建本人稳固牢靠的分布式应用,从而令开发人员只关注业务逻辑,进步经营效率。多语言、麻利研发、高可用和高效经营的个性使 TARS 成为企业级产品。
TARS 微服务助您数字化转型,欢送拜访:
TARS 官网:https://TarsCloud.org
TARS 源码:https://github.com/TarsCloud
Linux 基金会官网微服务收费课程:https://www.edx.org/course/bu…
获取《TARS 官网培训电子书》:https://wj.qq.com/s2/6570357/…
或扫码获取: