关于自动化部署:CircleCI

什么是CircleCICircleCI的用法我在我的项目中的应用

January 6, 2023 · 1 min · jiezi

关于自动化部署:Spug-V3-正式版本发布

Spug 通过15个Bate版本,终于在2021年12月24日公布了v3.0.2 Release正式版本。这次因为绝对2.x版本前端框架做了降级,性能也做了很多改变,所以v3版本公布后,始终处于bate验证确认,目标就是为了让使用者在生产环境中应用更稳固,更平安。Spug V3版本次要性能:工作台模块 新增布告性能 在工作台增加布告后,所有用户登录后,都会收到一个零碎布告推送 新增外链导航性能 在工作台能够很不便的增加多个零碎的导航链接,所有用户能够通过导航链接快捷登录到其余零碎,将来新的版本会将导航链接独立到一个新页面外面,不便用户快捷导航登录 主机治理模块• 当初主机反对从阿里云/腾讯云同步主机• 轻量级CMDB代替目前的主机治理,反对主动获取主机配置信息• 改良主机分组,当初能够自定义创立多个主机分组,主机分组更灵便直观• 将原有的Console治理对立为Web终端,性能更弱小,能够在Web终端中治理多个主机 批量执行模块• 优化改良批量执行UI,新增了执行记录• 新增Python命令的反对,能够在批量执行的时候执行Python命令• 新增了对于主机的内置全局变量,当初能够在批量执行的时候应用这些内置的全局变量(SPUG_HOST_ID/SPUG_HOST_NAME/SPUG_HOST_HOSTNAME/SPUG_SSH_PORT/SPUG_SSH_USERNAME)• 批量执行窗口新增了间接关上Web终端的性能• 批量执行优化了对windows零碎的反对 利用公布模块• 发布页面UX改良,更易掌控同时多个利用公布• 新增构建仓库子模块,实现惯例公布构建和公布的拆散,一次构建可用于屡次公布• 当初利用反对主动公布,能够指定分支或者tag主动公布,目前反对Github、Gitlab、Gitee、阿里云 (Codeup)、Gogs等• 新增公布模式选项,反对并行公布和串行公布• 公布新增了内置全局变量SPUG_APP_KEY(利用标识)• 公布配置中的门路和过滤规定设置已反对应用全局变量• 配置核心的配置能够间接在公布和构建过程中当作环境变量来应用• 新增定时公布性能,指定工夫主动公布• 自定义公布的SPUG_RELEASE反对主动解析为多个变量• 公布详情新增了间接关上Web终端的性能,能够在公布过程中间接关上web终端登录到主机上查看公布状况 工作打算模块• Cron类型的工作触发器反对 1-5 写法• 优化工作打算cron的周反对2-5/2写法• 工作打算失败告诉反对飞书、钉钉、Webhook等• 优化底层调度实现使工作打算执行更稳固 监控核心模块• 当初增加监控工作的时候,反对先执行测试一下• 站点检测新增响应工夫选项• 监控对象反对多选,缩小反复的监控条目• 监控的微信告警已能够显示具体的监控对象了• 优化底层调度实现使更稳固 报警核心模块• 报警联系人页面新增了发送报警测试性能,能够在增加报警的时候先测试一下 系统管理模块• 新增了登录MFA(两步验证),当初反对微信MFA验证,用户登录更平安• 新增用户多角色受权反对,当初一个用户能够绑定多个角色• 整体的接口安全性改良,反对登录IP的绑定,使接口调用更平安• 角色的主机权限设置改为按主机的分组受权 其余更新• 整体页面格调优化• 前端框架降级至 antd 4.x• 减少Spug API与Web版本不统一时的小提示• 增加了通过命令行长期禁用登录MFA的性能(mange.py set mfa disable)• 改良零碎告诉获取形式为websocket ...

December 27, 2021 · 1 min · jiezi

关于cicd:自动产出changelog第二节自动产出

