使用镜像构建和部署功能进行完整的CI/CD流程https://help.aliyun.com/zh/fc/the-image-is-built-and-pushed-to-the-image-repository?spm=a2c4g.11186623.0.i133
推荐您使用镜像构建任务模板以及自定义任务模板完成构建、部署的自动化流程。
每次CI过程都推荐为镜像打上新的Tag,并且Tag和本次Commit关联。
CD过程中使用全新的Tag部署。
通过下面的示例可以完成上述过程。
对于构建任务,使用流水线YAML预置变量<% .git.shortCommitId %>作为镜像的Tag,该变量表示本次Git操作中HEAD Commit的CommitId的前7位,例如image: registry-vpc.cn-hangzhou.aliyuncs.com/demo/demo-image:<% .git.shortCommitId %>。流水线YAML内置变量,请参见使用YAML文件描述流水线。
对于部署任务,注入一个环境变量GIT_COMMIT,变量的值为<% .git.shortCommitId %>。
修改s.yaml,将自定义镜像的Tag改成${env(GIT_COMMIT)},表示引用该环境变量。通过这种变量赋值,就可以让s.yaml动态修改部署镜像Tag。
完整示例如下。
流水线YAML
```# 提交流水线执行。
kind: Pipeline
name: "p-<% .git.shortCommitId %>-<% .currentTimestampMs %>"
description: 'demo pipeline'
labels:
myLabel: my-cicd-example
spec:
context:
data:
appName: <% .appName %>
templateSpec:
context:
data:
envName: <% .envName %>
deployFile: s.yaml
tasks:
# 镜像构建。
- name: build-image
context:
data:
displayName: 镜像构建
enable: true
build: # 镜像构建。
dockerfile: code/Dockerfile
# 使用 <% .git.shortCommitId %> 将tag和commit相关联。
image: registry-vpc.cn-hangzhou.aliyuncs.com/demo/demo-image:<% .git.shortCommitId %>
taskTemplate: build-image-task
runAfters: []
# 部署。
- name: build-and-deploy
context:
data:
displayName: 部署
enable: true
# 动态注入本次部署的环境变量。
envVars:
GIT_COMMIT: <% .git.shortCommitId %>
steps:
- plugin: "@serverless-cd/checkout"
- plugin: "@serverless-cd/s-setup"
- plugin: "@serverless-cd/s-deploy"
taskTemplate: serverless-runner-task
runAfters:
- name: build-push
```
要在s.yaml
文件中自定义镜像,你需要按照以下格式设置image
字段:
functions:
your-function-name:
handler: index.handler
image: your-image-repository-url:your-image-tag
这里,your-function-name
是你的函数名称,index.handler
是你的入口点函数,your-image-repository-url:your-image-tag
是你自定义镜像的仓库URL和标签。
确保你的自定义镜像包含了所有必要的依赖项,并且已经构建和推送到容器镜像仓库中。然后使用fun deploy
命令部署你的函数。
要在函数计算中使用自定义镜像,您需要在项目目录中的s.yaml文件里进行配置。首先,找到s.yaml文件,这是Serverless Devs项目的配置文件。然后,通过YAML规范设置s.yaml文件的参数信息来配置函数资源。
具体来说,您可以在s.yaml文件中定义自定义环境,例如使用Docker镜像作为基础镜像。对于部署过程,您可以使用s deploy
的相关命令将s.yml文件内的配置部署到函数计算服务。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。