如何通过Azure DevOps流水线将GitHub Enterprise仓库master分支文件复制到Linux VM
可行实现方案
方案1:通过SSH密码认证直接传输文件(无需额外资源、无需配置私钥)
你之前了解的SSH任务默认推荐私钥认证,但实际Azure DevOps官方提供的通过SSH复制文件任务原生支持用户名+密码认证,不需要在目标VM提前配置任何密钥,仅需VM开启SSH密码登录权限即可:
- 先在流水线中添加检出任务,拉取GitHub Enterprise仓库master分支的所有代码到流水线构建目录
- 在Azure DevOps项目的「服务连接」中新建SSH连接,填写目标VM的IP、SSH端口、登录用户名,认证方式选择密码,输入VM的登录密码后保存连接
- 流水线中添加「通过SSH复制文件」任务,选择刚才创建的SSH服务连接,源文件夹选择
$(Build.SourcesDirectory)(即代码检出的根目录),内容填写**/*(匹配所有文件和子目录),目标文件夹填写Linux VM上的指定目录即可。
方案2:目标VM主动拉取代码(配置更简单、传输速度更快)
如果你的Linux VM可以正常访问GitHub Enterprise,可直接省略文件中转传输步骤,让VM主动拉取代码:
- 首次操作时登录目标VM,在你需要的指定目录下执行
git clone <GitHub Enterprise仓库地址> .拉取完整master分支代码 - 在VM上创建执行脚本
/opt/pull_code.sh,内容如下:
#!/bin/bash cd /你的/目标/目录 git fetch origin git reset --hard origin/master
执行chmod +x /opt/pull_code.sh给脚本添加执行权限
3. 流水线中仅需添加1个SSH任务(同样用密码认证的SSH服务连接),执行命令/opt/pull_code.sh即可完成所有文件的同步。
额外优化(可选)
如果你的Linux VM是Azure托管资源,还可以用Azure CLI run-command功能执行拉取操作,不需要将VM的SSH端口暴露到公网,安全性更高:
- 在Azure DevOps中配置Azure Resource Manager服务连接
- 流水线中添加Azure CLI任务,执行命令:
az vm run-command invoke -g <VM资源组名称> -n <VM名称> --command-id RunShellScript --scripts "cd /你的/目标/目录 && git fetch origin && git reset --hard origin/master"
内容的提问来源于stack exchange,提问作者Noor Basha Shaik
相关产品推荐
相关产品推荐