背景接上一篇《主动产出changelog-第一节:标准提交代码》调研的后续,本文将基于 angular.js格局 的提交内容围绕自动化产出进行后续调研。钻研的方向为产出内容的工具是否反对各种自定义个性,是否帮忙咱们实现团队的格调及自动化过程中的一些问题。 简述在调研的过程中大量的文章都会举荐应用 conventional-changelog/conventional-changelog 进行changelog的产出,而其余蕴含更丰盛性能的库背地应用的仍旧是这个工具进行内容的产出。其作者还制作了 conventional-changelog/standard-version 和 conventional-changelog/standard-release 两套性能更为丰盛的工具供咱们应用,standard-release具备一个标准的应用前提,所以这个标准并不合乎咱们团队的状况,下文探讨将围绕standard-version进行。而另一个工具叫 release-it/release-it 的近三年比 conventional-changelog更沉闷,具体抉择哪个工具好?上面将给出参考。 standard-version我的项目装置 $ npm i --save-dev standard-version在package.json加上上面这段内容后,调用 npm run release 应用 { "scripts": { "release": "standard-version" }}全局装置 $ npm i -g standard-version # 应用 standard-version间接应用 $ npx standard-version调用standard-version后会输入以下内容: $ npx standard-version√ bumping version in package.json from 0.2.0 to 0.2.1√ bumping version in package-lock.json from 0.2.1 to 0.2.1√ outputting changes to CHANGELOG.md√ committing package-lock.json and package.json and CHANGELOG.md√ tagging release v0.2.1i Run `git push --follow-tags origin master && npm publish` to publishstandard-version会为咱们做以下行为: ...

April 12, 2021 · 4 min · jiezi

关于自动化部署:一套基础自动化部署搭建过程

我的公众号:MarkerHub,网站:https://markerhub.com更多精选文章请点击:Java笔记大全.md 作者:LoyaltyLusegmentfault.com/a/1190000019729005问题背景公司初创技术团队,没有任何基础设施的状况下,须要搭建一系列 code 治理以及自动化部署等工具…. 所以引发了上面一系列的部署过程,历时两天,两头也是碰到各种问题,但最终把根本工具全副搭建胜利,耶~,上面带大家一起看下此次搭建过程。 资源服务器一台,CentOS 的,公司就给了一台配置较低的服务器当长期服务器,没方法了,就这么搞吧。 思考:如果我用传统的 yum 来装置,必定会被我装乌七八糟,还不不便本人治理保护,左右为难的状况下我抉择了 Dokcer,可能有些小伙伴问 Docker 是啥怎么用,不要慌这里有传送门: https://segmentfault.com/a/11...测试环境搭建为了疾速搭建一套 PHP 测试环境我决定用 laradock 了,尽管文件很多,然而外面封装的货色也是比拟全的,前期开发不晓得会用到什么技术,就决定先用这个,随时能够启动用失去的服务。 laradock 官网文档给的介绍也很全面,我这里采纳的形式是部署多套我的项目形式目录构造如下: + laradock+ project-1+ project-2开始应用:1.git clone https://github.com/laradock/laradock 2.cp env-example .env env 外面的配置能够批改的,能够依据本人状况进行调整 3.docker-compose up -d nginx php-fpm mysql redis 前面能够加上你要启动的程序,像 rabbitmq、mongo 等等,须要的时候追加在尾部就能够启动,首次启动工夫有点长 4.docker-compose exec --user=laradock workspace bash 像 laravel 等我的项目必定少不了 composer,执行这个命令进入工作区,就能够执行 composer 了 5.docker-compose exec nginx nginx -s reload 必定有人会问我更改了 nginx 配置是不是每次都要进入 nginx 容器去重启,或者把整个容器都重启了呀,不必的,执行这个命令就能够重启 nginx 了。nginx 站点配置文件在哪里呢:./laradock/nginx/sites/ 先运行下试试吧。 GitLab当初运行环境曾经搭建好了,我代码应该怎么寄存呢,其实有很多的抉择,要依据本人的理论状况登程,如:GitHub、码云、GitLab 等等,我抉择的是 GitLab,刚开始没有发现 laradock 其实提供了 GitLab 服务。。只能本人折腾了, 其实很简略。 ...

March 18, 2021 · 1 min · jiezi

