DroneCI 使用SSH协议Git操作¶
概要: 使用自定义的Docker镜像实现DroneCI代码库的ssh git操作
创建时间: 2022.10.16 21:50:40
更新时间: 2022.10.16 22:28:20
DroneCI默认下载代码库的方式¶
在DroneCI的官方文档中,指明了其下载代码库的方式是通过 https
而不是 ssh
,但是这样做有以下弊端
- 不能下载私有代码库
- 没有直接推送代码库的权限
- 不能见出Git子模块内容
虽然Drone提供了其使用的默认git插件,但此镜像依然不支持通过 ssh
协议下载代码,所以需要使用其他的Docker镜像解决此问题
使用ssh下载代码库¶
警告
如果要使用自定义的ssh操作代码库,那么首先要将DroneCI自带的 clone step
关闭
Docker镜像选取¶
Git的Docker镜像选用的是vmware官方出品的 bitnami/git ,比较靠谱,然后还需要解决如下问题
- 如何传入自己的ssh私钥文件?
- 如何免除ssh首次握手的交互式问答?
- 如何检出到本次构建的commit?
ssh密钥注入¶
在 DroneCI 使用SCP插件上传制品 中,我们可以通过把原私钥文件的换行改为换行符 \n
放到DroneCI的Secrets
中 ,然后通过 from_secret 的方式写入并更改权限即可
ssh文件扫描¶
假定目标代码库托管的主机名是 github.com
,那么使用如下的命令进行扫描
Bash | |
---|---|

如果存在端口,命令扩展为
Bash | |
---|---|
提示
对 github.com
,gitee.com
,gitlab.com
等网站,默认端口号是22
通过如上命令可以获取到主机的ssh远端信息,注入到 $HOME/.ssh/known_hosts
后即可免除首次握手的交互式操作
Bash | |
---|---|
检出到当前构建的commit¶
使用DroneCI的内置环境变量 DRONE_COMMIT
即可
Bash | |
---|---|
其他git操作¶
在使用 bitnami/git 创建的容器后,我们本身已经在一个完整的Git环境中,并且拥有ssh私钥,其他的git操作,理论上在本地能完成的在容器内也可以完成
如初始化/更新Git子模块
Bash | |
---|---|