zhaoyu@home:~$

jenkins-gitlab自动构建设置

环境变量配置

在执行本地shell时,会碰到命令找不到的情况,可以在环境变量中配置PATH。位置:【系统管理】->【系统设置】->【全局属性】-> 【环境变量】添加PATH,将本地的PATH值填入。保存。本地PATH可以在shell中查看:

echo $PATH

git配置

在新建任务时,需要从git服务器拉取源码。如果使用ssh方式访问,那么先添加凭证。

类型选择 SSH Username with private key。username填写机器的用户名,private key输入该用户的私钥,该私钥是和git服务器中 配置的公钥对应的私钥

git配置添加git库,并选择刚才添加的凭证:

如果正确,那么git界面的红色错误信息会消失。

构建和发布

tomcat

构建过程包括两部分:1,mvn编译;2,关闭tomcat,更新程序包,启动tomcat。如下图:

代码如下示例如下:

clean package -pl mechanical-api -am -Dmaven.test.skip=true  -P dev

-pl,构建当前目录下的子模块,-am:表示同时处理选定模块所依赖的模块。

#!/bin/bash
# 用于阻止jenkins 关闭脚本衍生的子进程,让如tomcat等程序后台运行。
export BUILD_ID=tomcat_mechanical_admin_build_id
# 1.关闭tomcat
pidlist=`ps -ef|grep apache-tomcat|grep -v "grep"|awk '{print $2}'`
function stop(){
if [ "$pidlist" == "" ]
  then
    echo "----tomcat 已经关闭----"
 else
    echo "tomcat进程号 :$pidlist"
    sudo kill -9 $pidlist
    echo "KILL $pidlist:tomcat关闭成功!"
fi
}

stop

# 复制jar包,有则覆盖
mv -f /home/web/mechanical-artifacts/mechanical-admin.war  /home/apache-tomcat-8.5.35/webapps/
sleep 3s

# 5.启动tomcat
cd /home/apache-tomcat-8.5.35/bin/
./startup.sh

sleep 3s

pidlist3=`ps -ef|grep apache-tomcat|grep -v "grep"|awk '{print $2}'`
if [ "$pidlist3" == "" ]
    then 
       echo "----tomcat启动失败----"
else
    echo "----tomcat启动成功----"
fi

maven jar包发布

maven顶层构建

clean package -Dmaven.test.skip=true

执行的shell

#!/bin/bash

# 用于阻止jenkins 关闭脚本衍生的子进程,让如tomcat等程序后台运行。
export BUILD_ID=hesicare_dev_build_id
export JAR_PATH=/home/web/services/hesicare-dev


if [ ! -d "$JAR_PATH" ]; then
  mkdir -p "$JAR_PATH"
fi

# 1.关闭运行的程序
stop(){
  pidlist=`ps -ef|grep hesicare-admin-dev|grep -v "grep"|awk '{print $2}'`
  
  if [ ! -z "$pidlist" ] ; then
      kill $pidlist
      echo  "关闭 hesicare-admin-dev ..."
  fi
  
  pidlist1=`ps -ef|grep hesicare-business-dev|grep -v "grep"|awk '{print $2}'`
  
  if [ ! -z "$pidlist1" ] ; then
      kill $pidlist1
      echo  "关闭 hesicare-business-dev ..."
  fi
}

stop

mv -f hesicare-admin/target/hesicare-admin.jar $JAR_PATH/hesicare-admin-dev.jar
mv -f hesicare-business/target/hesicare-business.jar $JAR_PATH/hesicare-business-dev.jar

cd $JAR_PATH
chmod u+x hesicare-admin-dev.jar
chmod u+x hesicare-business-dev.jar

# 等待程序彻底关闭,不然会报出quartz错误。
sleep 2s
nohup java -jar hesicare-admin-dev.jar > hesicare-admin-dev.log &
nohup java -jar hesicare-business-dev.jar > hesicare-business-dev.log &
sleep 5s

pidlist3=`ps -ef|grep hesicare-admin-dev|grep -v "grep"|awk '{print $2}'`

if [ -z "$pidlist3" ]
    then 
       echo "----hesicare-admin-dev启动失败----"
       stop
       exit -2
else
    echo "----hesicare-admin-dev启动成功----"
fi

pidlist4=`ps -ef|grep hesicare-business-dev|grep -v "grep"|awk '{print $2}'`

if [ -z "$pidlist4" ]
    then 
       echo "----hesicare-business-dev启动失败----"
       stop
       exit -2
else
    echo "----hesicare-business-dev启动成功----"
fi

远程tomcat

远程部署需要配置Publish over SSH,在增加构建步骤中选择Send files or excute commands over SSH。Publish over SSH,是将需要 发布的文件先传到远程服务器上,然后再执行远程脚本,下图中红色部分:Source files是需要传输的文件,根目录为jenkins任务的 workspace,remove prefix,是移除source files的前缀。remote directory如果没有,那么会创建一个目录。Exec command 用于设置 需要在远程机器上执行的脚本。

gitlab自动触发部署

插件安装

在jenkins上安装插件 Build Authorization Token Root Plugin。该插件可以让匿名用户通过REST请求通过token触发jenkins的job构建。

使用例子如下,下面这种方式可以穿过jenkins权限限制:

buildByToken/build?job=jobName&token=token

带参数的请求

buildByToken/buildWithParameters?job=jobName&token=token&Type=Mexican

Publish Over SSH 配置

在要部署的服务器上,SSH用户目录下的.ssh文件夹中生产一对密钥,用于ssh 访问和生产插件token。

ssh-keygen -t rsa

将公钥名称改为authorized_keys,因为Publish Over SSH默认会查找名称为authorized_kyes的公钥文件。

mv id_rsa.pub authorized_kyes

将私钥配置到Publish Over SSH 中

配置完成后点击下面的测试连接是否可以连接。

触发构建配置

随机一个token,并将它配置到jenkins job中的构建触发器->触发远程构建中,如下:

openssl rand -hex 12

gitlab配置集成

在gitlab中找到需要构建的项目,找到setting->Integrations,在URL中填入如下内容:

http://jenkins.example.com/buildByToken/build?job=jobName&token=token

将jenkins.example.com修改为你自己jenkins的主路径,jobName修改为需要触发的job名称,token修改为jenkins前面配置的token。

勾选接下来对应的配置,然后点击 Add webhook按钮,如下图。

在生产Webhooks后,点击test-Push events看是否能够触发jenkins构建成功。

如果出现下面错误 不允许向本地网络发出请求,这是因为在本地网络配置的,管理员->Admin Area->Settings->Network-> Outbound requests,勾选并保存下图中的红色选框。