You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Supervisor配置文件中指定Git分支并实现多分支部署?

关于Supervisor与Git分支配置的问题解答

问题1:能否在Supervisor配置文件中指定要使用的Git分支?

Supervisor是进程管理工具,只负责启动、监控和重启进程,本身不具备Git分支管理能力,无法直接在配置文件里指定Git分支。分支切换属于Git的功能,需要在启动服务进程前,确保代码目录已经切换到目标分支。

问题2:你给出的配置能否让Supervisor使用不同分支?

不能。你提供的两个program配置指向了同一个代码目录/home/ubuntu/a,而一个Git目录同一时间只能处于一个分支状态,所以两个进程实际运行的是该目录当前所在分支的代码,无法实现各自使用不同分支的需求。另外还要注意,两个配置里的端口都是9009,这会导致端口冲突,启动时会报错。

正确实现方式

要让不同的Supervisor进程运行不同Git分支的代码,推荐两种方案:

方案1:创建独立的代码目录(最稳定)

为每个分支单独克隆一份代码到不同目录,然后在Supervisor配置里分别指向对应的目录:

[program:a]
command=/home/ubuntu/a-venv/bin/uvicorn a.path.main:app --host=0.0.0.0 --port 9009 --loop uvloop --log-level info
# 运行master分支代码
directory=/home/ubuntu/a-master
user=ubuntu
autostart=true
autorestart=true

[program:b]
command=/home/ubuntu/a-venv/bin/uvicorn a.path.main:app --host=0.0.0.0 --port 9010 --loop uvloop --log-level info
# 运行branch_1分支代码
directory=/home/ubuntu/a-branch1
user=ubuntu
autostart=true
autorestart=true

注:两个进程要使用不同端口,避免冲突

方案2:在启动命令中加入分支切换(不推荐,有风险)

在command里先执行Git分支切换,再启动服务,但这种方式存在隐患:如果分支切换失败(比如权限问题、代码冲突),服务会启动失败;同时多个进程操作同一个代码目录,可能导致代码版本混乱。示例如下:

[program:a]
command=cd /home/ubuntu/a && git checkout master && /home/ubuntu/a-venv/bin/uvicorn a.path.main:app --host=0.0.0.0 --port 9009 --loop uvloop --log-level info
directory=/home/ubuntu/a
user=ubuntu
autostart=true
autorestart=true

[program:b]
command=cd /home/ubuntu/a && git checkout branch_1 && /home/ubuntu/a-venv/bin/uvicorn a.path.main:app --host=0.0.0.0 --port 9010 --loop uvloop --log-level info
directory=/home/ubuntu/a
user=ubuntu
autostart=true
autorestart=true

内容的提问来源于stack exchange,提问作者Abhinav Prakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:07:14