通过 Makefile 及 ssh 远程执行命令,实现服务器线上服务的自动部署

更新日期: 2023-05-06 阅读次数: 1010 字数: 368 分类: Linux

最近一直写接口文档,基于 swaggo 实现的文档服务。由于要跟前端配合,所以每天都要频繁更新接口文档,非常麻烦。之前是半自动化状态:

  1. makefile 中 scp 文档程序到服务器
  2. 手动登录服务器,再 makefile 执行 systemd reload 文档服务 (文档服务基于 golang gin 所以需要重启服务)

最近在看一个开源项目的 Makefile 时,发现可以使用 ssh 远程执行命令,这样就不需要手动登录服务器来操作了,甚好。

Makefile 代码

.PHONY: doc
doc:
	swag init --output api_docs --tags "微信小程序,设备管理" --parseDependency --parseInternal --parseGoList=false --parseDepth=1
	cd api_docs/ && go build

.PHONY: deploy_doc
deploy_doc:
	make doc
	scp api_docs/api_docs user@host:~/project/api_docs/api_docs2
	ssh user@host 'cd ~/project && make reload_docs'

.PHONY: reload_docs
reload_docs:
	sudo systemctl stop go_docs
	sleep 1
	cp api_docs/api_docs2 api_docs/api_docs
	sudo systemctl start go_docs
	sleep 1
	sudo systemctl status go_docs

这样就可以通过

make deploy_doc

一行命令部署并重启服务了。

多行命令

对于再复杂一点的场景,比如判断目录是否存在,自动备份,再替换这种情况,就需要更多 shell 代码。如何写成多行呢?

记不住 shell 语法,于是跪求于 ChatGPT:

ssh 远程执行解压缩命令,并执行多行命令,是否可以写成多行

感觉我已经是 linux shell 专家了 😀

ssh user@host '
tar -zxvf /path/to/your/local/file.tar.gz -C /path/on/remote/host && \
command1 && \
command2 && \
command3
'

tags: Makefile swagger

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式