docker jenkins+gitblit php源码线上发布(发布、回滚) - Go语言中文社区

docker jenkins+gitblit php源码线上发布(发布、回滚)


主要功能块还是通过脚本来完成的,jenkins提供了一个更直观发布过程和操作页面,gitblit也提供了一个非常友好的操作页面。

实现功能:

# -1-代码发布

 # -2-版本回滚(通过git服务器版本切换再rsync同步到服务器上完成回滚)

 # -3-添加git tag版本标签

# -4-删除git tag版本标签

# -5-代码回滚(通过发布时拷贝的备份文件恢复完成回滚)

  • 环境介绍

线下服务器:192.168.0.210      安装了docker jenkins 、gitblit(非docker)  

线上服务器:39.108.100.130    

  • 实现思路简介

  在192.168.0.210服务器搭建好gitblit,然后在docker jenkins的映射工作目录上拉取git代码,并使用git tag标记发布版本号,再通过rsync命令同步到39.108.100.130服务器上对应的发布目录上。回滚的话,将git代码切换到上一个版本号代码,再通过rsync同步到线上服务器上就可以了。 我这里功能做得完善些,所以设置步骤会比较多。

  •  

一、192.168.0.210 服务器 设置

gitblit 设置搭建(可参考我之前写的文档, 这里不作叙述,你也可以选择使用docker gitblit快速搭建)

docker jenkins 设置

1. 创建docker jenkins

docker run -p 8800:8080 -p 5000:5000 -v /usr/local/jenkins:/var/jenkins_home  -v /usr/local/jenkins_war/jenkins.war:/usr/share/jenkins/jenkins.war -v /etc/localtime:/etc/localtime  -d jenkins

 -v /usr/local/jenkins:/var/jenkins_home   映射jenkins主目录

