代码托管
>>>>
云函数scf init 命令可以进行项目初始化操作。基于Git仓库模板项目可以快速创建出一个简单的模板项目,进行进一步的开发。
>>>>
云函数通过 native invoke 子命令完成本地触发运行。当前支持nodejs和python语言开发的云函数在本地进行调试和调用。
>>>>
CODING企业版提供用户代码托管的平台支持Git代码仓库,其控制台支持代码浏览、分支管理、发布和标签管理等功能。
CODING中一个项目对应一个 Git代码仓库,创建 Git 仓库前需要先创建项目,项目地址即是Git 仓库的地址。项目地址分为 HTTPS 和 SSH 两种方式。创建项目时可以指定代码模板来创建。
CODING创建的Git仓库项目可以在本地使用Git工具做相关分支、标签等管理。可以在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 里的流水线自动化执行一次。
>>>>
在持续集成菜单配置持续集成的触发机制,默认配置代码更新时自动执行。也可以配置推送新标签,推送新分支等触发机制。
>>>>
在CODING控制台配置持续集成的详细过程,也是在编排流水线(pipeline)。默认使用的时的是“图形化编辑器”,提供了可视化、易上手的编排工具。左边展示的是流水线,按照简易模板分成了“开始”、“检出”、“构建”、“测试”以及“部署”共 5 个阶段。流水线上每一个阶段具体的执行命令都可以自定义,选中某个阶段,可以对选中的阶段进行更详细的步骤配置。本实践自定义jenkins file的方式定义持续集成的流程。
定义持续集成的Jenkins pipline,依赖Serverless本地开发工具提供的本地代码运行、打包以及发布的能力。使用Serverless本地开发工具需要用户提供腾讯云认证的相关信息,将认证的相关信息通过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.}
总结
当前实践利用了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/
本文分享自微信公众号 - ServerlessCloudNative(ServerlessGo),作者:刘莹
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2019-07-17
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句