云函数提供Serverless本地开发工具,支持本地调试、代码打包、函数发布等功能。CODING 企业版是专为企业打造的软件开发协作平台,提供敏捷开发、代码托管、持续集成等服务。当前CODING企业版平台默认支持代码仓库托管、CI/CD自动化pipline。
本文将介绍如何基于CODING的代码托管、CI /CD pipline功能,结合Serverless本地开发工具的功能,提供云函数的DevOps 能力,完成DevOps 检出、构建、测试、部署等持续集成的自动化流程。
代码托管
>>>>
初始化本地函数
云函数scf init 命令可以进行项目初始化操作。基于Git仓库模板项目可以快速创建出一个简单的模板项目,进行进一步的开发。
>>>>
本地调试和本地调用
云函数通过 native invoke 子命令完成本地触发运行。当前支持nodejs和python语言开发的云函数在本地进行调试和调用。
>>>>
将本地生成的函数推送到CODING代码仓库
CODING企业版提供用户代码托管的平台支持Git代码仓库,其控制台支持代码浏览、分支管理、发布和标签管理等功能。
- 创建项目以及代码仓库
CODING中一个项目对应一个 Git代码仓库,创建 Git 仓库前需要先创建项目,项目地址即是Git 仓库的地址。项目地址分为 HTTPS 和 SSH 两种方式。创建项目时可以指定代码模板来创建。
- 管理项目代码仓库
CODING创建的Git仓库项目可以在本地使用Git工具做相关分支、标签等管理。可以在CODING控制台做版本对比和合并的相关操作。
- 提交初始化项目到CODING对应的代码仓
使用scf cli init命令行初始化的项目,包括项目的模板配置文件template.yaml,以及初始化的云函数的代码,这里只需将云函数的代码推送到CODING创建的仓库中,提交代码之前,需要将项目的模板配置文件template.yaml复制到函数中。
Serverless本地开发工具的本地调试、打包部署等命令依赖模板配置文件template.yaml。将该配置文件放在函数目录内上传到CODING的代码仓库,即可在持续集成的线上环境使用Serverless本地开发工具。
配置代码仓库CI/CD pipline
CODING 持续集成基于Jenkins 提供服务和能力,并做了大量优化工作。配置持续集成所用的脚本为Jenkinsfile。Jenkinsfile 定义了持续集成中的工作流水线(pipeline),实现对步骤的流式化封装和管理。流水线可以顺序执行,也可以并行执行,利用该pipeline可以自动化完成该项目的DevOps持续集成、持续部署的流程。
每一次的目标代码变动,都会触发CODING 持续集成按照 Jenkinsfile 里的流水线自动化执行一次。
>>>>
创建持续集成的任务
在持续集成菜单配置持续集成的触发机制,默认配置代码更新时自动执行。也可以配置推送新标签,推送新分支等触发机制。
>>>>
创建持续集成的pipline
- 定义持续集成的流程
在CODING控制台配置持续集成的详细过程,也是在编排流水线(pipeline)。默认使用的时的是“图形化编辑器”,提供了可视化、易上手的编排工具。左边展示的是流水线,按照简易模板分成了“开始”、“检出”、“构建”、“测试”以及“部署”共 5 个阶段。流水线上每一个阶段具体的执行命令都可以自定义,选中某个阶段,可以对选中的阶段进行更详细的步骤配置。本实践自定义jenkins file的方式定义持续集成的流程。
- 定义持续集成的pipline
定义持续集成的Jenkins pipline,依赖Serverless本地开发工具提供的本地代码运行、打包以及发布的能力。使用Serverless本地开发工具需要用户提供腾讯云认证的相关信息,将认证的相关信息通过pipline环境变量的方式提供。
- Jenkins pipline配置文件
该自定义Jenkins pipline配置文件定义了检出、构建(安装依赖)、测试、部署这些DevOps持续集成流程,最终部署流程将代码压缩包部署到腾讯云函数服务。
1、检出
Checkout该Git仓库项目的代码。这里用户也可以自定义添加代码检查或者安全检查等流程。
2、构建
这里主要针对云函数场景,对nodejs或者python项目安装对应项目的安装依赖。其中,Nodejs项目可以使用npm安装包依赖;Python项目可以使用pip安装相关依赖包。针对go语言等编译性的语言,这里还可以完成编译等工作。
3、测试
项目中可以运行各个项目自己开发的单元测试或者集成测试任务。本实践主要针对云函数本地测试调用函数。
4、部署
云函数完成开发以及持续集成之后,需要将函数代码压缩包部署到云函数服务才能运行。本实践主要是使用 Serverless本地开发工具deploy命令将函数创建到云函数服务。后续Serverless本地开发工具添加了云函数版本发布的命令,这里可以集成云函数新版本的发布。
配置文件:
1. pipeline {
2. agent any
3. stages {
4. stage('检出') {
5. steps {
6. sh 'ci-init'
7. checkout([$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL]]])
8. }
9. }
10. stage('构建') {
11. agent {
12. docker {
13. image 'nikolaik/python-nodejs:latest'
14. args '-v /root:/root'
15. }
16.
17. }
18. steps {
19. echo '安装依赖'
20. dir(path: '/root/workspace') {
21. sh 'npm install'
22. }
23.
24. }
25. }
26. stage('测试') {
27. agent {
28. docker {
29. image 'nikolaik/python-nodejs:latest'
30. args '-v /root:/root'
31. }
32.
33. }
34. steps {
35. sh 'pip install scf'
36. sh 'scf --version'
37. dir(path: '/root/workspace') {
38. sh "scf configure set --region=${env.region} --appid=${env.appid} --secret-id ${env.secretid} --secret-key ${env.secretkey}"
39. sh 'scf native invoke --no-event'
40. }
41.
42. }
43. }
44. stage('部署') {
45. agent {
46. docker {
47. image 'nikolaik/python-nodejs:latest'
48. args '-v /root:/root'
49. }
50.
51. }
52. steps {
53. sh 'pip install scf'
54. sh 'scf --version'
55. dir(path: '/root/workspace') {
56. sh "scf configure set --region=${env.region} --appid=${env.appid} --secret-id ${env.secretid} --secret-key ${env.secretkey}"
57. sh 'scf package --template-file ./template.yaml'
58. sh 'scf deploy -f --template-file ./deploy.yaml'
59. }
60.
61. }
62. }
63. }
64.}
- 持续集成运行状态
1、检出:显示了该项目代码检出的结果。
2、构建:本项目是Nodejs项目,此任务主要是使用npm工具安装项目依赖,本次构建安装依赖成功。
3、测试:项目测试是通过Serverless本地开发工具调用函数来测试函数是否能够成功的运行。
4、部署:本次构建部署是调用Serverless本地开发工具的deploy命令将函数部署到云函数中,后续部署可以考虑集成函数版本发布的能力。
总结
当前实践利用了CODING平台默认支持代码仓库托管、CI/CD自动化pipline的功能来实现云函数的DevOps流程。后续可以考虑结合CODING企业版制品库,构建函数压缩包到制品库,利用制品库的版本管理能力发布到云函数对应的版本。
文章参考
云函数:https://cloud.tencent.com/product/scf
CODING企业版:https://coding.net/
Serverless本地开发工具:
https://cloud.tencent.com/document/product/583/33447
Jenkins 语法:
https://jenkins.io/zh/doc/book/pipeline/syntax/