关于自动化部署:gitea和golang组合实现hook自动化部署代码

gitea和golang组合实现hook自动化部署代码背景目前git代码仓库develop分支的代码要常常更新到测试服务器,应用传统的FTP上传代码太费劲,应用git pull手动拉取分支,也不够释怀。当初应用git中的hook来进行自动化部署代码。 思路 git服务&hook配置git服务应用的是gitea。其中的hook配置如下ps:没用gitlab切实是因为它内存占用太大 golang gin实现的web服务用到两个外围类库 go-sh 执行Linux命令应用go-shgo-simplejson 疾速获取json中的数据go-simplejson外围代码赏析res := c.Request.Bodyfmt.Println("hook后果", res)bodydata, err := ioutil.ReadAll(res)if err != nil { fmt.Println(err)}j, err := simplejson.NewJson(bodydata)if err != nil { fmt.Printf("err", err)}repository, err := j.Get("repository").Get("full_name").String()if err != nil { fmt.Printf("err", err)}fmt.Println("辨认到的仓库是", repository)clone_url, err := j.Get("repository").Get("clone_url").String()if err != nil { fmt.Printf("err", err)}fmt.Println("辨认到的clone_url是", clone_url)残缺代码,点击拜访github仓库,请star :)

October 24, 2020 · 1 min · jiezi

关于自动化部署:Jenkins-应用详细教程-linux版安装配置发布项目

