php是最好的语言

docker 搭建jenkins 拉去gitlab代码 部署golang 到服务器运行

docker pull jenkins/jenkins:2.409

docker run --name jenkins -u root -d -p 8080:8080 -p 50000:50000 -v /home/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins

#上面 拉取镜像和启动jenksin , 指定拉取2.409版本的 不然可能git插件会装不上

# 然后运行http://192.168.80.128:8080/ 就可以进入jenkins界面了 一路ok就行(不清楚这里可以百度下 可以参考docker安装jenkins - 知乎 (zhihu.com)

# 上面步骤没问题后 进入jenkins容器 安装go环境 用于后面go打包等go相关操作

#

# jenkins容器自动部署主要原理:jenkins容器从git拉取代码到容器指定目录 然后运行jenkins里面的shell脚本(进入代码目录进行打包等操作),然后发送命令到宿主机执行宿主机上的shell (把容器里面打包好的go可执行代码 运行起来)

#

#

配置jenkins实现部署



零、

安装相关插件 第一个是为了部署时可以选择git多分支  第二个是为了配置git仓库的 (下面都会用到)

12.png


一、

新增一个任务

1.png

二、这一步是为了后面部署git代码的时候可以选择不同的分支,“branch” 这个值随便取一个名字就行,第四步会用到。按照下面步骤操作就行


2.png


三、上一步添加完“git参数后”又选择“选项参数”继续操作,这一步是为了后面部署git代码的时候可以选择不同的环境,”ENV“也是随便取名 shell脚本会用到(比如发布到正式环境或者测试环境,这一步的原理就是执行的shell的命令不一样,结合后面的shell就能看懂了)

3.png

四、这一步添加git仓库地址(需要先安装git插件 可以看第零步)。需要选添加凭证,这里的用户和密码是登录gitlab的用户名和密码。这里仓库地址使用http格式。

五、下拉选择 "执行shell" 这一步是jenkins拉取代码后 需要执行的shell脚本(脚本放在最后)

*BUILD_ID=DontKillMe (这一行必须加上 不然会不成功 - 用于解决构建完自动杀掉衍生进程问题)

*图中第二行是可以把下面那些shell脚本放到容器里面.sh文件里面 执行看着简洁一点

6.png


六、上面配置完保存 点击Build with Parameters 就可以选择不同环境和不同分支构建部署代码了


七、构建失败可以点进去看 控制台输出

111.png


八、需要对不同用户进行权限控制可以使用  ”Role-based Authorization Strategy“ 插件 自行百度,可以控制一些用户只能看见某些项目和只有查看和构建权限 不能进行修改配置等操作



九、

jenkins的sh脚本 上面配置的ENV变量 在这里面用来判断是发布到正式环境还是测试环境(本shell都是一个服务器 只是执行的sh变了 用作测试 实际应该是不同的服务器)

BUILD_ID=DontKillMe
#sh /var/jenkins_home/workspace/tml/test.sh
# *********** 这个sh脚本是在docker容器里面执行的 ***********
#
#!/bin/bash
# 当前sh脚本是 jenkins从git拉取代码到/var/jenkins_home/workspace(这是容器里面的路径 宿主机具体看映射) 工作台后 才会执行的
# /var/jenkins_home/workspace:这是容器里面的路径.宿主机具体看映射,本例是/home/jenkins_home/workspace
go_bin_path="/var/jenkins_home/go/go/bin"

# 进入对应项目
cd /var/jenkins_home/workspace/tml
# 设置环境变量 go mod会快一点
$go_bin_path/go env -w GOPROXY=https://goproxy.cn
# 设置环境变量 go mod 拉去库
$go_bin_path/go mod tidy
# 设置环境变量 库同步到项目的vendor
$go_bin_path/go mod vendor
# 删除go的旧包
rm -rf /var/jenkins_home/tml/tml-linux
# 打包go到指定文件夹
$go_bin_path/go build -o /var/jenkins_home/tml/tml-linux /var/jenkins_home/workspace/tml/main.go
# 给新包赋值权限
chmod -R 775 /var/jenkins_home/tml/tml-linux

if [ $ENV = "pro" ]
then
  # 让宿主机执行某一个sh脚本 (这个sh脚本是在宿主机上 主要功能在下面)
  echo "执行pro 操作 "
  nohup sshpass -p root ssh root@192.168.80.128 "sh /home/work/tml/commands.sh" >> /var/jenkins_home/tml/output.log &
else
  # 让宿主机执行某一个sh脚本 (这个sh脚本是在宿主机上 主要功能在下面)
  echo "执行test 操作 "
  nohup sshpass -p root ssh root@192.168.80.128 "sh /home/work/tml/commands_test.sh" >> /var/jenkins_home/tml/output.log &
fi


宿主机的sh脚本 (上面sh脚本里的commands.sh的内容 主要是重启golang代码)

# *********** 这个sh脚本是在宿主机上执行的 ***********
# 
#!/bin/bash
# 杀死旧的go进程
pkill -9 tml-linux
# 删除宿主机上的旧包
rm -rf /home/work/tml/tml-linux
# 复制jenkins容量里面脚本打出的新包 到指定地点 (这里复制的源文件是宿主机上的 因为容器映射了文件夹出来/var/jenkins_home:/home/jenkins_home)
cp /home/jenkins_home/tml/tml-linux /home/work/tml/
# 执行
cd /home/work/tml/ && ./tml-linux


作者:xTao 分类:LNMP 浏览:2303 评论:0