应用在迭代升级过程中,需要持续集成与持续部署。使用Jenkins为SAE应用的构建持续集成(CI)环境。
前提条件
-
使用GitLab托管您的代码。
-
方式一:自行搭建GitLab。本文以自行搭建的GitLab进行演示。
-
方式二:使用云效代码管理Codeup。
-
背景信息
您可以使用Jenkins构建SAE应用的持续集成方案。本文适用于对以下语言或工具有一定了解的开发人员。
|
工具 |
说明 |
|
Maven |
Maven是一个项目管理和构建的自动化工具。 |
|
Jenkins |
Jenkins是一个可扩展的持续集成引擎。 |
|
GitLab |
GitLab是一个利用Ruby on Rails开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 它拥有与GitHub类似的功能,能够浏览源代码,管理缺陷和注释。 |
步骤一:配置项目
修改Maven项目配置,添加toolkit-maven-plugin及应用部署信息。具体操作,请参见通过Maven插件自动部署应用。
修改项目配置后,建议您在本地使用Maven构建验证配置是否正确。
步骤二:配置Jenkins
-
在Jenkins控制台的菜单栏中选择,安装Git和GitLab插件。
说明-
GIT Client Plugin和GIT Plugin插件可以帮助Jenkins拉取Git仓库中的代码。
-
GitLab Hook Plugin插件可以帮助Jenkins在收到GitLab发来的Hook后触发一次构建任务。
在 Jenkins 的管理 Jenkins > 插件管理页面,选择可选插件 Tab,在搜索框中输入
git进行过滤,在插件列表中勾选所需插件,然后单击直接安装。 -
-
在Jenkins控制台的菜单栏中选择,设置Maven版本名称并配置路径,单击保存。
例如,在 Name 中填写
Apache Maven 3.6.3,在 MAVEN_HOME 中填写 Maven 的安装路径。 -
在Jenkins服务器上生成SSH RSA密钥对,并将公钥导入GitLab,实现Jenkins拉取GitLab代码时的自动认证。
-
在Jenkins服务器生成SSH RSA密钥对。
执行命令
ssh-keygen -t rsa -C "admin@example.com"生成密钥对,然后执行cat ~/.ssh/id_rsa.pub查看公钥内容。将公钥复制到剪贴板:Windows 执行clip < ~/.ssh/id_rsa.pub,Mac 执行pbcopy < ~/.ssh/id_rsa.pub,GNU/Linux 执行xclip -sel clip < ~/.ssh/id_rsa.pub。 -
进入GitLab首页,在菜单栏选择 ,并单击New Deploy Key ,导入在Jenkins服务器上创建的SSH RSA公钥。
在 Title 中填写密钥名称,在 Key 中粘贴已复制的公钥内容,然后单击 Add key。
-
步骤三:创建Jenkins任务
-
在Jenkins首页左侧导航栏中单击新建Item,在创建任务界面输入任务名称,并选择Freestyle project,单击确定,配置任务信息。
本示例中,任务名称设置为
testapp。 -
单击源码管理,在源码管理页签中选择Git,并设置相关参数。
-
Repository URL:您的项目的Git协议地址。
-
Credentials:安全凭证,选择无即可。
重要请确保您的SSH RSA公匙已添加到该Git项目所在的GitLab中,否则将会报错。
在源码管理中选择 Git,并在 Branches to build 的 Branch Specifier 中填写
*/master。 -
-
单击构建触发器,在构建触发器页签选中GitHub hook trigger for GITScm polling。
-
单击构建环境,在构建环境页签选中Add timestamps to the Console Output,为控制台输出的信息添加时间戳。
-
单击构建,在构建页签单击增加构建步骤,在下拉列表中选择Invoke top-level Maven targets。
-
在Invoke top-level Maven targets区域设置Maven Version和Goals。如果您想部署多模块工程,请参见(可选)创建多模块工程的Jenkins任务。
-
Maven Version:单击该选项后面的下拉框,选择在全局工具配置里配置的Maven版本名称。
-
Goals:输入mvn clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkit_package=toolkit_package.yaml -Dtoolkit_deploy=toolkit_deploy.yaml (如有其他参数,请根据实际情况输入)。
说明Maven配置完成后,在步骤五:提交变更到GitLab步骤中便可通过POP API方式触发应用部署。
-
步骤四:配置GitLab的Web Hook
-
在GitLab首页右键单击GitLab工程,然后选择Setting > Web Hooks。
-
在Web Hooks页面的URL区域中输入
http://jenkins服务器地址:jenkins服务器监听端口/git/notifyCommit?url=本项目的git协议地址。图中表示的Jenkins服务器地址为您的Jenkins服务器的Web访问地址如
192.168.XX.XX:8080。在 URL 输入框中填写 Jenkins 通知地址,格式为
http://Jenkins服务器地址/git/notifyCommit?url=GitLab项目的SSH地址,其中 GitLab 项目地址需与 Jenkins 中配置的仓库地址一致。在 Trigger 区域勾选 Push events,然后单击 Add Web Hook。 -
配置完成后,单击Test Hook,测试配置结果。
返回 HTTP 200 状态码,表示 Hook 配置成功。
步骤五:提交变更到GitLab
如果上述步骤配置正确,提交后将会触发一次GitLab Hook。Jenkins在接收到该Hook后会构建您的Maven项目,并在构建结束时调用SAE POP API脚本触发部署。
构建的Maven项目中配置了通过SAE POP API方式部署应用的脚本。
提交部署成功输出的日志信息()。
15:58:51 [INFO] Deploy application successfully!
15:58:51 [INFO] ------------------------------------------------------------------------
15:58:51 [INFO] BUILD SUCCESS
15:58:51 [INFO] ------------------------------------------------------------------------
15:58:51 [INFO] Total time: 24.330 s
15:58:51 [INFO] Finished at: 2018-12-25T15:58:51+08:00
15:58:51 [INFO] Final Memory: 23M/443M
15:58:51 [INFO] ------------------------------------------------------------------------
15:58:51 Finished: SUCCESS
(可选)创建多模块工程的Jenkins任务
如果您需要创建多模块工程的Jenkins任务,您可以参考以下内容设置。
创建多模块工程的Jenkins任务和步骤三:创建Jenkins任务的第5步基本相同,只需要修改调用顶层Maven目标。如果工程为多模块工程,想在Jenkins中部署子模块的话,那么需要在父模块中调用mvn clean install命令,然后在子模块中调用mvn clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkit_package=toolkit_package.yaml -Dtoolkit_deploy=toolkit_deploy.yaml命令。参数的具体说明,请参见通过Maven插件自动部署应用。
以Demo工程为例的工程结构如下。
sh-3.2# tree -L 1 carshop
carshop
├── detail
├── itemcenter
├── itemcenter-api
└── pom.xml
其中,detail、itemcenter、itemcenter-api为子模块,如果您想部署itemcenter模块的话,需要在父工程中设置一个clean install构建目标,然后在itemcenter模块中设置clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkit_package=toolkit_package.yaml -Dtoolkit_deploy=toolkit_deploy.yaml构建目标。
在第二个构建步骤中,将 POM 设置为 itemcenter/pom.xml 以指定子模块。