Jenkins 利用具体教程 (linux版装置、配置、公布我的项目) 一、前提 ===== 首先要保障装置了java虚拟机环境,如果没有装置则能够应用yum install java装置即可。 二、下载拜访jenkins网站(拜访地址:https://www.jenkins.io/zh/)(可能拜访工夫稍长,要略微等一下就会呈现该界面) 呈现jenkins界面后,点击下载 三、上传抉择图中的war包,下载后上传到linux服务器的相应地位(地位自定义)。 【如何近程拜访linux服务器,举荐装置SecureCRT, 请参考https://blog.csdn.net/zhijunming/article/details/82892936】 四、启动cd到jenkins的war包所在的目录 示例:cd /home/jenkins 执行命令:`nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8084 &` 参数阐明: --httpPort = HTTP_PORTjenkins监听HTTP协定。默认端口号为8080。要禁用(因为你应用的是HTTPS),应用端口-1。--httpListenAddress = HTTP_HOST代表的IP地址。默认值是0.0.0.0 -即侦听所有可用的接口。例如,只监听本地申请,你能够应用:--httpListenAddress = 127.0.0.1--httpsPort = HTTP_PORT--httpsListenAddress = HTTPS_HOST示意IP地址的HTTPS申请。--prefix = PREFIX在URL的开端。例如,为了使jenkins在拜访的http :// MYSERVER:8080 /jenkins,设置--prefix = /jenkins--ajp13Port = AJP_PORTjenkins监听AJP13协定。默认端口号为8009。要禁用(因为你应用的是HTTPS),应用端口-1。--ajp13ListenAddress = AJP_HOST代表的IP地址。默认值是0.0.0.0 - 即监听所有可用的接口。--argumentsRealm.passwd ADMIN_USER。如果jenkins的安全性已关上,你必须为了配置jenkins或jenkins我的项目为$ ADMIN_USER登录。留神:您还必须指定该用户具备管理员的角色。(见下参数)。--argumentsRealm.roles ADMIN_USER是管理员用户,能够配置jenkins如果jenkins的安全性已开启。见确保詹金斯以获取更多信息。-Xdebug -Xrunjdwp:运输= dt_socket,地址= DEBUG_PORT。日志文件= $ LOG_PATH / winstone_date +“%Y%M-%D_%H-%M“.log文件登录到所需的文件-XX:PermSize = 512M -XX:MaxPermSize = 2048M -Xmn128M -Xms1024m -Xmx2048Mnohup 是 no hang up 的缩写,就是不挂断的意思。nohup和&的区别& : 指在后盾运行nohup : 不挂断的运行,留神并没有后盾运行的性能,,就是指,用nohup运行命令能够使命令永恒的执行上来,和用户终端没有关系,例如咱们断开SSH连贯都不会影响他的运行,留神了nohup没有后盾运行的意思;&才是后盾运行五、拜访 ...

October 9, 2020 · 1 min · jiezi

自动化营销模式助力业务快速转型

一场突如其来的疫情,打乱了已经规划好的营销计划,取消了计划中/正在实施的线下项目,年前大手笔的营销投入到头来“一场空”。 如今,2020年都过去四分之一,想必很多企业都在思考如何才能将损失降到最低。身处大数据时代,我们认为营销自动化是个绝佳选择,在2019年活动ROI达到预期的企业中,有59%使用了营销自动化系统辅助活动,而在活动ROI超过预期的企业中,这个数字更是达到了68%。 盈鱼MA的自动化营销方案面面俱到,相较于传统营销,可以更好提升品牌营销效率,精细量化营销ROI,扩大销售效益。 下面我们就一起来看看盈鱼MA自动化的优势: 1、全渠道管理不管是“跨渠道”还是“全渠道”,营销人员都在尝试将各种营销渠道,如将PC/Mobile Web、APP、微信公众号、小程序、企业第三方平台整合起来,这样可以有效地在正确的时间,通过正确的渠道,与正确的用户进行交互,提供正确的内容,像这样无缝并持续的优质客户体验终将达成销售增长。 87%的品牌都表示全渠道策略很关键,很重要,但是只有7%的品牌已经实现了全渠道整合。 导致比例这么低的原因是什么呢? 技术。 盈鱼MA精准洞察这一痛点,一键开启对接渠道:PC/Mobile Web、APP、微信公众号、小程序、成员推广、二维码渠道和企业第三方平台。 通过自动化跨渠道打通ONE_ID,不断沉淀全渠道用户数据,实现数字化用户数据管理;整合全渠道的数据,帮助企业高效判断营销场景触达的有效性,让企业找到更有价值的营销渠道。 2、线索打分不是所有线索都值得销售跟进,不是所有线索销售都愿意跟进。营销自动化系统可以提销售线索培育策略。 通过线索打分来观察每一个销售线索的状态,市场营销根据客户所处销售周期的阶段来个性化发送给客户的内容。每条线索都会持续收到有针对性的营销内容,直到它的得分足够高,才会被传递给销售。正向推动跟销售的协作,最终提升销售转化率。 3、实现个性化营销个性化的营销对有效培养潜在客户至关重要。也就是说,营销活动应该在合适的时间、合适的地点,满足用户特定情绪、特定认知的需求。每个营销场景,其流量的流转和整个拉新留存转化,及复购口碑推荐的过程可能都是不一样的,这个过程需要进行一个合理的设计。 下图是盈鱼MA的设计逻辑: (1)精准的用户 要把内容推送给正确的用户,避免对其他用户造成骚扰。 (2)推送时间个性化 基于对消费者行为数据的收集,找到合适的时机,发送营销内容,更有助于营销转化。 (3)推送内容个性化 推荐有以下不同的形式:基于类似内容的推荐;基于消费者画像的推荐;基于近似消费者的行为预测推荐。 (4)推送渠道个性化 消费者的触达渠道多样,接收信息的习惯也不同。对于品牌来说,在选择触达渠道时,选择合适的渠道投放内容,应根据消费者的不同属性,为消费者设计不同的触达渠道,而不是跟风选择那些流量大的渠道。 4、加强客户获取和留存当企业提供与潜在客户的背景和购买偏好相关的、管理得当的个性化营销时,潜在顾客就会被吸引,顾客就会留下来。 此外,借助营销自动化,通过定期营销活动管理、线索跟进,以及与客户互动,营销人可以更多地关注客户获取和留存策略。 Adestra研究显示,39%的营销人同意将获取更多客户作为营销自动化的目标之一。 5、提供实时营销数据分析 2017年Adestra的研究显示,37%的营销人将绩效评估作为营销自动化的一个重要目标。的确如此。 通过盈鱼MA自动化营销系统,你可以对整个营销链条的监测,从曝光量、点击量、打开内容页面到购买量,对每个营销环节进行实时监测和数据分析,让每一次营销操作不只是停留阅读和曝光数据,还注重于用户积累和转化数据,以便指导后续营销活动开展。 同时建立反馈机制,及时发现错误,这样,你就可以调整和优化营销策略。将资源投入到有用的地方,让内容实现商业价值最大化。从而造就以数据为核心的营销闭环,让营销活动得到良性循环。 本文由盈鱼MA原创,未经作者许可,禁止转载。 【盈鱼MA】自动化营销系统”通过大数据技术把分散割裂的渠道高效整合起来,全场景、多渠道覆盖拉新、留存、促活、转化以及企业客户全生命周期的营销需求,助力企业营销更加精准化、数据化、智能化,让企业获取更多客户线索,挖掘更多有价值的客户。

July 1, 2020 · 1 min · jiezi

借助URLOS快速安装jenkins持续集成工具

简介Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。 今天我们介绍一种更快速的安装方法,那就是通过URLOS一键安装jenkins。urlos是什么? URLOS是一个云主机管理软件,基于Docker容器技术打包和运行应用,包含负载均衡和故障转移等高级功能,可自动识别机器和云应用的故障并将云应用转移至可用的机器上,单机故障并不影响业务开展。 你可以使用以下命令安装URLOS: curl -LO www.urlos.com/iu && sh iu在此不讨论URLOS的使用方法,感兴趣的朋友请自行搜索,我们直接来看URLOS如何快速安装jenkins: 安装流程1.登录URLOS系统后台,在应用市场中搜索“jenkins”,找到之后,直接点击安装按钮 2.填写服务名称、选择运行节点、服务端口、选择智能部署 然后点击“提交”按钮,等待部署完成; 3. jenkins初始化向导访问http://IP:8080(其中的IP是你的服务器的IP) 这里需要填写初始密码,创建服务完成后,可在当前服务的文件管理中找到密码文件,路径为jenkins_home/secrets/initialAdminPassword 找到密码,将密码填入后继续步骤: 选择安装社区流行的插件还是自定义安装插件 我们选择自定义安装插件: 可以看到已经默认选择了一些插件,我们可以选择自己需要的来安装。 选择“install”进行下一步: 创建管理员账户: 登录后: jenkins的详细使用方法请查考官方文档:https://jenkins.io/zh/doc/

July 10, 2019 · 1 min · jiezi

dockerdaocloud实现前端项目Vuejs自动部署

项目的自动化部署在大公司或独角兽中用得比较多,相比来进行手动部署项目来说会更加高效。那么本文结合之前学习的docker知识点以及nginx来简单实现VueJs项目的自动部署,当然针对其他项目也类似。运行环境首先需要在服务器上进行docker、nginx、node等的安装。便于进行后续的操作。通过docker拉取nginx镜像,命令docker pull nginx通过vue-cli初始化一个项目可以通过vue init webpack 项目名称初始化一个项目,这里假设项目名称是docker-vue,然后在该项目的根目录新建一个Dockerfile文件,大致内容如下: FROM nginx:latest#把当前打包工程的html复制到虚拟地址COPY dist/ /usr/share/nginx/html/#使用自定义nginx.conf配置端口和监听RUN rm /etc/nginx/conf.d/default.confADD default.conf /etc/nginx/conf.d/RUN /bin/bash -c 'echo init ok!!!'并新建一个default.conf文件,内容如下: server {项目中定义的端口号listen 8080;server_name localhost;#charset koi8-r;#access_log /var/log/nginx/log/host.access.log main;location / { root /usr/share/nginx/html; index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html { root html;}}自此,基本工作已完成,接下来就是对于daocloud.io的基本配置操作了 daocloud.io基本配置操作若无账号,可以先进行注册daocloud.io。接下来的操作分为: 创建项目集群管理创建镜像仓库创建项目这里需要添加项目名称,设置代码源(可以是github、gitlab)等,然后选择你所需要构建的项目,我这里选择了我自己的github仓库docker-vue,然后点击开始创建就行。 集群管理集群管理的主要目的是为了链接远程服务器,并通过命令进行daocloud.io镜像的创建。选择新建主机 由于我自己是购买了阿里云服务器了,系统是ubuntu的,所以就选择了这样的配置,然后在服务器上运行: curl -sSL https://get.daocloud.io/daomonit/install.sh | sh -s e2fa03ebead51076411388c26dff2257dae89768 来构建一个docker镜像,如: ...

July 2, 2019 · 1 min · jiezi

初识Ansible自动化运维工具

前言2010年左右1,当时系统多数运行在小型机上,如HP、Sun、IBM小型机,如某系统当时使用10台小型机,但随着业务量不断增长,前几年去IOE的火热进行,开源技术的不断发展,原先使用10台小型机的系统在如今可能已暴涨似增涨到使用百来台X86 Linux主机。 如何运维成百上千台的主机成为一个挑战,本人经历过如下3阶段: 延用管理小型机时的方法:编写shell脚本,而后通过scp拷贝到各台主机,最后ssh远程执行脚本,但此方法的弊端是:shell脚本很难重复运行,如若脚本中间环节报错,则脚本前面所做的事情需清理,费时费力;使用puppet自动运维工具,其提供了一系列常用模块可用,但此工具过于复杂,其需在被管理主机安装agent,如其提供的模块未能满足管理需求,则扩展模块比较难2。使用ansible自动运维工具,其同样提供了常用模块可用,但较于puppet轻量,无需在被管主机安装agent,其核心是通过ssh登录主机执行命令,使用方式简单,学习成本低。最近一项目作者使用ansible批量管理了200多台PC Server,所做事情简单描述如下: 配置网卡主备绑定(bonding)并进行切换测试;配置主机磁盘Raid,格式化磁盘,挂载文件系统,创建用户;主机安装Jdk、Oracle客户端、TimesTen等客户端;配置ZK、Weblogic、Redis等集群;ansible为何如此强大且好用,作者决定使用实战方式带领初学者迅速掌握此工具,从入门到精通。 环境描述本示例准备了两台虚拟机,操作系统版本为Centos 7.6,主机均采用最小化模式安装。 % cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) % cat /root/anaconda-ks.cfg...%packages@^minimal@corekexec-tools...两主机IP地址如下: % cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6okd-l01 192.168.18.2okd-i01 192.168.18.3Ansible安装对于非RHEL系列主机安装ansible可参考官方文档Installation Guide。 控制节点okd-l01主机能连接英特网,下面将在此主机上安装ansible软件。 ansible在epel源里,故先为系统配置epel源:% rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-7.noarch.rpm安装ansible:% yum -y install ansible执行如下命令查看当前版本:% ansible --versionansible 2.7.5 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /usr/bin/ansible python version = 2.7.5 (default, Apr 9 2019, 14:30:50) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]被控节点okd-l01与okd-i01均作为ansible被管主机,需满足如下条件: ...

