41、Jenkins部署go项目

一、jenkins安装go

二、上传代码到git

  • gitee新建仓库

在这里插入图片描述

  • Golang创建Git仓库
    在这里插入图片描述
    在这里插入图片描述
  • 项目根目录下添加忽略的文件
    在这里插入图片描述
  • 选择add的文件
    在这里插入图片描述
  • 提交
    在这里插入图片描述
  • 定义gitee的仓库地址
    在这里插入图片描述
    在这里插入图片描述
  • 推送
    在这里插入图片描述
    在这里插入图片描述

三、go项目的build和运行

在使用jenkins构建go项目之前,我们需要先知道go项目的build和运行流程

  • build项目go build goods_web/main
    在这里插入图片描述
  • 运行
    在这里插入图片描述
  • 这里我们需要知道光有main.exe是不能运行,需要有yaml配置文件,并且与项目的相对路径保持一致

在这里插入图片描述
在这里插入图片描述

四、free style构建goods_web

1 - 新建free style任务

在这里插入图片描述

2 - git配置 pull 代码

在这里插入图片描述

3 - 添加go build构建goods_web项目

  • 这里先测试go能否正常运行

在这里插入图片描述
在这里插入图片描述

  • 无法找到go的解决方案:将配置过程通过shell脚本来执行,这样就不会报错了
    在这里插入图片描述

在这里插入图片描述

  • 现在将之前我们手动执行的步骤转化成shell脚本添加到构建中
    • 这里要注意一个问题,因为go build后,nacos会生成tmp的目录,我们也需要提前建好mkdir -vp goods_web/target/tmp,这样才会属于jenkins的用户组,否则是root用户组,这会导致无权限
      在这里插入图片描述
      在这里插入图片描述
echo "配置Go语言环境变量"
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

echo "开启go moudle、代理配置"
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

echo "准备好目录结构"
# 嵌套方式构建目录结构,之前我们已经分析过了目录结构
chmod 777 -R goods_web
mkdir -vp goods_web/target/goods_web
mkdir -vp goods_web/target/tmp
cp goods_web/config_zsz.yaml goods_web/target/goods_web/config_zsz.yaml

echo "执行go build 生成可执行文件"
go build -o goods_web/target/goods_web_main goods_web/main.go
echo "构建完成"

在这里插入图片描述

  • 查看目录结构及运行:没有问题,都按照我们的shell脚本执行了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 - 构建后操作 -> 部署到测试服务器

  • 目标服务器路径生成:我们在目标的 /docker/golang下存放target目录,注意建好目录后,我们要给这个目录设置好权限
    在这里插入图片描述
  • 构建后上传到测试服务器:添加构建后操作

在这里插入图片描述

  • 测试是否可以成功传输:查看测试服务器
    在这里插入图片描述

5 - 添加goods_web_main的可执行权限

  • 我们先手动添加下可执行权限确认是否可以正确运行chmod +x /docker/golang/goods_web/target/goods_web_main
    在这里插入图片描述
  • 构建中添加Exec commandchmod +x /docker/golang/goods_web/target/goods_web_main
    在这里插入图片描述
  • 重新构建并查看可执行权限
    在这里插入图片描述

5 - 添加执行exec command

  • 我们还希望构建后,goods_web_main运行起来:可以在exec command中添加执行命令/docker/golang/goods_web/target/goods_web_main

在这里插入图片描述

  • 重新构建后我们发现异常了
    在这里插入图片描述
    在这里插入图片描述
  • 我们到测试服务器上查看goods_web_main是否在运行ps aux|grep goods_web_main
    在这里插入图片描述

6 - shell脚本方式启动goods_web_main

  • 为什么不推荐使用exec command方式运行程序:我们更推荐使用shell脚本来运行,因为我们还可能有如下需求
    • ①.我们希望在后台运行
    • ②.如果这个程序之前已经启动过了,我们应该先关闭之前的进程,然后再重新启动,否则我们会启动多个版本的goods_web进程
    • ③.实际开发过程中,我们可能会有更复杂的需求,所以还是推荐使用shell脚本的方式来启动
  • 编写shell脚本:这个一定要注意文件的格式是Unix(LF),否则linux下执行会多出/r/r
