这里我们使用 Coding 进行部署。
- 前置操作请参考【Web Function】云函数 与 DevOps
https://cloud.tencent.com/developer/article/1845071
首先我们选定两个模板
模板会自动创建鉴权文件,不用我们配置鉴权。
- 构建镜像并推送至 TCR 个人版
![](https://cdn.static.attains.cn/app/developer-bbs/upload/1723272310938135412.jpeg)
- 基于 Serverless 快速部署静态页面
![](https://cdn.static.attains.cn/app/developer-bbs/upload/1723272311181679553.jpeg)
这里我们使用 Serverless 为基础 Jenkinsfile,他会自动帮我们申请部署权限。
复制 tcr 模板的内容到 serverless 模板内
代码语言:javascript
复制
stage('构建镜像') {
steps {
// 确保仓库中有可用的 Dockerfile
sh "docker build -t ${DOCKER_REPOSITORY_NAME}:${DOCKER_IMAGE_NAME} ."
}
}
stage('推送镜像') {
steps {
script {
docker.withRegistry("https://${DOCKER_REGISTRY_HOSTNAME}", "${DOCKER_REGISTRY_CREDENTIAL}") {
docker.image("${DOCKER_REPOSITORY_NAME}:${DOCKER_IMAGE_NAME}").push()
}
}
}
}
tcr 的环境变量
代码语言:javascript
复制
environment {
DOCKER_REGISTRY_HOSTNAME = "${TCR_REGISTRY_HOSTNAME}"
DOCKER_REGISTRY_CREDENTIAL = "${TCR_REGISTRY_CREDENTIAL}"
DOCKER_REPOSITORY_NAME = "${TCR_NAMESPACE_NAME}/${TCR_REPOSITORY_NAME}"
DOCKER_IMAGE_NAME = "${TCR_IMAGE_NAME}"
}
现在我们可以看到构建镜像和推送镜像内容
![](https://cdn.static.attains.cn/app/developer-bbs/upload/1723272311627564666.png)
下一步,我们获取镜像链接
![](https://cdn.static.attains.cn/app/developer-bbs/upload/1723272311831878096.png)
脚本内容如下
代码语言:javascript
复制
env.sha=sh(script: "docker inspect --format='{{index .RepoDigests 0}}' ${DOCKER_REPOSITORY_NAME}:${DOCKER_IMAGE_NAME} | cut -d'@' -f2",returnStdout:true).trim()
env.sls_image_url = sh(script: "echo ${DOCKER_REGISTRY_HOSTNAME}/${DOCKER_REPOSITORY_NAME}:${DOCKER_IMAGE_NAME}@$sha",returnStdout:true).trim()
sh 'echo image url $sls_image_url'
配置 yml 文件
![](https://cdn.static.attains.cn/app/developer-bbs/upload/1723272312468640625.png)
对于 slsplus 使用的是压缩json字符串。内容对比如下
如需其他配置,请查阅
https://github.com/serverless-components/tencent-scf/blob/master/docs/configure.md
![](https://cdn.static.attains.cn/app/developer-bbs/upload/1723272313412255332.jpeg)
将我们的镜像配置添加进去
![](https://cdn.static.attains.cn/app/developer-bbs/upload/1723272313764720136.png)
最后核查我们的环境变量。这里我们需要 tcr 的环境变量,也需要 serverless的环境变量。