k8s與CICD--藉助scp插件實現非容器項目的部署

前言

最近連續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插件實現非容器項目的部署

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章