TSF 应用可以使用 Jenkins 构建持续集成方案。
准备工作
在开始持续集成之前,需要完成下述的准备工作。
- 参考 【使用 Python 脚本部署应用】 获取部署脚本及使用方法的说明。
- 安装 【Jenkins】,确保 Jenkins 安装机器上的 Python 不低于2.7.14版本,并已安装 PIP 等 Python 包管理工具。
- 在 TSF 平台创建了 [虚拟机应用部署组] 或 【容器应用部署组】。
安装和配置 Jenkins
在 【Jenkins 官网】 下载安装 Jenkins。
安装 Maven 并配置 TSF 私服地址,详情请参见 【SDK 下载】。
在 Jenkins 控制台的菜单栏中,选择【系统管理】>【插件管理】,安装 Maven Integration plugin 插件(已安装请忽略)。
创建 Jenkins 项目4.1 在 Jenkins 首页左侧导航栏中单击【新建】,创建 Jenkins 任务,并选择构建一个自由风格的软件项目。

4.2 在源码管理页面中选择 Git,并设置相关参数。
Repository URL:您的项目的 Git 协议地址。
Credentials:安全凭证,选择无(前提是运行 Jenkins 软件的用户的 SSH RSA 公匙已添加到该 Git 项目所在的 GitLab 或 GitHub 中,否则这里会报错)或者添加用户名密码。


4.3 单击【构建触发器】页签,勾选【Build when a change is pushed to GitLab】。 GitLab webhook URL 中的 IP 要确保能通过 GitLab 访问。

4.4 单击【构建环境】页签,勾选【Add timestamps to the Console Output】,为控制台输出的信息添加时间戳。

4.5 单击【构建】页签,然后单击【增加构建步骤】,选择【Invoke top-level Maven targets】。

目标:填入 clean package (如有其它参数,请根据实际情况填入)

4.6 单击构建页签,然后单击增加构建步骤,选择 Execute shell

命令中填入 应用部署准备 步骤中准备好的 Shell 命令 i. 虚拟机如下:
python2.7.14 upload_virtual_machine_deploy.py ./consumer-demo/target/consumer-demo-1.10.0-RELEASE.jar application-qab76pxv v001 1300555551 group-gvk5pbdv '-Xms128m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m'

ii.容器如下
python2.7.14 upload_container_deploy.py group-zvw397wa v1

4.7 配置 GitLab 所需权限 i. 管理Jenkins > Configure Global Security 勾选 匿名用户具有可读权限

取消防止跨站点请求伪造

ii. 管理Jenkins > 系统配置 取消 Enable authentication for '/project' end-point

配置 GitLab 的 Web Hook,实现自动构建5.1 项目 > Settings > Integrations 进入添加webhook界面

5.2 将 4.3 中Jenkins产生的GitLab webhook URL填入URL,其他选项使用默认设置,点击"Add webhook"。

5.3 测试 WebHook

成功如图

如出现 403 异常,请检查 4.7 配置。