#定义一个变量
srv_name="goods_web_main"
#添加可执行权限
chmod +x ./$srv_name
#重启,如果已经在则关闭重启
if pgrep -x $srv_name > /dev/null
then
	echo "${srv_name} is running"
	#先关闭进程
	echo "shutting down ${srv_name}"
	#这里不要使用kill -9,这个是强杀,我们需要优雅退出
	if ps -a | grep $srv_name | awk '{print $1}' | xargs kill $1
		then
			echo "starting ${srv_name}"
			#以后台方式启动,定向到dev/null 2>&1 &
			./$srv_name > /dev/null 2>&1 &
			echo "start ${srv_name} success"
	fi
else
	echo "starting ${srv_name}"
	./$srv_name > /dev/null 2>&1 &
	echo "start ${srv_name} success"
fi

  • 构建中添加赋值shell脚本到target以便一起传输到测试服
    在这里插入图片描述
  • ssh传输后修改为执行shell脚本
    在这里插入图片描述
  • 重新构建:这时候发现有一个问题,如果原先goods_web_main在运行的时候,传输文件会导致失败
    在这里插入图片描述

在这里插入图片描述

7 - 使用备份脚本方式构建

  • 我们先传输到另外一个bak的目录中,然后关闭goods_web_main,cp备份的文件,最后再开启服务

在这里插入图片描述

  • sh脚本修改
#定义一个变量
srv_name="goods_web_main"

#添加可执行权限
chmod +x ./$srv_name
#重启,如果已经在则关闭重启
if pgrep -x $srv_name > /dev/null
then
	echo "${srv_name} is running"
	#先关闭进程
	echo "shutting down ${srv_name}"
	#这里不要使用kill -9,这个是强杀,我们需要优雅退出
	# shellcheck disable=SC2009
	# shellcheck disable=SC2086
	ps -a | grep $srv_name | awk '{print $1}' | xargs kill $1
fi
rm -rf /docker/golang/goods_web/
cp -r /docker/golang/goods_web_bak/goods_web/ /docker/golang/goods_web/
chmod +x /docker/golang/goods_web/target/$srv_name

echo "starting ${srv_name}"
cd /docker/golang/goods_web/target/ || exit
./$srv_name > /dev/null 2>&1 &
echo "start ${srv_name} success"


在这里插入图片描述

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Jenkins是一个开源的持续集成工具,而Docker是一个容器化平台,我们可以利用Jenkins和Docker来部署Golang项目。 首先,我们需要在Jenkins中安装Docker插件,以便在构建过程中使用Docker容器。Docker插件允许我们在构建任务中创建、启动和停止Docker容器。 接下来,我们可以配置Jenkins的构建任务。在构建任务中,我们可以指定源代码仓库的地址,以及一些其他的构建步骤,例如代码编译、单元测试等。 在构建步骤中,我们可以使用Docker插件创建一个Docker容器来运行我们的Golang项目。可以使用Dockerfile来定义容器的环境和依赖项。Dockerfile是一个包含一系列命令的文件,用于构建Docker镜像,其中包括构建、安装Golang项目所需的环境和依赖项。 一旦Docker容器创建完成,我们可以在容器中执行一些命令来编译和运行我们的Golang项目。可以使用Docker命令来执行这些命令,例如docker exec命令可以在容器中执行某个命令。 最后,我们可以配置Jenkins任务的后续步骤,例如将构建结果发布到某个服务器或云平台上。 通过Jenkins和Docker的集成,我们可以轻松地实现Golang项目的持续集成和部署Jenkins可以自动触发构建任务,使用Docker容器来创建项目的运行环境,从而简化了部署的流程。这种方式还可以确保每次构建的环境完全一致,提高了应用程序的可移植性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无休止符

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值