• docker自动化脚本


    使用脚本从git上拉取项目并运行, 有些不足的地方
    编写脚本
    run.sh
    如果用到redis和myslq,要先启动redis和mysql

    #!/bin/bash
    # author:qiao
    # 更新项目并打包
    
    jarname=""; # jar包的名字
    jarpath=""; # jar包打包之后的位置
    
    # 需要传递用户名,密码,项目名
    function cloneApp() {
    	echo "======git正在colne【$3】======";
    	`sudo rm -rf /usr/dev/git/app/$3`
        docker run --rm 
        -v ~/.ssh/:/root/.ssh/ 
        -v /usr/dev/git/app:/git alpine/git  
        clone https://$1:$2@gitee.com/w1418/$3.git;
        echo -e "33[34m =====项目colne之后的地址为:user/dev/git/app/$3====== 33[0m";
    }
    
    # 更新项目
    function pullApp() {
        docker run 
        -v ~/.ssh/:/root/.ssh/ 
        -v /usr/dev/git/app:/git 
        -w /git/"$1" alpine/git  
        pull origin master
    }
    
    # 打包项目
    function mvnPackage() {
    	projectname=${1:-'w1418-springboot-framework'};
    	echo -e "33[34m======maven正在打包${projectname}======33[0m";
    	# 删掉正在运行的
    	docker rm -f $projectname;
    	docker run --rm --name $projectname 
        -v /usr/dev/git/app/$projectname:/usr/src/mymaven 
        -v /usr/maven-repo:/root/.m2 
        -w /usr/src/mymaven maven:3.3-jdk-8 mvn clean package
        
        # 获取target目录下的jar文件路径
        getJar /usr/dev/git/app/$projectname/target;
        echo -e "33[34m======maven打包完成${jarpath}======33[0m";
    }
    
    # 将maven打的jar包复制到jdk挂载的目录
    function cpjar() {
     	echo "======$2正在复制======";
     	if [ "$1" = "jdk" ]; then
     		# 创建目录
     		`sudo mkdir -p /usr/dev/project/`
    		`sudo cp $2 /usr/dev/project/`
    		echo -e "33[34m======$2复制到/usr/dev/project/目录======33[0m";
    	elif [ "$1" = "tomcat" ]; then
    		`sudo mkdir -p /usr/dev/docker-tomcat/webapps/`
    		`sudo cp $2 /usr/dev/docker-tomcat/webapps/`
    		echo -e "33[34m======$2复制到/usr/dev/docker-tomcat/webapps目录======33[0m";
    	fi
    	
    }
    
    # 获取文件夹里面以.jar结尾的文件
    function getJar() {
    	for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令
    	do
            if [ -f $1"/"$file ]; then # 判断是否是一个文件
                # 贪婪地删除任意字符直到遇到. 然后与jar或者war匹配
                if [ "${file##*.}" = "jar" ] || [ "${file##*.}" = "war" ]; then #判断后缀是.jar|.war结尾的文件
                    jarpath=$1"/"$file; #在此处处理文件即可
                    jarname=$file;
                fi
             fi
    	done
    }
    
    function runTomcat() {
    	# 删掉正在运行的
    	docker rm -f mytomcat;
    	echo -e "33[34m======正在启动tomcat======33[0m"
    	docker run -itd -p 8080:8080 --name mytomcat 
    	-v /usr/dev/docker-tomcat/logs/:/usr/local/tomcat/logs 
    	-v /usr/dev/docker-tomcat/webapps/:/usr/local/tomcat/webapps --privileged=true 
    	tomcat:8.5
    	echo "======tomcat启动成功======"
    	echo -e "33[34m======tomcat端口为8080 项目和日志存放路径为:/usr/dev/docker-tomcat/logs, /usr/dev/docker-tomcat/webapps======33[0m"
    }
    
    # jdk运行的项目放在/usr/dev/project/目录下
    function runJDK() {
       # 删掉正在运行的
       docker rm -f $2
       echo -e "33[34m======jdk启动正在后台启动项目======33[0m"
       docker run -p 8080:8080 --name $2 
       -v /usr/dev/project/:/home/ 
       -d  fabric8/java-alpine-openjdk8-jdk java -jar /home/$1 --spring.profiles.active=pro
    }
    
    # 运行项目
    function run() {
    	if [ "$1" = "tomcat" ]; then
    		runTomcat;
    	elif [ "$1" = "jdk" ]; then
    		runJDK $jarname $2;
    	fi
    }
    
    # 初始化
    function init() {
        if [ "$2" = "clone" ]; then
            username=$3; # 这样定义的变量username是全局变量
            password=$4; # ${4:-'qiao123456'} 可以这样给默认值
            projectname=$5; #项目名默认是w1418-springboot-framework
            # clone项目
            cloneApp $username $password $projectname;
        else
            projectname=$5
            pullApp $projectname;
        fi
        mvnPackage $projectname;
        cpjar $1 $jarpath;
        run $1 $5;
    }
    
    if [ $# -lt 5 ]
      then
       echo "error 参数个数必须是5个以上"
       exit 1  # 终止当前脚本执行 非0表示失败(这里式退出码1)	
    else
       init $1 $2 $3 $4 $5
    fi
    

    运行

    sh run.sh jdk clone uncleqiao 码云密码 w1418-springboot-framework
    

    run.sh 是脚本名
    p1: 是使用tomcat运行还是jdk直接运行jar包
    p2: 是clone还是pull项目
    p3: 码云用户名
    p4: 码云密码
    p5: 项目名

  • 相关阅读:
    poj2411 状压dp
    棋盘覆盖TYVJ1035(二分图最大匹配)
    poj3417
    无向图边双+缩点
    无向图点双+缩点
    bzoj1123(割点加路径统计)
    【BZOJ1178】会议中心(APIO2009)-贪心+倍增+set
    【BZOJ4650】优秀的拆分(NOI2016)-后缀数组+RMQ+差分
    【BZOJ4569】萌萌哒(SCOI2016)-并查集+倍增
    【BZOJ2208】连通数(JSOI2010)-SCC+DP+bitset
  • 原文地址:https://www.cnblogs.com/qiaozhuangshi/p/11762507.html
Copyright © 2020-2023  润新知