配置正确后,进行下一步操作(提交变更到 GitLab)
提交变更到 GitLab
如果上述步骤配置正确,这次提交会触发一次 GitLab Hook。 Jenkins 在接受到这个 Hook 后会构建您的 Maven 项目,并在构建过程中触发 Python 脚本自动部署 TSF 应用。
虚拟机提交部署成功输出的日志信息(Build Number > 控制台输出)。
15:12:40 + python2.7.14 upload_virtual_machine_deploy.py ./consumer-demo/target/consumer-demo-1.10.0-RELEASE.jar application-qab76pxv v001 1300555551 group-gvk5pbdv '-Xms128m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m' 15:12:41 POST 15:12:41 / 15:12:41 15:12:41 content-type:application/json 15:12:41 host:tsf.tencentcloudapi.com 15:12:41 15:12:41 content-type;host 15:12:41 0c2f4a50b1dc4df621a84d1731ec07cbd756ac04b1f4853fa792c5dbcf104f28 15:12:41 TC3-HMAC-SHA256 15:12:41 1576739561 15:12:41 2019-12-19/tsf/tc3_request 15:12:41 46cdc18f96456edef21e4b01e787030d62ce54bb7b300994fed4d5d473709701 15:12:41 1d501d695675696fef1c2b2576bb21f42f6f31f55f07c7b27c5ca051d20f242e 15:12:41 TC3-HMAC-SHA256 Credential=AKIDXXXXXXXXXXXXX2rwsp/2019-12-19/tsf/tc3_request, SignedHeaders=content-type;host, Signature=1d501d695675696fef1c2b2576bb21f42f6f31f55f07c7b27c5ca051d20f242e 15:12:41 {"Response":{"RequestId":"0b6aa4ee-38fe-4782-97e4-be1061e7cdb1", "Result":{"Content":[{"PkgId":"pkg-f51038e0","PkgName":"consumer-demo-1.10.0-RELEASE.jar","PkgType":"fatjar","PkgVersion":"v001","PkgDesc":"","UploadTime":"2019-12-18 11:03:26","Md5":"4ad6fabc1234567896e1d","PkgPubStatus":1}],"TotalCount":1}}} 15:12:41 [INFO] application-qab76pxv has uploaded version v001, no need upload 15:12:41 POST 15:12:41 / 15:12:41 15:12:41 content-type:application/json 15:12:41 host:tsf.tencentcloudapi.com 15:12:41 15:12:41 content-type;host 15:12:41 99f3e6ddeaf00f7b64315835fdd6f29d7a0a5520743184c21a43d8a609d6891a 15:12:41 TC3-HMAC-SHA256 15:12:41 1576739561 15:12:41 2019-12-19/tsf/tc3_request 15:12:41 e5ebc373c1c432910ca0110e48f1fe4cf29ffcdedc21dc79dd59a99bf802ea23 15:12:41 73e21ed01f4ad54668e94a2839d6de17c07e6188e1ff9e176452b80fb776be15 15:12:41 TC3-HMAC-SHA256 Credential=AKIDXXXXXXXXXXXXX2rwsp/2019-12-19/tsf/tc3_request, SignedHeaders=content-type;host, Signature=73e21ed01f4ad54668e94a2839d6de17c07e6188e1ff9e176452b80fb776be15 15:12:41 200 15:12:41 {"Response":{"RequestId":"86c93d7e-ee44-4c8d-8d34-537a0dbe6871","Result":{"TaskId":"task-76l2v6m7"}}} 15:12:41 Finished: SUCCESS
您可以在【[TSF 控制台] 】>【应用管理】中,单击目标应用的 ID,进入应用详情页的【变更记录】中,查看虚拟机部署变更记录。
容器部署成功日志信息
16:32:28 + python2.7.14 upload_container_deploy.py group-zvw397wa v1 16:32:31 {"Result": {"InstanceNum": 1, "NamespaceName": "zsf-test-jenkins-docker_default", "ApplicationType": "C", "CurrentNum": 1, "MicroserviceType": "N", "Status": "Running", "LbIp": "", "MemRequest": "128", "ClusterId": "cls-52tydz2q", "UpdateIvl": 0, "Envs": [{"Name": "tsf_consul_ip", "Value": "169.254.0.77"}, {"Name": "tsf_consul_port", "Value": "8000"}, {"Name": "PATH", "Value": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"}, {"Name": "workdir", "Value": "/app/"}, {"Name": "jar", "Value": "consumer-demo-1.10.0-RELEASE.jar"}, {"Name": "tsf_app_id", "Value": "1300555551"}, {"Name": "tsf_token", "Value": "VjCCe9gixVmdeBfTpM74PikHFfU8ZmZVL7Z4FMGvXjI="}, {"Name": "tsf_application_id", "Value": "application-byx3zwdy"}, {"Name": "tsf_cluster_id", "Value": "cls-52tydz2q"}, {"Name": "tsf_namespace_id", "Value": "namespace-py5e9zjy"}, {"Name": "tsf_group_id", "Value": "group-zvw397wa"}, {"Name": "tsf_prog_version", "Value": "v1"}, {"Name": "tsf_region", "Value": "ap-chengshi1"}, {"Name": "tsf_ratelimit_master_ip", "Value": "169.254.0.77"}, {"Name": "tsf_ratelimit_master_port", "Value": "7000"}], "TagName": "v1", "ClusterIp": "172.18.255.122", "MemLimit": "256.00", "CpuLimit": "0.50", "ApplicationId": "application-byx3zwdy", "ApplicationName": "zsf-tsf-docker", "ProtocolPorts": [{"Protocol": "TCP", "TargetPort": 80, "Port": 80}], "UpdateType": 0, "Server": "ccr.ccs.tencentyun.com", "GroupName": "zsf-test-docker-consumer", "NodePort": 30215, "AccessType": 2, "ClusterName": "zsf-test-jenkins-docker", "NamespaceId": "namespace-py5e9zjy", "Reponame": "tsf_100011913960/zsf-tsf-docker", "CpuRequest": "0.25", "Message": "", "CreateTime": "2019-12-17 15:09:08", "GroupId": "group-zvw397wa"}, "RequestId": "aff9a2b6-24f5-44b1-8173-112a6a24b581"} 16:32:31 {"Result": true, "RequestId": "263c8a64-1bb1-427e-80e2-870aa0bc7d68"} 16:32:31 Finished: SUCCESS
您可以在【TSF 控制台】>【应用管理】中,单击目标应用的 ID,进入应用详情页的【变更记录】中,查看容器部署变更记录。

- 容器部署成功日志信息 如果部署失败,需要分析 Jenkins console 日志。