July 1, 2019 · 1 min · jiezi

手摸手教你搭建 Travis CI 持续集成和自动化部署

很早之前我就在用 Travis CI 做持续集成了,虽然只是停留在 zhuang bi 的阶段,但或多或少也保证了代码的提交质量。最近在写一个 《JavaScript API 全解析》系列的 Book,需要经常把文章部署到服务器上,手动部署实在是烦,索性花了一天时间研究了一下自动化部署。这篇文章是对 Travis CI 持续集成和自动化部署的总结,以飨社区。前戏Travis CI 目前有两个网站,一个是 travis-ci.com,另一个是 travis-ci.org. 前者用于企业级和私有仓库,后者用于开源的公有仓库。实际上 free plan 也可以使用 travis-ci.com,但优先级很低,跑个自动化动辄两个小时,因此我们使用 travis-ci.org.首先打开 Travis CI 官网,并用 GitHub 账号登录,授权后 Travis CI 会同步你的仓库信息。接下来把需要做自动化的工程授权给 Travis CI.最好有一台 Linux 的服务器,我的是 Cent OS 7.6.x 64bit.我们点开一个工程,再切到设置,可以看到在 push 代码和 PR 时都会触发持续集成,当然可以根据需求手动配置。持续集成为了让持续集成像那么回事儿,我们先在 master 上切一个 develop 分支,再在 develop 上切一个 featur/ci 分支。接着我们再用 Jest 写几个测试用例,注意如果项目中没有测试脚本而 .travis.yml 文件里面包含 yarn test,自动化 一定 报错。关于 Jest 这里不详细说,只贴出几个示例代码。import * as utils from ‘../utils/util’;test(‘should get right date’, () => { expect(utils.formatJSONDate(‘2019-03-10T04:15:40.629Z’)).toBe( ‘2019-03-10 12:15:40’, );});test(‘should get right string’, () => { expect(utils.upperFirstLetter(‘AFTERNOON’)).toBe(‘Afternoon’); expect(utils.upperFirstLetter(‘YANCEY_LEO’)).toBe(‘Yancey Leo’);});然后我们在工程的根目录下新建一个文件 .travis.yml,并复制下面的代码。language: node_jsnode_js: - 8branchs: only: - mastercache: directories: - node_modulesinstall: - yarn installscripts: - yarn test - yarn build简单解释一下,工程使用 Node.js 8.x,并且只在 master 分支有变动时触发 自动化部署(正常的提交、PR 都会正常走持续集成),接着将 node_modules 缓存起来(你懂的),最后安装依赖、跑测试脚本、在沙箱部署。因此,理论上只要跑通这套流程,我们就可以放心的部署到真实环境了。提交一下代码,并 pull request 到 develop 分支。在此过程中我们触发了 push 和 PR,所以会跑两个 CI。待到两个都成功跑完后,我们就可以放心的合到 develop 分支了。(这里我还做了代码质量检测,有兴趣可以戳 Codacy)最后我们回到 Travis CI 的官网,可以看到一套完整的构建流程:安装依赖 -> 测试 -> 沙箱部署持续部署创建 rsa 对,并给予权限首先登录你的服务器,一般来讲我们不会直接在 root 上操作,所以这里新增一个 caddy 的用户 。具体怎样在 Linux 新建用户请自行谷歌。接下来 cd 到 ~/.ssh,看看有没有一对 id_rsa 和 id_rsa.pub,如果没有就用 ssh-keygen 生成。给予 .ssh 文件夹 700 权限,给予 .ssh 里的文件 600 权限。(看下面这张图,你的文件夹里可能暂时没有 authorized_keys、 known_host、config 这三个文件,后面会说到。)$ sudo chmod 700 ~/.ssh/$ sudo chmod 600 ~/.ssh/将生成的公钥添加到受信列表进入到 .ssh 文件夹里,执行下面的命令,可以看到公钥被添加到受信列表。$ cat id_rsa.pub >> authorized_keys$ cat authorized_keys测试登录在 .ssh 目录下创建一个文件 config,输入如下代码并保存。Host testHostName 当前服务器的IPUser 当前用户名IdentitiesOnly yesIdentityFile ~/.ssh/id_rsa因为 authorized_keys 和 config 文件都是新增的,它们还没被赋予 600 权限,所以重新执行一遍 sudo chmod 600 ~/.ssh/.然后我们输入 ssh test,不出意外会重新登录 ssh。如果你的公钥从来没有被使用过,会提示 Are you sure you want to continue connecting (yes/no)? ,输入 yes 后也会正常重新登录,并且在.ssh 文件夹下还会生成一个 known_hosts 文件.安装 Ruby因为 Travis 客户端是用 Ruby 写的,所以我们得先安装 Ruby.首先安装需要的依赖包:$ yum install gcc-c++ patch readline readline-devel zlib zlib-devel \ libyaml-devel libffi-devel openssl-devel make \ bzip2 autoconf automake libtool bison iconv-devel sqlite-devel接下来安装 RVM,并载入 RVM 环境。RVM 是 Ruby 的版本管理工具,类似于 Node 的 NVM.$ gpg –keyserver hkp://keys.gnupg.net –recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3$ \curl -sSL https://get.rvm.io | bash -s stable# 载入 rvm 环境$ source ~/.rvm/scripts/rvm安装完之后输入 rvm -v 做下检查,如果有 rvm 1.29.1 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io/] 的字样证明安装成功。最后安装 Ruby,这里选择 v2.4.1 版本,安装需要一段时间,完成后记得将此版本设为默认。$ rvm install 2.4.1$ rvm 2.4.1 –default执行一下 ruby -v 和 gem -v,如果和下图差不多证明安装成功。安装 Travis 客户端执行下面的命令以安装 Travis 客户端。$ gem install travis安装完成后执行 travis,它会让你安装相应的 Shell, 输入 yes 即可。配置免密登录将你的工程克隆下来,并进入到工程目录,然后登录你的 GitHub 账号。$ travis login –auto执行下面这句,它会利用服务器的私钥加密成一个叫做 id_rsa.enc 的文件,这个文件被用于 travis 登录你服务器的凭证,从而达到免密的目的。$ travis encrypt-file ~/.ssh/id_rsa –add我们执行一下 ll,可以看到根目录下多出一个 id_rsa.enc 文件来,并且 cat .travis.yml,发现多出了 before_install.为了更好地组织代码,我们在项目的根目录新建一个文件夹 .travis,然后将 id_rsa.enc 放到里面。配置 after_success 钩子在写这一小节之前,我们先看一看 Travis 的生命周期:before_install 安装依赖前install 安装依赖时before_script 执行脚本前script 执行脚本时after_success 或 after_failure 执行脚本成功(失败)后before_deploy 部署前deploy 部署时after_deploy 部署后after_script 执行脚本后因此 after_success 可用在成功通过测试脚本之后执行部署相关的脚本。当然细一点可以使用 deploy 相关的钩子,这里不做太复杂。打开 .travis.yml文件,直接上全部代码。language: node_jssudo: truenode_js: - 8branchs: only: - master# 这里填写服务器的ip,若端口号不是22,后面要注明端口号addons: ssh_known_hosts: - 你的服务器IPcache: directories: - node_modulesbefore_install: # 因为我们把 id_rsa.enc 移到了.travis 文件夹下,所以 -in 后面要改成 .travis/id_rsa.enc # 其次,-out 后面自动生成的是 ~/.ssh/id_rsa,要把 \ 去掉,否则会编译失败 - openssl aes-256-cbc -K $encrypted_XXXXXXXXXXXX_key -iv $encrypted_XXXXXXXXXXXX_iv -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d # 开启 ssh-agent,即允许使用 ssh 命令 - eval “$(ssh-agent -s)” # 给予 id_rsa 文件权限,避免警告 - chmod 600 ~/.ssh/id_rsa # 将私钥添加到 ssh - ssh-add ~/.ssh/id_rsainstall: - yarn installscripts: - yarn test - yarn buildafter_success: # 登录服务器,执行部署脚本,其实最好把后面一串写成 shell 文件 - ssh caddy@你的服务器IP -o StrictHostKeyChecking=no ‘cd /var/www/jsapi/JavaScript-APIs-Set && git pull && yarn install && yarn build’走一遍正式的流程至此,搭建 Travis CI 持续集成和自动化部署就算完成了,可能不太严谨,但基本是这么一个思路。下面我们梳理一遍流程。我们先在 feature/ci 分支修改一段代码,提交分支,并 PR 到 develop,此时会运行两个 CI。当两个 CI 都跑通了,我们可以放心的 merge request 到 develop 分支。接下来让 develop PR 到 master,此时会运行两个 CI(一个是 develop 分支,一个是测试合并到 master 的 CI)。当两个 CI 都跑通了,我们可以放心的 merge request 到 master 分支。merge request 之后会跑最后一个流程, 也就是自动部署,部署成功后线上代码就会更新了。加入徽章别忘了把 build passing 徽章添加到你的 README.md 文件中。最后不知道你有没有发现,Travis CI 支持 LGBT…以上、よろしく。参考How to Encrypt/Decrypt SSH Keys for DeploymentTravis-CI 自动化测试并部署至自己的 CentOS 服务器CentOS 7 使用 rvm 安装 ruby 搭建 jekyll 环境 ...

March 28, 2019 · 3 min · jiezi