緣由
因為專案太多了,想簡單製作 CI/CD 的機制,至少把 git push 後的 auto deploy 建置起來,個人之前還有些 gitlab-ci 的經驗,於是就看上了最近兩年比較紅的 drone ci,過程中遇到了不少問題,官方文件也不盡詳細,最後順利解決了在這邊記錄分享一下。
過程
官網上面或是網路上面有一堆教學文件應該大家都看過不少,我直接提供我這邊遇到的狀況,因為我想要在 git push 之後讓平台直接透過 ssh 工具去進行 auto deploy,同時又想要使用一些 docker image 工具,但官網上面是分開去撰寫的,並沒有特別寫說並用的時候怎麼處理。
我在了解過 drone 運作原理之後摸索出解法,其實很簡單,就是同時起 ssh 和 docker 兩種類型的 runner,然後串在同一包就可以了,下面直接分享我最後的 docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| version: '3' services: drone-server: image: drone/drone:1 ports: - 80 volumes: - ./:/data restart: always environment: - DRONE_SERVER_HOST=${DRONE_SERVER_HOST} - DRONE_SERVER_PROTO=${DRONE_SERVER_PROTO} - DRONE_RPC_SECRET=${DRONE_RPC_SECRET}
- DRONE_GITHUB_SERVER=https://github.com - DRONE_GITHUB_CLIENT_ID=${DRONE_GITHUB_CLIENT_ID} - DRONE_GITHUB_CLIENT_SECRET=${DRONE_GITHUB_CLIENT_SECRET}
- DRONE_LOGS_DEBUG=true - DRONE_LOGS_PRETTY=true - DRONE_LOGS_COLOR=true
- VIRTUAL_HOST=<your_domain> - VIRTUAL_PORT=80 - LETSENCRYPT_HOST=<your_domain> - LETSENCRYPT_EMAIL=<your_mail> networks: - public
drone-runner-docker: image: drone/drone-runner-docker:1 restart: always depends_on: - drone-server volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - DRONE_RPC_HOST=${DRONE_RPC_HOST} - DRONE_RPC_PROTO=${DRONE_RPC_PROTO} - DRONE_RPC_SECRET=${DRONE_RPC_SECRET} - DRONE_RUNNER_CAPACITY=1 networks: - public drone-runner-ssh: image: drone/drone-runner-ssh:1 restart: always depends_on: - drone-server volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - DRONE_RPC_HOST=${DRONE_RPC_HOST} - DRONE_RPC_PROTO=${DRONE_RPC_PROTO} - DRONE_RPC_SECRET=${DRONE_RPC_SECRET} - DRONE_RUNNER_CAPACITY=1 networks: - public
networks: public:
|