drone默认是使用http/https协议拉取代码的。
因为一些未知的原因,阿里云服务器的drone服务上拉取github代码时经常超时,但我在shell中拉取时从未失败过(是ssh协议)。所以以drone clone code via ssh protocol
作为关键字搜索了一下。找到如下资源:
前置知识
使用git clone git@github.com:YOUR_NAME/YOUR_REPO.git
时需要~/.ssh下有私钥文件id_rsa(可以配置同目录下的config文件来修改文件名)。同时还会提示你把github.com添加到known_hosts中。
配置
所以使用drone时,需要把id_rsa放到drone服务中,drone服务中可能会有多个repo,所以把id_rsa放在organization secret
(组织秘串)特别合适。 参见官方文档。
在drone服务中的配置如下图:
直接复制id_rsa文件内容即可(组织秘串可是以多行文本)。
在.drone使用
steps:
- name: custom clone commands
image: alpine/git:2.45.2
environment:
KEY_A: value_a
SSH_KEY:
# 和上面的配置要对应
from_secret: ssh_key_github
commands:
- env
- mkdir -p $HOME/.ssh
- echo "$SSH_KEY" > $HOME/.ssh/id_rsa && chmod 600 $HOME/.ssh/id_rsa
- ssh-keyscan -p 22 github.com > $HOME/.ssh/known_hosts 2> /dev/null
- chmod 600 $HOME/.ssh/known_hosts
- git clone --depth=1 $DRONE_GIT_SSH_URL .
- git checkout $DRONE_COMMIT
说明:
- DroneCI 使用SSH协议Git操作 中说需要使用vmware官方出品的
bitnami/git
,而我使用alpine/git:2.45.2
也能成功。
完全正常了。Oh year~