Azure Pipeline中推送Git当前分支到外部远程仓库的配置问题
问题1:外部Git仓库(EXT)访问凭证配置步骤
因为你用的是SSH协议的仓库地址,按以下方式配置即可,不需要硬编码密钥到脚本中:
- 本地生成一对SSH密钥,将公钥添加到EXT仓库所在Azure DevOps账号的用户SSH密钥配置中,确保该密钥有EXT仓库的读写权限
- 回到当前流水线所属的Azure DevOps项目,进入「管道」-「库」-「安全文件」,将生成的私钥文件上传,按需开启全流水线授权
- 流水线中添加「下载安全文件」任务,选择你上传的私钥文件,记录该任务输出的私钥文件路径变量(例如
$(SSH_KEY_PATH)) - 在执行Git操作的Command Line任务最开头,添加以下命令配置SSH运行环境:
mkdir -p ~/.ssh cp $(SSH_KEY_PATH) ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan ssh.dev.azure.com >> ~/.ssh/known_hosts
问题2:完善后的同步脚本
你遇到的分离头指针、远程重复添加、冲突处理等问题都可以在脚本中统一处理,不需要处理冲突的场景下直接使用--ff-only参数即可,非快进合并时会自动报错终止流水线,完善后的脚本如下:
# 清理已存在的EXT远程,避免重复添加报错 git remote remove EXT || true # 添加外部远程仓库 git remote add EXT git@ssh.dev.azure.com:v3/EXT/EXT-Project/ext-web-app # 拉取所有远程的最新分支信息 git fetch origin git fetch EXT # 强制重置本地develop分支并切换,解决分离头指针问题 git switch -C develop origin/develop # 合并EXT远程develop最新提交,非快进直接失败 git merge EXT/develop --ff-only # 推送到EXT远程的develop分支 git push EXT develop:develop # 保留原有推送到当前仓库master分支的逻辑 git push origin develop:master --force
如果你的需求是同步流水线触发分支的内容到EXT,不需要固定用develop分支,把切换分支的步骤去掉,直接操作HEAD即可:
git remote remove EXT || true git remote add EXT git@ssh.dev.azure.com:v3/EXT/EXT-Project/ext-web-app git fetch EXT git merge EXT/develop --ff-only git push EXT HEAD:develop git push origin HEAD:master --force
内容的提问来源于stack exchange,提问作者Cedric Arnould
相关产品推荐
相关产品推荐

