前言
最近連續996加班,一直沒有時間完成drone系列文章。drone-wechat插件實現了一半,由於企業微信token申請比較麻煩,所以也沒有進展。今天抽出時間,研究了一下scp插件,主要目的是實現非容器項目的部署。其實就是藉助scp插件,將構建好的go項目可執行文件和配置文件發佈到指定主機上。本項目依舊基於baa-cicd項目。
.drone.yml
直接上.drone.yml 文件
workspace: base: /go path: src/gogs.xxx.com/baa-cicd pipeline: build: image: golang:latest commands: - go build -o baa-cicd # publish: # image: plugins/docker # registry: registry.xxx.com # repo: registry.xxx.com/test/baa-cicd # tags: latest # secrets: [ docker_username, docker_password ] # insecure: true scp: image: appleboy/drone-scp host: 10.xx.xx.170 username: root key_path: deploy_rsa rm: true target: - /rc/local source: - baa-cicd ssh: image: appleboy/drone-ssh host:10.xx.xx.170 username: root key_path: deploy_rsa script: - supervisorctl -c /rc/conf/supervisord.conf reload notify: image: plugins/slack webhook: https://hooks.slack.com/services/xxx/xxx/xxx channel: dev template: > {{#success build.status}} build {{build.number}} succeeded. Good job. {{else}} build {{build.number}} failed. Fix me please. {{/success}}
- scp 插件基於ssh實現。所以關鍵是ssh的相關設置比較重要。比如允許root用戶ssh登錄,以及密碼和rsa祕鑰幾種登錄方式的配置。我們這邊基本上都是openssh,所以可以先了解一下openssh的設置。這邊我主要允許root登錄,編輯 /etc/ssh/sshd_config,注意:PermitRootLogin yes。
- 關於rsa祕鑰登錄,這邊就不做更多介紹了。
- 此處deploy_rsa是放置了ssh登錄祕鑰的文件。
- 當然光是拷貝了文件,並不能完成部署。所以此處引用了另外一個插件ssh,簡單假設項目是用supervisior管理進程,那麼ssh執行supervisorctl -c /rc/conf/supervisord.conf reload命令。完成新項目的部署。
- 其實此處再引入一個插件並不是特別合適,感覺有點麻煩,其實個人感覺scp引入一個script參數,比較好,執行一些拷貝完成以後的操作指令。
scp 插件介紹
配置簡介:
scp插件通過ssh拷貝文件到目標主機,下面是如何在drone中使用的sample
pipeline: scp: image: appleboy/drone-scp host: example.com target: /home/deploy/web source: release.tar.gz
自定義用戶名和密碼以及端口的配置示例:
pipeline: scp: image: appleboy/drone-scp host: example.com + username: appleboy + password: 12345678 + port: 4430 target: /home/deploy/web source: release.tar.gz
項目需要從多個文件拷貝到目的主機多個文件的配置示例:
pipeline: scp: image: appleboy/drone-scp host: example.com target: + - /home/deploy/web1 + - /home/deploy/web2 source: + - release_1.tar.gz + - release_2.tar.gz
此處注意的就是一一對應關係。我理解的場景是,在項目中配置文件和可執行文件處於不同的文件夾下,或多個配置文件。
一般項目部署爲了高可用,會將項目部署在多臺主機上,所以下面是一個多目標主機的配置示例:
pipeline: scp: image: appleboy/drone-scp - host: example.com + host: + - example1.com + - example2.com target: /home/deploy/web source: release.tar.gz
當然文件比較多的時候,如果一一寫出就過於麻煩了,該scp支持模式匹配:
pipeline: scp: image: appleboy/drone-scp host: - example1.com - example2.com target: /home/deploy/web source: - - release/backend.tar.gz - - release/images.tar.gz + - release/*.tar.gz
當然依舊可以定義觸發條件:
pipeline: scp: image: appleboy/drone-scp host: example.com target: /home/deploy/web source: release.tar.gz + when: + status: success + event: tag
參數簡介:
host
目的主機的域名或是ip
port
目標主機的ssh端口
username
目的主機ssh用戶名
password
目的主機ssh密碼
key
訪問主機的祕鑰
target
目的主機目的文件路徑
source
想要拷貝的文件列表
rm
在拷貝之前刪除原文件的開關
timeout
建立tcp連接的最大超時時間
插件源碼
該插件作者貌似是一個臺灣同胞。貢獻了其他很多的drone插件,比如k8s 和telegram。這裏源碼地址,大致可以看看,主要是瞭解drone插件的編寫思路。等不忙的時候,繼續完成我的drone-wechat。
本文轉自中文社區-k8s與CICD--藉助scp插件實現非容器項目的部署