前提
应该不少小伙伴是把drone和git托管放在一起的,这时候默认的clone可能只是几秒钟,那请忽略本文。但如果跟我一样不在一个服务器上,而且有的项目比较大的时候可能手动clone会更好一些。
手动clone的几个问题
- 官方提供了git插件,如果能通过clone depth改为1解决的话也不需要手动clone;
- 发现很小的项目卡在clone往往要30s,很不理解,难道是跨境的问题?
- 当手动触发build的时候也要30s就难以忍受了。
手动clone的思路
- 新建一个用于存放git仓库的目录/srv/git
- clone你的项目/srv/git/projectA
- map 服务器的.ssh目录用于鉴权,当然也可以用drone的secret
- 在drone yml中禁用clone
- 增加一个pull step用于同步更新,取代系统默认的clone,并拷贝到drone工作目录
.drone.yml示例
kind: pipeline
type: docker
name: default
clone:
disable: true
steps:
- name: pull
image: alpine/git
volumes:
- name: ssh
path: "/root/.ssh"
- name: git_repo
path: "/srv/git_repo"
commands:
- cd /srv/git_repo/projectA
- git pull origin main
- cd -
- "cp -R /srv/git_repo/carry-dockers/* ./"
volumes:
- name: ssh
host:
path: /root/.ssh
- name: git_repo
host:
path: /srv/git_repo