能否在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
相关产品推荐
相关产品推荐

