Google Cloud Run与GitLab直接连接及持续部署配置咨询
Google Cloud Run与GitLab直接连接及持续部署配置咨询
嗨,我完全懂你现在的困惑——Cloud Run控制台的代码源选项里确实只默认显示GitHub和BitBucket,想直接配置GitLab作为源仓库做持续部署,得绕开这个界面限制,不过有两种靠谱的方案可以实现,我给你详细拆解下:
方案一:通过Cloud Build中间层联动GitLab与Cloud Run
Cloud Build原生支持GitLab触发器,我们可以用它作为桥梁,实现GitLab代码推送后自动部署到Cloud Run:
- 第一步,先在Google Cloud控制台启用Cloud Build API和Cloud Run Admin API,这两个是基础服务,必须开启。
- 第二步,进入Cloud Build的「触发器」页面,点击「创建触发器」,在源代码仓库类型里选择「GitLab」,跟着提示完成GitLab账号/项目的授权连接。
- 第三步,配置触发规则,比如设置成每次
main分支有代码推送就触发构建。 - 第四步,编写
cloudbuild.yaml构建配置文件(放在GitLab项目根目录),示例内容如下:
steps: - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/your-service-name', '.'] images: - 'gcr.io/$PROJECT_ID/your-service-name' deploy: cloudrun: service: your-service-name region: us-central1 # 替换成你实际使用的Cloud Run区域
- 第五步,保存触发器后,每次GitLab仓库有代码提交推送,Cloud Build就会自动构建镜像,并把镜像部署到指定的Cloud Run服务上。
方案二:用GitLab CI/CD直接部署到Cloud Run
如果不想依赖Cloud Build,也可以完全在GitLab的CI/CD体系里完成构建和部署:
- 第一步,在Google Cloud创建一个服务账号,给它分配Cloud Run Admin和Storage Admin的权限,然后下载该账号的JSON密钥文件。
- 第二步,进入GitLab项目的「设置」-「CI/CD」-「变量」,添加一个名为
GOOGLE_APPLICATION_CREDENTIALS的变量,值就是刚才下载的JSON密钥内容。 - 第三步,在GitLab项目根目录创建
.gitlab-ci.yml文件,示例配置如下:
stages: - build - deploy build: stage: build image: docker:latest services: - docker:dind before_script: - docker login -u _json_key -p "$GOOGLE_APPLICATION_CREDENTIALS" https://gcr.io script: - docker build -t gcr.io/your-project-id/your-service-name . - docker push gcr.io/your-project-id/your-service-name deploy: stage: deploy image: google/cloud-sdk:latest script: - echo "$GOOGLE_APPLICATION_CREDENTIALS" > key.json - gcloud auth activate-service-account --key-file key.json - gcloud config set project your-project-id - gcloud run deploy your-service-name --image gcr.io/your-project-id/your-service-name --region us-central1 --platform managed --allow-unauthenticated # 可根据需求调整参数,比如去掉--allow-unauthenticated设置私有服务
- 第四步,提交这个配置文件到GitLab,之后每次代码推送,GitLab CI就会自动执行构建和部署流程,把服务推到Cloud Run。
另外补充下:Cloud Run控制台的直接代码源集成目前确实只支持GitHub和BitBucket,所以官方推荐用上面两种间接方式来实现GitLab的持续部署,这两种方案都是稳定可行的,你可以根据自己的偏好选择~
备注:内容来源于stack exchange,提问作者attgua
相关产品推荐
相关产品推荐

