文档中心>微服务平台 TSF>操作指南>持续集成>使用 Jenkins 创建持续集成

使用 Jenkins 创建持续集成

最近更新时间:2023-10-18 14:36:02

我的收藏
TSF 应用可以使用 Jenkins 构建持续集成方案。

准备工作

在开始持续集成之前,需要完成下述的准备工作。
1. 参见 使用 Python 脚本部署应用 获取部署脚本及使用方法的说明。
2. 安装 Jenkins ,确保 Jenkins 安装机器上的 Python 不低于 2.7.14 版本,并已安装 PIP 等 Python 包管理工具。
3. 在 TSF 平台创建了 部署组

安装和配置 Jenkins

1. 进入 Jenkins 官网 下载安装 Jenkins。
2. 安装 Maven 并配置 TSF 私服地址,请参见 下载 Maven
3. 在 Jenkins 控制台的菜单栏中选择系统管理 > 插件管理,安装 Maven Integration plugin 插件,如已安装请忽略。
4. 创建 Jenkins 项目
4.1 在 Jenkins 首页左侧导航栏中单击新建,创建 Jenkins 任务,并选择构建一个自由风格的软件项目。
create jenkins item


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


add username


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


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


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

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


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

命令中填入应用部署准备 步骤中准备好的 Shell 命令。
4.6.1 虚拟机如下:
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'

python script


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

containe shell


4.7 
配置 GitLab 所需权限:

4.7.1 管理 Jenkins > Configure Global Security 勾选 匿名用户具有可读权限。
add read permission

取消防止跨站点请求伪造。
cancel cors


4.7.2 管理 Jenkins > 系统配置 取消 Enable authentication for '/project' end-point。
cancel end point


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


5.2 4.3 中 Jenkins 产生的 GitLab webhook URL 填入 URL,其他选项使用默认设置,单击"Add webhook"。
gitlib add jenkens url


5.3 测试 WebHook。
test webhook

成功如图:
hook execute success

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



配置正确后,提交变更到 GitLab

如果上述步骤配置正确,这次提交会触发一次 GitLab Hook。 Jenkins 在接受到这个 Hook 后会构建您的 Maven 项目,并在构建过程中触发 Python 脚本自动部署TSF应用。
1. 虚拟机提交部署成功输出的日志信息(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=AKIDyqY82tg6GI9pVqR1xlQtAN2XtOn2rwsp/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":"4ad6f32f20c1d2dcd60575fa50b16e1d","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=AKIDyqY82tg6GI9pVqR1xlQtAN2XtOn2rwsp/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 平台可以查看虚拟机部署变更记录。



2. 容器部署成功日志信息。
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-guangzhou"}, {"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 平台可以查看容器部署变更记录。



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