Go必知必会:部署(下)通过Shell脚本一键部署Go项目到服务器

178 阅读4分钟

为提高项目部署的效率和准确性,我们采用自动化脚本的方式进行Go项目的服务器部署。通过编写shell脚本,我们将代码同步、项目打包、交叉编译、进程重启及服务启动等一系列操作进行封装,实现一键部署的功能。此举旨在避免重复劳动,确保部署过程的一致性和可重复性。

以下是对部署流程的表述。

  1. 代码同步:首先,通过Git等版本控制系统将最新代码同步至服务器,确保代码的一致性和可追溯性。
  2. 项目打包:对项目进行打包,将所有依赖项和资源文件整合,便于后续的编译和部署。
  3. 交叉编译:利用Go语言的交叉编译特性,根据目标服务器的操作系统和架构,编译出可在服务器上运行的可执行文件。
  4. 重启****进程:在编译完成后,脚本将负责重启相关的服务进程,确保新版本代码的即时生效。
  5. 服务启动:最后,脚本将启动服务,监控服务状态,确保服务的稳定运行。

通过上述步骤,我们能够实现Go项目的自动化部署,提高开发和运维团队的工作效率。

Shell脚本一键操作

执行效果示例

  1. 自动化执行:脚本自动执行了多个步骤,减少了人工干预,提高了效率。
  2. 清晰的步骤提示:每一步都有明确的提示,如--step1:合并代码-----step2:编译---
  3. 成功提示:每个步骤完成后,都有相应的成功提示,如“合并代码成功”、“编译完成”、“更改权限完成”。
  4. 错误处理:在杀掉旧进程并运行新进程时,脚本能够处理可能出现的错误,如“杀掉进程14464”。
  5. 部署成功提示:最后,脚本提供了“部署成功,部署的进程ID为:14655”,这让用户知道部署已经完成,并且可以查看新进程的ID,方便后续管理和监控。

是不是非常友好且高效!

部署流程

  1. 本地提交代码把最新代码提交到Git仓库
  2. 在服务器上切换到shell脚本目录下,运行shell脚本,一键部署
./setup.sh

脚本代码

说明:下面的 RunningManageServer 是我指定的module名称,替换成你自己的二进制项目文件即可。

RED_COLOR='\E[1;31m'  #红
GREEN_COLOR='\E[1;32m' #绿
YELOW_COLOR='\E[1;33m' #黄
BLUE_COLOR='\E[1;34m'  #蓝
PINK='\E[1;35m'      #粉红
RES='\E[0m'

echo -e  "${GREEN_COLOR}****后台管理系统:开始执行自动化部署****${RES}\n\n"


echo -e "${YELOW_COLOR}---step1:合并代码---${RES}"
git pull origin master
echo -e "${BLUE_COLOR}合并代码成功${RES}\n"

echo -e "${YELOW_COLOR}---step2:编译---${RES}"
go build
echo -e "${BLUE_COLOR}编译完成${RES}\n"

echo -e "${YELOW_COLOR}---step3:更改权限---${RES}"
chmod -R 777 RunningManageServer
echo -e "${BLUE_COLOR}更改权限完成${RES}\n"

echo -e "${YELOW_COLOR}---step4:杀掉进程并且运行---${RES}"
i1=`ps -ef|grep -E "RunningManageServer"|grep -v grep|awk '{print $2}'`
echo -e "${BLUE_COLOR}杀掉进程$i1${RES}\n"
kill -9 $i1 && nohup ./RunningManageServer >/dev/null 2>&1 &
i2=`ps -ef|grep -E "RunningManageServer"|grep -v grep|awk '{print $2}'`
echo -e "${GREEN_COLOR}****部署成功,部署的进程ID为:$i2${RES}****"

注意

shell脚本存放在哪里都没有关系,执行脚本的时候切换到对应目录执行就可以了。

手动分步操作

下面再说一下如果不使用脚本的话,如何一步一步手动操作,部署项目到服务器。

部署项目

(1)开发环境重新build项目(Mac环境的打包语法)

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

(2)查找指定端口的进程,9001是端口号

netstat -tunlp|grep 9001

(3)结束之前的进程,开启新进程启动go服务

kill -9 4543 && nohup ./singo > nohup.log 2>&1 &
  • 4543是要结束的进程
  • singo是二进制文件名

跨平台编译

  • Windows平台
set CGO_ENABLED=0 //禁用CGO
set GOOS=linux //目标平台为linux
set GOARCH=amd64 //目标处理器架构是amd64
go build -o name //编译可执行文件到当前目录 (-o:自定义文件名)
  • Mac平台
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

其他问题

  1. go项目运行之后,修改.env文件不会立即生效,需要重启go服务才会生效
  2. go项目运行之后,修改config.ini配置文件会立即生效,无需重启go服务
  3. 我们根据自己的项目需求,灵活的把配置参数写到合适的配置文件中

总结

本篇通过编写和执行Shell脚本,可以实现Go项目的一键部署,大大提高项目部署效率。通过该方法,可以确保Go项目在Linux服务器上稳定运行,并能够优雅地处理进程和配置更新。

欢迎关注 ❤

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。

没准能让你能刷到自己意向公司的最新面试题呢。

感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:掘金面试群。