docker+jenkins+golang持续集成持续交付(CI/CD)

黑客不黑_ · · 2873 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近因公司发展需要,增加了一些go语言开发,对项目要求使用jenkins+go+docker自动部署上线。

一、安装jenkins

1、安装Jenkins,详情见centos使用docker搭建jenkins,jenkins使用方法见jenkins的安装和使用

2、jenkins安装go插件,Go plugin

安装该插件,点击 “系统管理” -> “管理插件” -> “可选插件” -> 选择 “Go Plugin” -> 点击最下边 “直接安装” 即可完成安装。

3、配置go插件

系统管理” -> “Global Tool Configuration” -> “Go” -> “新增 Go”


image.png

二、在搭建jenkins的服务器和要构建上传的应用服务器均安装go环境

1、下载安装包

下载地址:https://golang.org/dl/

wget [https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz](https://dl.google.com/go/go1.12.4.linux-amd64.tar.gz)

2、解压缩安装

tar -C /home/service -zxvf go1.12.4.linux-amd64.tar.gz

3、配置环境变量

vim /etc/profile
export GOROOT=/home/service/go
export PATH=$PATH:$GOROOT/bin
source /etc/profile

4、测试

[root@bogon /]# go version
go version go1.12.4 linux/amd64

三、jenkins配置

1、新建任务go选择构建一个自由风格的软件项目,java选择构建一个maven项目


image.png

2、配置git路径和git账号密码和分支,或者git密钥


image.png

3、构建环境选择


image.png

4、构建执行shell,先选择执行shell,再选择ssh。


image.png

image.png
# 配置 GOPATH

export GOPATH="$JENKINS_HOME/golang_workspace"
export GOBINPATH="$GOPATH/bin"
export PATH="$PATH:$GOBINPATH"
export GO111MODULE=on
export GOPROXY=https://goproxy.io
#export GOPROXY="https://athens.azurefd.net"

# 执行 go get & build 命令

#创建 $GOPATH目录
mkdir -p $GOPATH

# 输出当前时间

date
#构建可执行二进制文件
CGO_ENABLED=0 GOARCH=amd64 go build server.go
#将可执行二进制文件传输到应用服务器
#ssh root@172.16.3.41 'bash -x -s' < /home/golang/bh-go-server-user/run.sh
rsync server root@172.16.3.41:/home/golang/bh-go-server-user/
rsync config/server.pem root@172.16.3.41:/home/golang/bh-go-server-user/config
rsync config/server.key root@172.16.3.41:/home/golang/bh-go-server-user/config
image.png

四、应用服务器配置

1、在上传到服务器的路径下创建config目录

[root@bogon bh-go-server-user]# tree
.
├── config
│   ├── config.env  #配置启动可执行二进制文件的配置文件
│   ├── server.key  #openssl
│   └── server.pem  #openssl
├── run.sh      #运行脚本
└── server      #可执行二进制文件

1 directory, 5 files

2、配置config.env


image.png

3、在shell出已经用rsync将二进制文件server和pem和key传输到了应用服务器,为什么用rsync而不用scp,因为rsync覆盖已存在文件速度上有优势,最重要的是rsync可以覆盖正在运行的二进制文件,而scp不行。

4、执行二进制文件

./server

5、利用run.sh脚本执行二进制文件
6、run.sh脚本编写

DATE=$(date +%Y%m%d%H%M%S)
DIR=/home/golang/bh-go-server-user
JARFILE=server
if [ ! -d $DIR/backup ];then
   mkdir -p $DIR/backup
fi
cd $DIR

pid=`ps -ef | grep ./server | grep -v grep | awk '{print $2}'`
echo "---------------"
for id in $pid
do
kill -9 $id
echo "killed $id"
done
echo "---------------"
echo "授予当前用户权限"
echo "执行....."

cp $JARFILE backup/$DATE$JARFILE

cd $DIR
nohup ./$JARFILE > run.log &
if [ $? = 0 ];then
        sleep 20
        tail -n 50 /home/golang/bh-go-server-user/run.log &
fi

cd backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
echo "执行成功"



有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:黑客不黑_

查看原文:docker+jenkins+golang持续集成持续交付(CI/CD)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

2873 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传