-v /usr/local/jenkins_war/jenkins.war:/usr/share/jenkins/jenkins.war   映射使用新的jenkins版本(内置版本提示偏旧了,所以这里重新下载了新的war映射更换,如果你目前下载的docker jenkins 镜像比较新,没提示版本问题,那这一条语句可以省略。

2.免密设置

A. 192.168.0.210服务器ssh到gitblit的免密设置

设置方式可查看我的这篇文档:https://blog.csdn.net/cbuy888/article/details/89884486

B. docker jenkins   ssh到192.168.0.210 服务器 ( 如果你使用非docker的jenkins这一步就可以省了)

因为这里使用了docker jenkins(独立容器) ,所以要做要让它能对192.168.0.210服务器上有读写操作权限,要进到docker jenkins容器里ssh免密到192.168.0.210服务器上。


[root@bakserver docker]# docker exec -it 3ee bash
...
jenkins@3ee6789a3463:/$ ssh-keygen
...
jenkins@3ee6789a3463:/$ ssh-copy-id 192.168.0.210
...

3.docker jenkins 页面设置

安装插件:

 

Git Parameter Plug-In

Adds ability to choose branches, tags or revisions from git repositories configured in project.

0.9.10    
 

Git plugin

This plugin integrates Git with Jenkins.

3.10.0

Localization: Chinese (Simplified)

Jenkins 及其插件的简体中文语言包。

0.0.15

新建项目:

创建好后打开项目-->再点击配置

  • 设置构建包数和保留天数等

  • 参数构建化过程(我这里设置了几个功能选项)

  • Git源码管理

 因为我在192.168.0.210服务器上做了ssh免密,这里的设置主要是为Tag这个选项参数读取git版本号用。

  • 构建shell

 shell 代码如下 :

配置项根据实际情况修改填写

实现功能:

# -1-代码发布

 # -2-版本回滚(通过git服务器版本切换再rsync同步到服务器上完成回滚)

 # -3-添加git tag版本标签

# -4-删除git tag版本标签

# -5-代码回滚(通过发布时拷贝的备份文件恢复完成回滚)

注意:jenkins_workspace="/var/jenkins_home/workspace"   这个是docker jenkins 默认的可读写目录

#----------------配置
# docker 容器ssh连接宿主机(要求免密连接)
ssh_local="ssh root@172.17.0.1"
# jenkins服务器ssh连接线上发布的服务器(要求免密连接)
ssh_remote="ssh -p 1876 root@39.108.100.130"

# docker jenkins 本地路径
jenkins_workspace="/var/jenkins_home/workspace"
# docker jenkins 映射路径 
docker_jenkins="/usr/local/jenkins/workspace"
# git代码 ssh下载路径
git_ssh="ssh://admin@192.168.0.210:29418/Sharebed/mstcp.git"
# 运程服务器ip/代码目录路径 
remote_code="39.108.133.131:/tmp"

#----------------功能块
on_log="$jenkins_workspace/.$git_folder.log"
git_folder=${git_ssh##*/}
git_folder=${git_folder%%.*}
case $Status in
	# -1-代码发布
	"Depoly")
		echo "status: $Status"   
        [ -f "$on_log" ] || : > $on_log       
        [ $Version -eq 0 ] && echo "请输入版本号" && exit 9
        # 拉取代码
        cd $jenkins_workspace
        temp_time=`date +%Y%M%d%H%M`
        if [ -d "$jenkins_workspace/$git_folde" ];then
            cd $jenkins_workspace/$git_folder
            git pull origin master
        	git tag $Version $id -m "最新版本发布"
            git push origin $Version
        else
            git clone $git_ssh
        fi       
        # 备份代码(在远程服务器上/usr/local/jenkins目录下创建脚本backups131.sh脚本)  
        last_version=`tail -1 $on_log | awk -F "::" '{print $2}'`
        $ssh_local $ssh_remote "/data/shell/codeBAK.sh $last_version"       
        # 上传代码
        $ssh_local "rsync -avc --delete $docker_jenkins/$git_folder -e 'ssh -p 1876' $remote_code"       
        # 发布日志      
        echo "$temp_time: 从$git_ssh拉取代码,发布到$remote_code服务器上,版本号::$Version" >> $on_log
        echo "Depoly Done"
        ;;
    # -2-版本回滚(通过git服务器版本切换再rsync同步到服务器上完成回滚)
    "RollBack")
    	echo "status: $Status"
        cd $jenkins_workspace/$git_folder
        git checkout $Tag
        $ssh_local "rsync -avc --delete $docker_jenkins/$git_folder -e 'ssh -p 1876' $remote_code" 
        echo "RollBac Done"
        ;;
    # -3-添加版本标签
    "AddTag")  	
    	echo "status: $Status"
        cd $jenkins_workspace/$git_folder
            if [ $Version != "0" ];then
        		git tag $Version $GitID -m "添加版本"
        		git push origin $Version				
            fi

        echo "AddTag Done"
        ;;        
    # -4-删除版本标签
    "DellTag")
    	echo "status: $Status Tag=$Tag Version=$Version"
        cd $jenkins_workspace/$git_folder
        if [ $Version -eq 0 ];then
			git tag -d $Tag
            git push origin :$Tag
        else
			git tag -d $Version
            git push origin :$Version				
        fi

        echo "DellTag Done"
        ;;
    # -5-代码回滚(通过发布时拷贝的备份文件恢复完成回滚)
    "RollBack_CP")
    	echo "status: $Status"        
        # 以最新时间戳的备份进行回滚
        temp=`ls /data/Bak | awk -F "." '{print $2}' | sort  -n | head -1`
        temp=`ls /data/Bak | grep $temp`
        rm /data/www/ald8/* -rf
        tar -xf /data/Bak/$temp -C /data/www/ald8/
        echo "RollBack_CP Done"
        ;; 
       
    *)
    	echo "nothing to do"
        exit 11
        ;;
esac

 以上有个调用39.108.100.130服务器的备份脚本如下:   

    # 备份代码(在远程服务器上/usr/local/jenkins目录下创建脚本backups131.sh脚本)  
        last_version=`tail -1 $on_log | awk -F "::" '{print $2}'`
        $ssh_local $ssh_remote "/data/shell/codeBAK.sh $last_version" 

[root@u130 www]# cd /data/shell/
[root@u130 shell]# ls
codeBAK.sh
[root@u130 shell]# cat codeBAK.sh 
#!/bin/bash
# 要备份的文件目录
codeURL="/tmp/mstcp"
# 备份存放目录
codeBAK="/data/codeBAK"
# 保留最新备份的数量
bak_num=10
# 备份日志文件
BAK_log="$codeBAK/.codeBAK.log"

#---主功能块
# 备份功能
temp_name=${codeURL##*/}
[ ! -d $codeBAK ] && mkdir -p $codeBAK
[ ! -f $BAK_log ] && : > $BAK_log
cd $codeURL   
dtime=`date +%Y%M%d%H%M`
temp="$codeBAK/$temp_name.$dtime.$1.tar.gz"
tar -zcpPf $temp *
echo "$dtime::$temp" >> $BAK_log

# 过滤出十个最新备份除外的较早备份时间戳,并逐个删除。
cd $codeURL
temp=`awk -F "::" '/'$i'/{print $2}' $BAK_log | awk 'NR>'$bak_num'{print}'`
for p in ${temp[@]}
do
    rm *$p* -rf
done
  • 设置完成后可以开始测试

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/cbuy888/article/details/90201083
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 10:36:29
  • 阅读 ( 1721 )
  • 分类:docker

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