记录一次Go项目的部署

最近写了一个go项目,需要部署到服务器进行测试,如果只是go run main.go难免也太麻烦了点,于是学习了项目部署的相关知识。 项目的部署有多种方式,Jenkins,nginx等方式,本文只讲解一下简单的shell脚本部署。

系统信息

系统信息: CentOS Linux release 8.3.2011 x86_64 Go version: go version go1.14.12 linux/amd64

几条命令的介绍

nohup

nohup命令的全称为no hang up不挂起,可以在系统后台不挂断的运行命令,退出终端后程序也会正常运行。 语法格式: nohup ./xxx > xxx.log 2>&1 & 解释: > xxx.log表示将输出重定向至该文件,可以记录运行时的日志 2>&1将标准错误2重定向到标准输出&1,然后标准输出&1再被重定向至xxx.log文件

git pull

git pull origin dev 为了方便项目的及时更新,使用改名了保证运行时与上游仓库的代码保持一致。

ps

ps命令为 process status,可以查看系统当前的进程状态

例如

1
2
3
4
5
6
~> ps
    PID TTY          TIME CMD
 255873 pts/0    00:00:02 zsh
 258517 pts/0    00:00:00 sh
 258519 pts/0    00:00:00 OnlineJudge
 263021 pts/0    00:00:00 ps

我们将用ps命令与grep等命令筛选出项目的pid ps命令有很多参数选择,这里介绍一下用到的两条命令:

1
2
ps -e  列出所有进程
ps -f  显示进程的全部信息

grep

grep命令可以查找文本中符合条件的字符串,用于匹配进程的名称, 还可以匹配文本中的各种信息,本文不再具体展开,后续打算更一篇具体记录Linux命令的博客。

awk

用于处理文本提取信息,将使用grep查询到的进程信息提取出pid 查询到的结果为 root 263948 263946 0 12:49 pts/0 00:00:00 ./OnlineJudge 我们只需要第二项的pid,使用 awk {print $2} 即可提取出进程的pid 263948

kill

kill pid杀死进程

Shell脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
echo -e "*** Online_Judge ***\n"
echo -e "*** 检查上游代码中 ***\n"

git pull origin dev

echo -e "*** 编译中 ***\n"
go build
chmod -R 777 OnlineJudge
pid=`ps -ef|grep OnlineJudge|grep -v grep|awk '{print $2}'`
echo -e "$pid\n"
kill $pid && nohup ./OnlineJudge > OnlineJudge.log 2>&1 &

pid2=`ps -ef|grep OnlineJudge|grep -v grep|awk '{print $2}'`
echo -e "项目部署成功***进程ID为:$pid2"

将脚本保存至项目目录,赋予执行权限 chmod +x setup.sh 执行脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
➜ git:(dev) ✗ ./setup.sh         
*** Online_Judge ***


*** 检查上游代码中 ***
From url
 * branch            dev        -> FETCH_HEAD
Already up to date.
*** 编译中 ***

*** 添加权限 ***

添加权限成功

*** kill进程 ***

258519

./setup.sh: line 18: 258519 Terminated              nohup ./OnlineJudge > OnlineJudge.log 2>&1
项目部署成功***进程ID为:263948

至此项目即可部署成功 上述shell中的视个人情况而修改

Reference

Linux命令大全 如何优雅的通过Shell脚本一键部署GO项目到服务器?

0%