简介近年来随着微服务、容器、云计算的发展,DevOps、CI/CD等概念越来越多地进入人们的视野。许多开发团队希望应用这些概念来提高软件质量和开发效率。工欲善其事,必先利其器。什么样的工具可以满足开发者的需求?TARS作为优秀的开源微服务开发和运行集成平台,具有多语言、高性能、敏捷研发、高可用等特点。那么TARS能否完美支持DevOps理念呢?本文将开源CI工具Jenkins与TARS集成,进行一次完整的实践,展示如何实现自动化构建和部署TARS服务的过程。内容什么是DevOps和CI/CD前期准备环境部署TARS开发环境安装Jenkins配置JenkinsAccessJenkins插件安装创建admin用户关联代码仓库生成密文设置GitHubWebhooks配置GitHubPlugin自动化构建创建任务新建TarsCpp项目推送到GitHub自动构建触发自动化部署修改项目Webhook配置获取TarsWeb接口Token创建任务部署服务自动部署触发什么是DevOps和CI/CD随着微服务、容器、云计算的发展,DevOps和CI/CD等概念已经成为近年来越来越流行,很多地方都吸引了大家的眼球。DevOps是一种流行的软件开发方法,将持续开发、持续测试、持续集成、持续部署、持续监控融入到软件开发的生命周期中,以提高软件开发质量。几乎所有顶级公司都在使用它。CI/CD是实现DevOps理念的重要一环。我们先来了解一下概念:CI指的是持续集成(ContinuousIntegration),CD指的是持续交付(ContinuousDelivery)和持续部署(ContinuousDeployment),意思是通过一系列自动化的脚本执行,实现交付和部署开发过程中编码,实现快速交付,提高团队开发效率。越来越多的开发团队希望通过DevOps来提升软件质量和开发效率。工欲善其事,必先利其器。TARS作为一个优秀的开源微服务开发和运行的集成平台,具有多语言、高性能、敏捷研发、高可用等高级特性。TARS服务开发的CI/CD流程可以通过将开源CI工具Jenkins与TARS集成来实现。前期准备环境在执行本文之前,需要提前部署一套TARS框架。TARS框架的安装部署可以参考官方文档中的框架部署部分。要求部署Jenkins的服务器节点可以访问TARS的框架服务;也可以直接在同一个节点上部署Jenkins和TARS框架。部署Jenkins的服务器节点需要可以通过GitHub的webhook访问,一般是连接外网,打开相应的端口。本文使用的操作系统、TARS框架、TarsCpp和Jenkins版本如下操作系统:CentOS7TarsFramework版本:2.4.5TarsCpp版本:2.4.8Jenkins版本:2.235.2LTS本文命令以CentOS7为例.其他操作系统请自行查阅文档。部署TARS开发环境Jenkins自动构建TARS项目的过程中需要相应的TARS开发环境,所以我们需要在构建机上部署相应的开发环境。本文以TarsCpp为例,仅介绍TarsCpp开发环境的部署。对于其他语言的TARS开发环境,您可以参考官方文档中的入门>开发环境部署安装相应的TARS开发环境。TarsCpp依赖安装在安装TarsCpp之前,需要安装相应的依赖组件,可以通过以下命令安装。更详细的依赖组件参见官方文档中的TarsCpp开发环境搭建。yum-yinstallglibc-develgccgcc-c++bisonflexzlib-devel然后安装cmake,TarsCpp需要cmake3.2以上,可以使用源码安装或者yum安装,二选一。源码安装(版本在3.2以上,这里以3.10.0为例)wgethttps://cmake.org/files/v3.10/cmake-3.10.0-rc3.tar.gztarzxvfcmake-3.10。0-rc3.tar.gzcdcmake-3.10.0-rc3/./bootstrapgmakegmakeinstallyum在CentOS7中安装,yuminstallcmake默认版本是2.8,所以我用的是cmake3,然后创建cmake的软链接。(也可以不创建软连接,使用cmake3代替后续的cmake命令)yum-yinstallcmake3cd/usr/binln-scmake3cmakeinstallTarsCpp开发环境安装TarsCpp开发环境gitclonehttps://github.com/TarsCloud/TarsCpp.git--recursivecdTarsCppmkdirbuildcdbuildcmake..makemakeinstall安装JenkinsJenkins依赖安装Jenkins是Java写的,需要安装JDKyum-yinstalljava-1.8.0-openjdk-devel另外Jenkins还需要从GitLab或者GitHub下载,拉取代码需要安装Gityum-yinstallgitAdvanced:为了不让环境过于复杂,可以使用开发编译容器搭建服务,读者可以通过探索他们自己。安装Jenkins的方法有很多种。下面介绍两种通过yum和rpm包安装Jenkins的方法。选择其中之一进行安装。对于yum安装,可以通过以下命令安装Jenkins。如果安装过程中资源包下载慢,可以看下一节使用rpm包安装wget-O/etc/yum.repos.d/jenkins.repohttps://pkg。jenkins.io/redhat-stable/jenkins.reporpm--importhttp://pkg.jenkins.io/redhat/jenkins.io.keyyuminstall-yjenkinsrpm包安装国内网络访问外网资源多数情况下比较慢,通过yum安装需要很长时间。这时候可以从国内镜像源下载rpm包进行安装。这里我们使用清华金枪鱼镜像源wgethttps://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.235.2-1.1.noarch.rpmrpm--importhttp://pkg.jenkins。io/redhat/jenkins.io.keyrpm-ivhjenkins-2.235.2-1.1.noarch.rpm安装完成后启动Jenkins通过以下命令运行jenkins服务systemctlstartjenkins可以通过以下命令systemctlstatusjenkins配置Jenkins访问Jenkins在浏览器中输入http://${IP}:8080即可访问Jenkins,其中IP为服务器公网IP第一次访问需要用管理员密码解锁,即可以在日志和服务器文件/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。生成的密文在GitHub上称为令牌。在GitHub首页,进入右上角头像->设置->开发者设置->个人访问令牌,点击生成新令牌。在Scopes中,我们勾选repo和admin:repo_hook,然后点击Generatetoken生成token。在生成的页面上我们需要复制token并保存,因为token只会显示一次。设置GitHubWebhooks在GitHub上选择自己的TARS项目,点击Settings->Webhooks->AddWebhook,在PayloadURL中输入http://${IP}:8080/github-webhook/,其中IP为Jenkins所在的服务器部署的IP或域名。接下来配置插件GitHubPlugin,之前没有安装的需要安装。配置GitHubPlugin回到Jenkins主页,进入系统管理->系统设置->GitHub->添加GitHub服务器。在APIURL中输入https://api.github.com,Credentials点击Add,Type选择SecretText,Secret前填写GitHub上生成的token,描述填写,其他默认即可,最后点击Add。然后在凭证下拉栏中选择新添加的凭证,点击连接测试,测试是否有效。自动化构建创建任务在Jenkins主页点击新建任务,输入名称,这里我们选择构建一个自由风格的项目,点击确定进入任务配置,在General中,填写任务描述,勾选GitHub项目,填写你的这里我新建了一个测试仓库TarsCppCIDemo。在源代码管理中,我们选择Git,在RepositoryURL中填写项目的git地址,在Credentials中点击Add,添加你的GitHub账号。添加过程中需要填写GitHub账号用户名和密码,最后在下拉列表中选择添加的账号。在指定的分支中,你可以选择你需要操作的分支,比如只在dev分支上执行构建操作。这里不建议使用master分支,可以新建一个dev分支进行代码提交。注意:master分支为主分支,一般作为稳定版分支使用,可直接用于发布产品,所以需要保证代码的正确性,构建成功后合并到该分支没有问题;日常开发一般会创建如dev多人协作开发的开发分支,会创建多个开发分支,以各自的名称或昵称来区分。在源码库浏览器中选择githubweb,并填写项目地址的URL,这样每次构建产生的变更都可以链接到GitHub上查看变更详情。在BuildTriggers中,我们勾选GITScmpolling的GitHubhooktrigger,这样每次获取到GitHub的webhook都会触发构建。在BuildEnvironment中选择Usesecrettext(s)orfile(s),然后在Binding中的Add中选择Secrettext,在Credentials中选择SpecifyCredentials,在下拉列表中选择之前保存的webhooktoken。在构建中,可以根据自己的需要编写构建脚本。本文生成的测试工程中使用了TarsCpp,所以构建步骤选择了执行shell,然后通过如下简单的shell脚本即可完成工程构建。mkdir-pHelloServer/buildcdHelloServer/buildcmake..make-j4makeHelloServer-tarpost-buildoperation用于指定构建完成后的操作。这里我选择了SetbuildstatusonGitHubcommit[deprecated],也就是说我可以在构建结束时,设置本次commit的构建状态,直观的体现在GitHub对应仓库的commit记录中,说明构建了此提交成功或失败。最后点击保存,任务就创建好了。新建一个TarsCpp项目,我们在已经安装好TarsCpp环境的机器上拉取项目,比如gitclonehttps://github.com/ETZhangSX/TarsCppCIDemo.git然后创建一个服务项目/usr/local/tars/cpp通过TarsCpp服务创建脚本/script/cmake_tars_server.shTarsCppCIDemoHelloServerHello至此,脚本已经默认生成了TarsCpp服务的HelloServer项目。推送到GitHub我们提交刚刚创建的项目,然后推送。这些涉及到git的使用。详情请参考Git官方文档。过程。它会自动通过git下载项目,进入项目目录,执行构建操作。build操作就是我们之前在build中添加的build步骤,执行shell脚本。当我们打开Jenkins页面,可以看到正在运行的构建任务或者已经完成的构建,就说明Jenkins的自动构建配置已经成功。点击数字,图中的#8,可以查看本次构建的详细信息,包括shell构建过程的日志输出。构建完成后,可以在GitHub上查看对应commit的构建状态。自动化部署说完自动化建设,本节介绍如何实现自动化部署。这里我们选择类似自动化构建的方式,使用Jenkins实现自动化部署,即通过获取GitHub分支的状态变化来进行相应的部署操作。两者的主要区别在于操作的分支不同,自动构建操作是dev分支,自动部署操作是master分支。修改项目Webhook配置由于master分支用于TARS服务的自动部署,一般不会直接提交代码,而是通过其他分支合并,所以我们需要获取master分支的Pullrequests事件。我们打开GitHub项目TarsCppCIDemo的Webhooks设置,点击webhook对应的Edit,将webhook的触发方式修改为Letmeselectindividualevents,即自定义事件,如下,然后添加勾选相关事件拉取请求,如下,然后点击Updatewebhooktosave,GitHub项目配置完成获取TarsWeb接口Token要在TarsWeb管理接口外部署服务,需要调用TarsWebAPI接口,该接口需要传入有效的Token进行身份验证。因此,需要生成一个可以用于接口调用的Token。首先登录TarsWeb管理页面,点击页面右上角用户名下拉栏中的用户中心,然后点击Token管理--添加Token,选择到期日期和时间点击确定成功生成Token,将Token复制保存,以供后续步骤使用。创建任务类似于自动构建。创建一个新任务并选择构建一个具有自定义名称的自由样式项目。大部分任务配置都是一样的,只需要修改两个地方:修改源代码管理中的指定分支master和修改build中的shell构建脚本为#!/bin/shmkdir-pHelloServer/buildcdHelloServer/buildcmake..-DTARS_WEB_HOST=http://123.123.123.123:3000-DTARS_TOKEN=6b4e9*********************************68d55a9make-j4makeHelloServer-tarmakeHelloServer-uploadTarsCpp已经实现了直接发布服务的功能,使用cmake构建项目时传入相应的参数即可。在cmake命令中,通过-D传入参数。这里我们需要传入两个参数。参数TARS_WEB_HOST是我们自己部署TarsWeb的地址,TARS_TOKEN是前面创建的APITOKEN,如下。最后点击保存生成构建任务。部署服务注意,在触发Jenkins自动部署之前,我们需要提前在TarsWeb上部署好服务,相当于注册了服务,然后就可以正常发布服务了。如果对服务部署有任何疑惑,可以查看官方的服务开发介绍文档。自动部署触发将修改后的新代码推送到dev分支,打开Jenkins主页,会触发之前创建的自动构建任务,不会触发自动部署任务。构建成功后,打开项目的GitHub仓库,会出现如下提示,点击Compare&pullrequest,提交Pullrequest,即可触发自动部署。回到Jenkins页面,我们可以看到自动部署任务被触发了。如果显示构建成功,我们打开TarsWeb管理页面,可以看到服务已经发布运行。总结本文介绍如何在TARS服务开发过程中使用Jenkins实现持续集成和持续部署能力,帮助提升软件交付速度和构建质量,提升团队协作效率。TARS能够在兼顾易用性和高性能的同时,快速构建系统并自动生成代码,帮助开发者和企业以微服务的形式快速构建属于自己的稳定可靠的分布式应用,让开发者只关注业务逻辑,提高运维能力效率。多语言、敏捷研发、高可用、高效运行等特点使TARS成为企业级产品。TARS微服务助你数字化转型,欢迎访问:TARS官网:https://TarsCloud.orgTARS源码:https://github.com/TarsCloudLinux基金会官方微服务免费课程:https://www.edx.org/course/bu...获取《TARS官方培训电子书》:https://wj.qq.com/s2/6570357/...或扫码获取:
