一直没有时间完成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/ www.dijiuyy.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。

最新文章

  1. 如何通过阅读C标准来解决C语言语法问题
  2. hdu 2041 超级楼梯
  3. Oracle 数据库中日期时间的插入操作
  4. java 伪静态的方法
  5. sae-服务器php运行环境配置
  6. [转载] HDFS and Erasure Codes (HDFS-RAID)
  7. 单调旋转数组的TopK问题
  8. SIGAR - System Information Gatherer And Reporter
  9. Android开发之Buidler模式初探结合AlertDialog.Builder解说
  10. linux旁边flv注射MetaData工具
  11. 微信小程序(有始有终,全部代码)开发--- 新增【录音】以及UI改进
  12. HttpURLConnection用法
  13. 菜鸟玩云计算之二十:saltstack入门初步
  14. Python(Django)项目与Apache的管理
  15. Linux各目录及每个目录的详细介绍
  16. BZOJ2212 [POI2011] Tree Rotations 【treap】
  17. tf.estimator.Estimator类的用法
  18. JavaScript -- FileSystemObject-文件夹
  19. Oracle彻底删除11gR2 GI
  20. C++用法总结

热门文章

  1. 【Python音乐生成】这是一个超棒的dataset
  2. Aizu 0121 Seven Puzzle(变进制数的完美hash)
  3. UVA 11990 ``Dynamic'' Inversion (线段树套BIT,分治)
  4. Linux 文件的压缩与解压
  5. 【BZOJ1064】[NOI2008] 假面舞会(图上DFS)
  6. python_13_break
  7. Java基础面试题:super.getClass().getName() 执行结果是什么?
  8. 自己写一个Promise
  9. vue框架初学习的基本指令
  10. 网络流_spfa最小费用最大流