learn - 项目架构演变-07(dagu一个工作流当作部署工具)
小项目,快速接入工作流部署环节,dagu。
learn - 项目架构演变-07(dagu一个工作流当作部署工具)
创作背景
我们在从0到1快速搭建项目,有快速版本迭代上线,当节奏突然放缓以后,也就是我们开始用户有增长,肯定要考虑项目的“稳”。
目标
- 低成本:要求一个二进制文件运行,占用内存低。
- 快速:适配项目快节奏的快速上线用的shell。
- 版本回退可控:以前用户少,真出先问题,代码回退以后在编译打包上线;但是用户多了的话,要考虑影响范围了,要及时回退到上一版本可用状态,再去排查问题、修复问题。
行动
方案选型
- Jenkins:通过 Web 界面进行复杂配置,或编写 Groovy 脚本(Jenkinsfile) 定义流水线。学习曲线较陡,但灵活性极高。
- Drone:在项目根目录创建
.drone.yml文件即可。YAML 结构清晰,每个step对应一个容器镜像,易于上手。- Dagu:通过 YAML 文件定义工作流(DAG)-,支持
command、docker、ssh、http等多种步骤类型。可以直接调用你现有的任何脚本。
我自己用过Jenkins,比较“重”,占用资源高吧,比如我买的1g2c的云机器,可能运行其他的程序也会卡一些。
我也试了试Drone,是用git仓库进行关联的,账号需要用git自建的仓库来登陆,耦合重,不灵活。
决定Dagu,账号独立,可以自定义工作流来当作部署项目用,把个人负责的项目中相关的build.sh 和deploy.sh关联上就行。
但是我不想在我的那台1g2c的云机器上进行编译项目代码,太慢了!用mac pro M4去编译代码,编译完成传到机器上一样好。
部署使用
版本
dagu version 2.13.0
https://github.com/dagucloud/dagu/releases
昨天新打的release标签,
https://github.com/dagucloud/dagu/releases/download/v2.13.0/dagu_2.13.0_linux_amd64.tar.gz
环境变量配置启动方案
run.sh1 2 3 4 5 6 7 8 9 10
#!/bin/bash export WORKDIR="/data/chatraha/dagu" export DAGU_TZ=Asia/Shanghai export DAGU_HOME=$WORKDIR export PATH=$PATH:$WORKDIR/bin export DAGU_HOST=0.0.0.0 export DAGU_PORT=8880 $WORKDIR/bin/dagu server
我自己在前面一层加了个proxy,发现会出现cors问题,建议直接用
配置文件启动方案。配置文件启动方案
https://docs.dagu.sh/server-admin/reference
config.yaml1 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
host: 0.0.0.0 port: 8000 # 自己定义端口 public_url: http://localhost.ai # 随便定义个本地用的, base_path: "" tz: "Asia/Shanghai" debug: true log_format: "json" access_log_mode: "non-public" check_updates: false cors_allowed_origins: ["localhost.ai"] auth: mode: builtin builtin: token: secret: "localhost" ttl: "1h" queues: enabled: true paths: dags_dir: /data/chatraha/dagu/dags wiki_dir: /data/chatraha/dagu/dags/wiki log_dir: /data/chatraha/dagu/logs data_dir: /data/chatraha/dagu/data dag_state_dir: /data/chatraha/dagu/data/dag-state
run.sh1 2 3 4
#!/bin/bash export WORKDIR="/data/chatraha/dagu" $WORKDIR/bin/dagu server --config /data/chatraha/dagu/config.yaml
然后配置下nginx,解析一下内网域名,就可以用了。
配置守护进程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
[Unit] Description=Dagu server After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=simple User=root PIDFile=/var/run/dagu.pid ExecStart=/bin/bash -c 'exec /data/chatraha/dagu/bin/dagu server --config /data/chatraha/dagu/config.yaml >>/data/chatraha/dagu/logs/out.log 2>&1' WorkingDirectory=/data/chatraha/dagu Restart=always RestartSec=5s PrivateTmp=true StartLimitInterval=0 LimitCORE=infinity LimitNOFILE=65555 [Install] WantedBy=multi-user.target
结论点
- 需要把工作流程的yaml文件保存的git仓库,故障时可以快速重装恢复。
- 注意区分各自环境,建议用工作空间和账号区分。
- 提醒流水线接入随时知道哪个项目上线过,有记录可查。
本文由作者按照 CC BY 4.0 进行授权
