先说一下实现思路,在gitee和Jenkins使用webhook来触发构建,构建策略中做的事情是ssh连接远程服务器,然后执行部署命令。
Jenkins的安装有两种方式,一种是下载war包放在tomcat中跑,一种是docker中直接拉取镜像运行,这里只讲解第二种方式。
拉取镜像 docker pull jenkins/jenkins:lts
启动容器
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
这里先修改一下jenkins的插件下载源,不设置的话下载插件时会太慢。进入到挂载jenkins目录下的 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
容器运行之后访问 ip:8080/ 进入jenkins界面,第一次进入需要输入初始化密码,密码在你挂载Jenkins目录下的 /secrets/initialAdminPassword 中可以查看到,输入之后到下一步。
image-20200726103802232.png
选择“Install suggested plugins”安装默认的插件,下面Jenkins就会自己去下载相关的插件进行安装。
image-20200726104214835.png
下载完成之后会进入一个创建账号的界面,这里自己创建一个就行,后续登录就用这个账号。
然后进入管理Jenkins-->系统配置
image-20200726105322680.png
这里看你的项目仓库是在哪里(github、gitlab、gitee、gogs),根据自己的仓库来配置git就行,我这里是用的gitee,填写好自己的仓库地址和gitee域名之后,去gitee上生成一个令牌,然后点击添加证书令牌,令牌配置好之后点一下右下角的测试链接,连接上就ok了。
image-20200726110006269.png
image-20200726112000536.png
image-20200726110402783.png
配置远程服务器
image-20200726110959724.png
回到主界面,新建一个item,选择自由风格。
image-20200726111108555.png
选择好个人仓库的连接,配置构建策略
image-20200726111420108.png
配置源码管理
image-20200726111535670.png
配置触发器
image-20200726111849275.png
image-20200726112239397.png
配置构建环境
image-20200726112850889.png
这里对构建执行的代码做一下讲解
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然后部署,然后每次部署之前先查找之前占用的端口并杀死这个进程,最后执行这一次的打包文件。 有疑问加站长微信联系