如何使用Cloud Build Trigger和cloudbuild.yaml将目录部署到FTP/SSH服务器
Cloud Build 部署目录到FTP/SSH服务器完整配置
你已经完成了待上传文件列表的生成,以下分两种部署场景补充后续配置步骤,所有敏感参数请统一在触发器配置中设置为变量,不要硬编码在yaml文件中。
方案1:部署到SSH/SFTP服务器
使用预装rsync和ssh的镜像完成批量同步,需要提前在触发器中配置以下变量:
- 普通变量:
_SSH_HOST(服务器地址)、_SSH_USER(SSH用户名)、_SSH_TARGET_DIR(服务器目标目录) - 秘密变量:
_SSH_PRIVATE_KEY(SSH登录私钥)
完整cloudbuild.yaml示例:
steps: # 你已有的生成待上传文件列表的步骤 - name: 'ubuntu' entrypoint: 'bash' args: - '-c' - |- find $_UPLOAD_DIRNAME -exec echo {} >> batch.txt \; cat ./batch.txt env: ... # 配置SSH登录权限 - name: 'ubuntu' entrypoint: 'bash' args: - '-c' - |- mkdir -p /root/.ssh chmod 700 /root/.ssh echo "$_SSH_PRIVATE_KEY" > /root/.ssh/id_rsa chmod 600 /root/.ssh/id_rsa echo -e "Host *\n StrictHostKeyChecking no\n UserKnownHostsFile /dev/null" > /root/.ssh/config secretEnv: ['_SSH_PRIVATE_KEY'] # 按文件列表同步到SSH服务器 - name: 'instrumentisto/rsync-ssh' entrypoint: 'bash' args: - '-c' - |- rsync -av --files-from=./batch.txt ./ $_SSH_USER@$_SSH_HOST:$_SSH_TARGET_DIR/ env: - '_SSH_USER=$_SSH_USER' - '_SSH_HOST=$_SSH_HOST' - '_SSH_TARGET_DIR=$_SSH_TARGET_DIR'
方案2:部署到FTP服务器
使用lftp工具完成批量上传,需要提前在触发器中配置以下变量:
- 普通变量:
_FTP_HOST(FTP服务器地址)、_FTP_USER(FTP用户名)、_FTP_TARGET_DIR(服务器目标目录) - 秘密变量:
_FTP_PASS(FTP登录密码)
完整cloudbuild.yaml示例:
steps: # 你已有的生成待上传文件列表的步骤 - name: 'ubuntu' entrypoint: 'bash' args: - '-c' - |- find $_UPLOAD_DIRNAME -exec echo {} >> batch.txt \; cat ./batch.txt env: ... # 安装lftp并执行批量上传 - name: 'alpine' entrypoint: 'ash' args: - '-c' - |- apk add --no-cache lftp echo "open $_FTP_HOST" > ftp_batch.txt echo "user $_FTP_USER $_FTP_PASS" >> ftp_batch.txt echo "cd $_FTP_TARGET_DIR" >> ftp_batch.txt # 如FTP服务器需要SSL连接,删除下一行即可 echo "set ftp:ssl-allow no" >> ftp_batch.txt # 遍历待上传文件生成上传指令 while read -r file; do if [ -f "$file" ]; then echo "mkdir -p $(dirname "$file")" >> ftp_batch.txt echo "put $file -o $file" >> ftp_batch.txt fi done < batch.txt echo "bye" >> ftp_batch.txt lftp -f ftp_batch.txt env: - '_FTP_HOST=$_FTP_HOST' - '_FTP_USER=$_FTP_USER' - '_FTP_PASS=$_FTP_PASS' - '_FTP_TARGET_DIR=$_FTP_TARGET_DIR'
触发器配置注意事项
- 所有变量都可以在触发器配置页面直接添加、修改,无需调整yaml文件内容
- 密码、私钥等敏感信息必须设置为秘密变量,避免明文泄露
- 触发规则可根据需求设置为代码推送到指定分支自动触发,或手动触发
内容的提问来源于stack exchange,提问作者Martin Zeitler
相关产品推荐
相关产品推荐

