docker-jenkins + gitlab/gogs仓库 + CD配置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Jenkins基础配置
    • 1.插件安装
    • 2.jenkins重启,使已安装的所有插件生效
    • 3.全局参数配置
    • 编辑添加项目maven编译打包需要的setting文件
  • 二、gitlab仓库CD配置
    • 1. jenkins上创建项目,配置项目流水线,并配置构建触发器
    • 2. 创建触发器地址访问的安全令牌标识
    • 3. gitlab仓库配置webhook,配置完成后可以测试推送
    • 4. 配置项目编译构建maven工具:命令、setting.xml
    • 5. 构建后登陆目标服务器,执行脚本,部署服务
  • 三、gogs仓库CD配置
    • 1. jenkins上创建项目,配置项目流水线,并配置构建触发器
    • 2. gogs仓库配置webhook,并调试推送
    • 3. gogs仓库的webhook推送地址格式参照如下:
    • 4. 其他jenkins构建和部署步骤及配置,同gitlab相同。
    • 5. 当配置完,点击调试出现403错误时,按照如下操作可以解决:
  • 四、自用部署脚本
    • 1. jar包下载脚本
    • 2. jar包部署脚本
  • 总结


前言

CI(Continuous Intergration )—— 持续集成,指开发人员能够频繁将代码集成到公共代码仓库的主分支中。而 CD(Continuous Deployment)——持续部署,以持续集成过程为其理论基石,其核心是部署一条流水线,实现应用程序从构建、部署、测试到发布这整个过程的自动化,从而提高软件的交付能力。本示例将用gitlab和gogs仓库,实操jenkins配置,实现代码推送后自动打包部署。


一、Jenkins基础配置

本次示例是基于容器化运行的jenkins服务,基础配置中包含支撑仓库事件捕获的插件安装,全局的参数配置。

1.插件安装

插件安装可以采用联网下载自动安装,也可以采用手动安装。考虑插件对其他组件的依赖性,建议采用联网下载自动安装。如果联网下载不成功,可以将插件镜像的地址切换为国内镜像后再次下载安装。
插件搜索安装操作路径:

Dashboard=》系统管理=》插件管理=》Available plugins

docker-jenkins + gitlab/gogs仓库 + CD配置_第1张图片

插件镜像源切换操作路径:

Dashboard=》系统管理=》插件管理=》Advanced settings=》升级站点

docker-jenkins + gitlab/gogs仓库 + CD配置_第2张图片
插件手动安装操作路径:

Dashboard=》系统管理=》插件管理=》Advanced settings=》Deploy Plugin

docker-jenkins + gitlab/gogs仓库 + CD配置_第3张图片

  • 安装gitlab插件
    docker-jenkins + gitlab/gogs仓库 + CD配置_第4张图片

  • 安装gogs插件
    docker-jenkins + gitlab/gogs仓库 + CD配置_第5张图片

2.jenkins重启,使已安装的所有插件生效

docker-jenkins + gitlab/gogs仓库 + CD配置_第6张图片

3.全局参数配置

  • 配置gitlab仓库账号信息
    操作路径及截图:
Dashboard=>系统管理=>Configure System

docker-jenkins + gitlab/gogs仓库 + CD配置_第7张图片

  • 配置gogs仓库账号信息
    操作路径及截图:
Dashboard=>系统管理=>Configure System

docker-jenkins + gitlab/gogs仓库 + CD配置_第8张图片

  • 配置项目编译打包用的maven-setting文件
    操作路径及截图:
Dashboard=>系统管理=>Managed files=>Add a new Config

docker-jenkins + gitlab/gogs仓库 + CD配置_第9张图片

二、gitlab仓库CD配置

1. jenkins上创建项目,配置项目流水线,并配置构建触发器

docker-jenkins + gitlab/gogs仓库 + CD配置_第10张图片

2. 创建触发器地址访问的安全令牌标识

docker-jenkins + gitlab/gogs仓库 + CD配置_第11张图片

3. gitlab仓库配置webhook,配置完成后可以测试推送

docker-jenkins + gitlab/gogs仓库 + CD配置_第12张图片
docker-jenkins + gitlab/gogs仓库 + CD配置_第13张图片

4. 配置项目编译构建maven工具:命令、setting.xml

docker-jenkins + gitlab/gogs仓库 + CD配置_第14张图片

5. 构建后登陆目标服务器,执行脚本,部署服务

docker-jenkins + gitlab/gogs仓库 + CD配置_第15张图片


三、gogs仓库CD配置

1. jenkins上创建项目,配置项目流水线,并配置构建触发器

docker-jenkins + gitlab/gogs仓库 + CD配置_第16张图片

2. gogs仓库配置webhook,并调试推送

docker-jenkins + gitlab/gogs仓库 + CD配置_第17张图片

3. gogs仓库的webhook推送地址格式参照如下:

docker-jenkins + gitlab/gogs仓库 + CD配置_第18张图片

4. 其他jenkins构建和部署步骤及配置,同gitlab相同。

5. 当配置完,点击调试出现403错误时,按照如下操作可以解决:

#登陆jenkins容器所在服务器,并进入容器内
docker exec -it jenkins bash
#找到文件 /usr/local/bin/jenkins.sh 将启动脚本 java -jar 后面加上一行:-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
exec java -Duser.home="$JENKINS_HOME" -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true "${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@"
#退出容器并重启容器
docker stop jenkins && docker start jenkins

