一、前言
这篇文档的目的,是记录我使用Travis构建持续集成与自动部署的过程中踩到的坑,当做学习总结。
二、Travis
Travis是个CI/CD的平台。
简单地理解,你可以认为它给你提供了一台服务器。你往服务器上放一个CI/CD相关的脚本,脚本监控Github代码变更,调用Maven编译,并部署进你购买的服务器。
(注:我购买的服务器是谷歌云,它拥有App Engine,对外提供接口,使得Travis能调用接口进行部署。)
三、构建CI/CD步骤
3.1 克隆Github代码
克隆以下仓库到你的本地:
https://github.com/qiuyongchen/appengine-try-java.git
克隆完毕之后,根目录下有个名为『service-account.json.enc』的加密文件,该加密文件是Travis调用谷歌云接口的通行证,你需要从谷歌云上获取通行证文件(json),再加密(enc)。
3.2 获取谷歌云的通行证
前往谷歌云,选择『IAM和管理』,进入『服务帐号』tag,点击『创建服务帐号』,填入你想要的帐号名,同时记得勾选『Json类型的新私钥』,创建完毕之后自动下载json文件,手动把它重命名为service-account.json。
千万记住这个json文件可以查看和修改你的谷歌云,一定要妥善保管。
3.3 对通行证进行加密
拿到了通行证,需要对它进行加密,否则json文件上传到github,每个人都能查看内容,每个人都能控制你的谷歌云,每个人都能将自己的代码部署到你的谷歌云上。
使用openssl进行加密,加密方式选择为aes-256-cbc,假设初始化向量是E9EDACA1BD7090C9,加密key是89D4B1678D604FAA3DBFFD030A314B28,那么加密指令如下:
1 | openssl aes-256-cbc -K $encrypted_c9b056f6a4fd_key -iv $encrypted_c9b056f6a4fd_iv -in service-account.json -out service-account.json.enc -e |
得到加密后的通行证,用它替换调下载的appengine-try-java根目录下的文件。
3.4 创建App Engine项目
进入谷歌云的App Engine,选择创建一个项目,假设取的项目名是『my-test-ci』。
3.5 修改travis脚本
打开appengine-try-java根目录下的『.travis.yml』文件,将其中的red-cloud-177511替换为你创建的App Engine项目名,即上一步骤的my-test-ci。
3.5 创建Travis自动部署项目
将经过你修改的appengine-try-java项目上传到你的github上。
前往travis.org,注册帐号,授权travis访问你的github空间,并选择appengine-try-java作为自动部署项目。
3.6 配置travis自动部署参数
首先,在自动部署项目的setting页面上配置环境变量,总共有2个:
第一个的key为encrypted_c9b056f6a4fd_iv,值为你在步骤3.3使用的初始化向量(E9EDACA1BD7090C9);
第二个的key为encrypted_c9b056f6a4fd_key,值为你在步骤3.3使用的加密key(89D4B1678D604FAA3DBFFD030A314B28)
3.7 触发travis自动部署
随意修改一段你的github上appengine-try-java的代码,触发travis自动部署,没有意外的话,CD环境到此搭建完毕。