Travis构建Google App Engine的CI/CD

一、前言

这篇文档的目的,是记录我使用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环境到此搭建完毕。