四、自用部署脚本

1. jar包下载脚本

#!/bin/sh
#description:从远程服务器复制jar包文件

#下载文件基础路径
download_file_base_path="http://nexus.tongtech.top/repository/tongboot/org/tongframework/boot"

#部署目录
deploy_dir="/opt/quality"

#jar包文件存放路径
jar_save_path="$deploy_dir/jars"

#日志文件存放路径
log_path="$deploy_dir/log"

#新建目录,如果不存在则新建
if [ ! -d $deploy_dir ]; then
   mkdir -p $deploy_dir
fi

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

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

#清空已存在的jar包
echo ">>>>>>>>>>>>>>>>>>>>>>>>>> clear jar >>>>>>>>>>>>>>>>>>>>>>>>>>>>"
rm -rf ${jar_save_path}/*.jar

#开始复制文件
echo ">>>>>>>>>>>>>>>>>>>>>>>>>> download jar >>>>>>>>>>>>>>>>>>>>>>>>>>>>"
cd ${jar_save_path}
wget ${download_file_base_path}/tong-quality-cloud-start/3.4.0/tong-quality-cloud-start-3.4.0.jar
wget ${download_file_base_path}/tong-system-cloud-start/3.4.0/tong-system-cloud-start-3.4.0.jar
wget ${download_file_base_path}/tong-cloud-gateway/3.4.0/tong-cloud-gateway-3.4.0.jar
sleep 10

#开始复制文件到部署目录
echo ">>>>>>>>>>>>>>>>>>>>>>>>>> copy jar >>>>>>>>>>>>>>>>>>>>>>>>>>>>"
cp -r ${jar_save_path}/* ${deploy_dir}


#重启所有jar包
echo ">>>>>>>>>>>>>>>>>>>>>>>>>> restart services >>>>>>>>>>>>>>>>>>>>>>>>>>>>"
cd ${deploy_dir}
./deploy_tongboot_quality_jar.sh restart


2. jar包部署脚本

#!/bin/sh
#日志文件存放目录
export LOG_PATH=/opt/quality/log
#应用jar
export GATEWAY=/opt/quality/tong-cloud-gateway-3.4.0.jar
export SYSTEM=/opt/quality/tong-system-cloud-start-3.4.0.jar
export QUALITY=/opt/quality/tong-quality-cloud-start-3.4.0.jar
#应用端口号
export GATEWAY_port=9999
export SYSTEM_port=7001
export QUALITY_port=7002
#jdk环境:服务器环境和jenkins执行环境不一样,如果通过jenkins构建脚本执行,需要指定具体的java参数
export JAVA=/usr/local/jdk1.8.0_241/bin/java
 
case "$1" in
 
start)
        ## 启动GATEWAY
        echo "--------开始启动 GATEWAY---------------"
        nohup $JAVA -jar $GATEWAY >$LOG_PATH/gateway.out 2>&1 &
        GATEWAY_pid=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'`
        until [ -n "$GATEWAY_pid" ]
            do
              GATEWAY_pid=`lsof -i:$GATEWAY_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "GATEWAY pid is $GATEWAY_pid"    
        echo "---------GATEWAY 启动成功-----------"
 
        ## 启动SYSTEM
        echo "--------开始启动 SYSTEM---------------"
        nohup $JAVA -jar $SYSTEM >$LOG_PATH/system.out 2>&1 &
        SYSTEM_pid=`lsof -i:$SYSTEM_port|grep "LISTEN"|awk '{print $2}'` 
        until [ -n "$SYSTEM_pid" ]
            do
              SYSTEM_pid=`lsof -i:$SYSTEM_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "SYSTEM pid is $SYSTEM_pid"     
        echo "---------SYSTEM 启动成功-----------"
		
		## 启动QUALITY
        echo "--------开始启动 QUALITY---------------"
        nohup $JAVA -jar $QUALITY >$LOG_PATH/quality.out 2>&1 &
        QUALITY_pid=`lsof -i:$QUALITY_port|grep "LISTEN"|awk '{print $2}'` 
        until [ -n "$QUALITY_pid" ]
            do
              QUALITY_pid=`lsof -i:$QUALITY_port|grep "LISTEN"|awk '{print $2}'`  
            done
        echo "QUALITY pid is $QUALITY_pid"     
        echo "---------QUALITY 启动成功-----------"
		
        echo "===startAll success==="
        ;;
 
 stop)
        P_ID=`ps -ef | grep -w $GATEWAY | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===GATEWAY process not exists or stop success"
        else
            kill -9 $P_ID
            echo "GATEWAY killed success"
        fi
		
		P_ID=`ps -ef | grep -w $SYSTEM | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===SYSTEM process not exists or stop success"
        else
            kill -9 $P_ID
            echo "SYSTEM killed success"
        fi
		
		P_ID=`ps -ef | grep -w $QUALITY | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "===QUALITY process not exists or stop success"
        else
            kill -9 $P_ID
            echo "QUALITY killed success"
        fi
 
        echo "===stop success==="
        ;;   
 
restart)
        $0 stop
        sleep 3
        $0 start
        echo "===restart success==="
        ;;   
esac	
exit 0

总结

通过以上步骤,可以实现jenkins+gitlab/gogs+CD自动化构建和部署。如果jenkins/gitlab/gogs因版本不一样,操作界面及功能按钮显示不同的,要参照具体的版本具体配置。

你可能感兴趣的:(jenkins,jenkins,docker,gitlab)