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

文章目录

    最近一直写接口文档,基于 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
    '
    

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式