先说一下实现思路,在gitee和Jenkins使用webhook来触发构建,构建策略中做的事情是ssh连接远程服务器,然后执行部署命令。
Jenkins环境搭建
Jenkins安装
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
中可以查看到,输入之后到下一步。
-
选择“Install suggested plugins”安装默认的插件,下面Jenkins就会自己去下载相关的插件进行安装。
下载完成之后会进入一个创建账号的界面,这里自己创建一个就行,后续登录就用这个账号。
-
然后进入管理Jenkins-->系统配置
-
这里看你的项目仓库是在哪里(github、gitlab、gitee、gogs),根据自己的仓库来配置git就行,我这里是用的gitee,填写好自己的仓库地址和gitee域名之后,去gitee上生成一个令牌,然后点击添加证书令牌,令牌配置好之后点一下右下角的测试链接,连接上就ok了。
-
配置远程服务器
-
回到主界面,新建一个item,选择自由风格。
-
选择好个人仓库的连接,配置构建策略
-
配置源码管理
-
配置触发器
-
配置构建环境
这里对构建执行的代码做一下讲解
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然后部署,然后每次部署之前先查找之前占用的端口并杀死这个进程,最后执行这一次的打包文件。
有疑问加站长微信联系(非本文作者)