先说一下实现思路,在gitee和Jenkins使用webhook来触发构建,构建策略中做的事情是ssh连接远程服务器,然后执行部署命令。

Jenkins环境搭建

Jenkins安装

Jenkins的安装有两种方式,一种是下载war包放在tomcat中跑,一种是docker中直接拉取镜像运行,这里只讲解第二种方式。

docker run \
  -u root \
  --rm \  
  -d \ 
  -p 8080:8080 \ 
  -p 50000:50000 \ 
  -v jenkins-data:/var/jenkins_home \ 
  -v /var/run/docker.sock:/var/run/docker.sock \ 
  jenkins/jenkins:lts 

配置环境

updates
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
source /etc/profile     #这里需要安装golang并配置环境变量
--------------------------------------------------------
#这里是我自己的profile文件中golang的环境变量
export GO111MODULE=on
export GOROOT=/usr/local/go 
export GOPATH=/home/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY=https://goproxy.cn,direct
--------------------------------------------------------

cd /edu/volumes/jenkins_home/workspace/edu  #进入挂载的jenkins工作目录中找到部署的代码
rm -rf main             #移除之前打包的可执行文件
go build main.go        #打包命令
cp main /edu/build/     #复制打包文件到需要部署到的位置
cd /edu/build/          #进入需要部署的位置
sh build.sh             #执行部署目录下的脚本文件
--------------------------------------------------------
#以下是build.sh文件的代码
#!/usr/bin/env bash
go_id=`ps -ef|grep "./edu-app" |grep -v "grep" | awk '{print $2}'`
if [ -z "$go_id" ];
then
    echo "[go pid not found]"
else
    kill -9 $go_id
    echo "killed $go_id"
fi

echo "clean old file"
rm -rf edu-app
rm -rf edu-app.log
if [ -f main ]; then
    echo "strat new process"
    mv main edu-app
    chmod -R 777 edu-app
    nohup ./edu-app >edu-app.log 2>&1 &
else
    echo "edu-app file not found,qiut"
fi
--------------------------------------------------------
这里要注意的是,脚本中把main文件名改为edu-app然后部署,然后每次部署之前先查找之前占用的端口并杀死这个进程,最后执行这一次的打包文件。

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