Skip to content

Instantly share code, notes, and snippets.

@iflamed
Last active October 11, 2021 03:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save iflamed/2d5aced9148714dcebe0c4918bcc917f to your computer and use it in GitHub Desktop.
Save iflamed/2d5aced9148714dcebe0c4918bcc917f to your computer and use it in GitHub Desktop.
Drone CI: git clone with ssh in the clone step
---
kind: pipeline
type: docker
name: default
clone:
disable: true
steps:
- name: clone
image: alpine/git
pull: if-not-exists
environment:
SSH_KEY:
from_secret: SSH_KEY
SSH_HOST:
from_secret: SSH_HOST
SSH_PORT:
from_secret: SSH_PORT
commands:
- mkdir $HOME/.ssh && echo "$SSH_KEY" > $HOME/.ssh/id_rsa && chmod 600 $HOME/.ssh/id_rsa
- |
[[ -n "$${SSH_PORT}" ]] && [[ -n "$${SSH_HOST}" ]] && ssh-keyscan -p $${SSH_PORT} $${SSH_HOST} >> $HOME/.ssh/known_hosts
- |
[[ -z "$${SSH_PORT}" ]] && [[ -n "$${SSH_HOST}" ]] && ssh-keyscan $${SSH_HOST} >> $HOME/.ssh/known_hosts
- git clone ${DRONE_GIT_SSH_URL} .
- git checkout ${DRONE_COMMIT_BRANCH}
- name: greeting
image: alpine
pull: if-not-exists
commands:
- echo "hello, world"
- ls -ahl
- pwd
@iflamed
Copy link
Author

iflamed commented Apr 23, 2021

需要在Drone 中对应的 Repository 中配置三个 Secret 变量,如下图:
image

其中 SSH_KEY 为 Git Repository 中用来 Clone 的 ssh private key,SSH_HOST 为 Git Server 的 IP 地址或者域名,SSH_PORT 为 Git Server 的 SSH 端口,默认为 22 可以不用填写。

@wangyuhuiever
Copy link

wangyuhuiever commented Oct 10, 2021

你好,请问一下。我这样配置的话有个报错。fatal: destination path '.' already exists and is not an empty directory. 克隆的目标目录非空。
我能想到的解决办法是 git init && git remote add origin xxx && git pull。你有更好的解决办法吗?

@iflamed
Copy link
Author

iflamed commented Oct 10, 2021

你好,请问一下。我这样配置的话有个报错。fatal: destination path '.' already exists and is not an empty directory. 克隆的目标目录非空。 我能想到的解决办法是 git init && git remote add origin xxx && git pull。你有更好的解决办法吗?

@wangyuhuiever 没有遇到这个问题,不知道是不是git 版本的问题。能解决就行,你这样写感觉也还可以。

@wangyuhuiever
Copy link

git init && git remote add origin ${DRONE_GIT_SSH_URL} && git pull origin ${DRONE_COMMIT_BRANCH}
最终我这样解决了

@wangyuhuiever
Copy link

wangyuhuiever commented Oct 10, 2021

需要在Drone 中对应的 Repository 中配置三个 Secret 变量,如下图: image

其中 SSH_KEY 为 Git Repository 中用来 Clone 的 ssh private key,SSH_HOST 为 Git Server 的 IP 地址或者域名,SSH_PORT 为 Git Server 的 SSH 端口,默认为 22 可以不用填写。

关于这个我有个更好的解决方法,将通用的环境变量写在drone-runner的docker-compose.yml中。这样就不用每个Repository配置一遍了。

  • DRONE_RUNNER_SECRETS=ssh_key:-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn\nNhA *****。ssh_key用\n做换行符。
    - mkdir $HOME/.ssh && echo -e "$SSH_KEY" > $HOME/.ssh/id_rsa && chmod 600 $HOME/.ssh/id_rsa. echo的时候加上 -e。解决
    截屏2021-10-10 下午8 18 18

截屏2021-10-10 下午8 19 42

@iflamed
Copy link
Author

iflamed commented Oct 10, 2021

需要在Drone 中对应的 Repository 中配置三个 Secret 变量,如下图: image
其中 SSH_KEY 为 Git Repository 中用来 Clone 的 ssh private key,SSH_HOST 为 Git Server 的 IP 地址或者域名,SSH_PORT 为 Git Server 的 SSH 端口,默认为 22 可以不用填写。

关于这个我有个更好的解决方法,将通用的环境变量写在drone-runner的docker-compose.yml中。这样就不用每个Repository配置一遍了。

  • DRONE_RUNNER_SECRETS=ssh_key:-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn\nNhA *****。ssh_key用\n做换行符。
    - mkdir $HOME/.ssh && echo -e "$SSH_KEY" > $HOME/.ssh/id_rsa && chmod 600 $HOME/.ssh/id_rsa. echo的时候加上 -e。解决
    截屏2021-10-10 下午8 18 18

截屏2021-10-10 下午8 19 42

docker-compose.yml 是要加入git repo 的吧,不安全。

@wangyuhuiever
Copy link

如果要放到git上的确实会不安全,我这里没放,都是直接在本地编辑的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment