GitLab CI集成自动化部署到云端的核心是打通代码提交流水线与云平台部署能力,关键在于安全连接、凭证管理与可靠执行:1.按目标类型选路径——Kubernetes用kubectl/Helm、ECS等VM用SSH/rsync、托管服务用对应CLI;2.所有敏感凭证(SSH私钥、API密钥、KUBE_TOKEN等)必须通过GitLab CI变量安全注入,禁用硬编码;3.典型ECS部署需在deploy阶段配置SSH密钥、rsync同步及远程命令执行,并遵循非root用户、Docker executor、set -e错误中断等最佳实践。

GitLab CI 集成自动化部署到云端,核心是把代码提交触发的流水线,与目标云平台的部署能力打通。关键不在“能不能”,而在于“用什么方式连、怎么安全传、如何可靠执行”。
明确部署目标类型再选路径
不同云平台适配方式差异明显:
- Kubernetes 集群(如阿里云 ACK、腾讯云 TKE)→ 用
kubectl或 Helm 命令直接操作资源清单 - 虚拟机类云服务器(如阿里云 ECS、腾讯云 CVM)→ 通过 SSH 远程执行命令或文件同步(scp/rsync)
- 托管服务(如腾讯云静态托管、阿里云函数计算、Google App Engine)→ 调用对应 CLI 工具(如
tcb hosting:deploy、gcloud app deploy) - 平台型 PaaS(如 Dokku、Heroku)→ 用 Git 推送或平台专属 API
必须配置的安全凭证管理
所有云端操作都依赖敏感凭据,绝不能硬编码在 .gitlab-ci.yml 中:
- SSH 私钥 → 设为 GitLab 项目的 File 类型 CI 变量(如
SSH_PRIVATE_KEY),在 job 中写入~/.ssh/id_rsa并设权限600 - API 密钥(SecretId/SecretKey、token、kubeconfig)→ 设为 Masked + Protected 变量,仅限 protected 分支读取
- Kubernetes 认证信息(
KUBE_TOKEN、KUBE_CA、KUBE_SERVER)→ 从集群获取后存为变量,避免明文暴露
典型部署阶段写法要点
以阿里云 ECS + Vue 项目为例,.gitlab-ci.yml 中 deploy 阶段常见结构:
deploy:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache openssh-client rsync
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
script:
- rsync -avz --delete dist/ $EC_USER@$EC_HOST:/var/www/myapp/
- ssh $EC_USER@$EC_HOST "cd /var/www/myapp && npm install --production && pm2 reload ecosystem.config.js"
only:
- master提升稳定性的几个实操细节
- 使用
cache缓存 node_modules 或 pip 包,加快 build 阶段 - 用
artifacts传递构建产物(如dist/),避免重复构建 - 在
script开头加set -e,任一命令失败即中断 pipeline - 非 root 用户部署:ECS 上创建专用用户,赋予必要目录权限,禁用密码登录
- Runner 推荐用 Docker executor,隔离环境、便于复用镜像
不复杂但容易忽略。


















