自动化部署

介绍

Go Runner 是领先的开源自动化项目部署服务!支持各种 web、php、java、python、go 等代码的发布,所有操作可以通过 web 来一键完成。Go Runner 基于 go 构建安装简单,无需安装其他依赖环境,开箱即用。Go Runner 是一个可自由配置项目的开源上线部署系统。

特性

  • 支持 gitlab、github、gitee仓库;
  • 支持手动发布上线部署;
  • 支持Test、Dev等多种环境webhook自动化部署,减少团队协作及开发成本;
  • websocket 实时展示部署中的 shell console

下载

可以通过访问 https://gitee.com/marksirl/go-runner/releases 选择自己需要的安装包(根据操作系统)进行下载

安装

下载完成解压到任意文件夹。看到的目录结构如下

Go Runner—Web 可视化自动化部署 - 图1

配置

配置 etc/config.yaml

具体的配置文件如下:
  1. # 配置文件
  2. Host: "127.0.0.1" # 运行addr
  3. Port: "8080" # 运行端口
  4. # webhook 自动化部署回调域名,根域名,如www.gn.com/www.ol.com
  5. Domain: "http://go.runner.io"
  6. # mysql (此处配置暂时不用理会)
  7. MysqlDNS: mysql://root:123456@tcp(127.0.0.1:3306)/pave?charset=utf8mb4&parseTime=True&loc=Local
  8. TimeZone: Asia/Shanghai
  9. # 本地redis连接配置
  10. RedisDNS: 61c07e1ae08d08a2@127.0.0.1:6379
  11. # 默认redis使用库
  12. DefaultDb: 1
  13. # redis队列使用库
  14. QueueDb: 12
  15. # 消费者work数量
  16. WorkNumber: 1

Nginx 配置

  1. upstream runner {
  2. server 0.0.0.0:8080 weight=1;
  3. }
  4. server {
  5. listen 80;
  6. server_name go.runner.io; # 域名设置
  7. access_log /usr/local/var/log/nginx/runner.log; # 日志目录
  8. error_log /usr/local/var/log/nginx/runner.error.log; # 日志目录
  9. index index.html index.htm;
  10. add_header Access-Control-Allow-Origin *;
  11. add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS, PUT, DELETE, PATCH';
  12. add_header Access-Control-Allow-Headers 'DNT,Keep-Alive,User-Agent,Cache-Control,Content-Type,Authorization,Access-Token';
  13. # cors
  14. if ($request_method = 'OPTIONS') {
  15. return 204;
  16. }
  17. # api
  18. location / {
  19. client_max_body_size 50m;
  20. client_body_buffer_size 128k;
  21. proxy_connect_timeout 300;
  22. proxy_send_timeout 300;
  23. proxy_read_timeout 300;
  24. proxy_buffer_size 4k;
  25. proxy_buffers 4 32k;
  26. proxy_busy_buffers_size 64k;
  27. proxy_temp_file_write_size 64k;
  28. # 将客户端的 Host 和 IP 信息一并转发到对应节点
  29. proxy_set_header Host $http_host;
  30. proxy_set_header X-Real-IP $remote_addr;
  31. proxy_set_header REMOTE-HOST $remote_addr;
  32. proxy_set_header HTTP-VIA $http_via;
  33. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  34. # 转发Cookie,设置 SameSite
  35. # proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
  36. proxy_cookie_path / "/; HttpOnly; SameSite=Lax";
  37. # 执行代理访问真实服务器
  38. proxy_pass http://runner;
  39. }
  40. # websocket
  41. location /ws {
  42. proxy_set_header Upgrade "websocket";
  43. proxy_set_header Connection "upgrade";
  44. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  45. proxy_set_header Host $host;
  46. proxy_http_version 1.1;
  47. # 转发到多个 ws server
  48. proxy_pass http://runner;
  49. }
  50. }

运行项目

运行项目前请保证 data 目录和 runtime 目录的可写权限

windows 用户打开cmd 运行

  1. .\awesome-runner.exe

mac、linux 运行

  1. ./awesome-runner
项目运行成功如下:

Go Runner—Web 可视化自动化部署 - 图2

打开浏览器访问http://go.runner.io/web 进入 web 控制台

Web界面

Go Runner—Web 可视化自动化部署 - 图3Go Runner—Web 可视化自动化部署 - 图4

Go Runner—Web 可视化自动化部署 - 图5

项目部署脚本

需要明确部署脚本文件名为 xxx.runner-ci.yml,它是存在于实际项目根目录下,随仓库提交更新下载,用于约束和申明部署时执行的脚本的配置文件。配置文件格式说明如下:
  1. # 工作目录
  2. webpath: /Users/zrone/Developments/dtest/runnnn
  3. # 部署分支,至少一个,可以配置多个,用于自动化部署触发部署
  4. only:
  5. - master
  6. - dev
  7. - test
  8. # 环境变量,用于脚本执行时申明环境变量,仅当前session有效,不会污染全局,可配置多个
  9. environment:
  10. workdir: /home/wwwroot/deploy
  11. a: b
  12. c: d
  13. # pull前运行脚本
  14. prepare:
  15. - nginx -s stop
  16. # pull 完成运行脚本
  17. script:
  18. - cd ${webpath} && pwd
  19. # 发布运行脚本
  20. release:
  21. - nginx
  22. - netstae -tunlp | grep 8080

Webhook 自动化部署配置

sshkey

自动化部署使用 webhook 通知实现,支持 gitlab/github/gitee,实现前建议配置 sshkey,可通过以下代码生成 sshkey。
  1. ssh-keygen -t rsa

github webhook 配置

Go Runner—Web 可视化自动化部署 - 图6Go Runner—Web 可视化自动化部署 - 图7Payload Url 和 Secret,可在web后台项目配置中找到,分别对应通知地址和秘钥,复制粘贴保存即可。

Go Runner—Web 可视化自动化部署 - 图8

gitlab webhook 配置

Go Runner—Web 可视化自动化部署 - 图9配置链接和私密授权码即可

gitee webhook 配置

Go Runner—Web 可视化自动化部署 - 图10需要注意的是,gitee 的签名方式需要选择签名秘钥,否则可能无法通过验证。