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

说明:

完全正常了。Oh year~