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 "\033[34m =====项目colne之后的地址为:user/dev/git/app/$3====== \033[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 "\033[34m======maven正在打包${projectname}======\033[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 "\033[34m======maven打包完成${jarpath}======\033[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 "\033[34m======$2复制到/usr/dev/project/目录======\033[0m";
elif [ "$1" = "tomcat" ]; then
`sudo mkdir -p /usr/dev/docker-tomcat/webapps/`
`sudo cp $2 /usr/dev/docker-tomcat/webapps/`
echo -e "\033[34m======$2复制到/usr/dev/docker-tomcat/webapps目录======\033[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 "\033[34m======正在启动tomcat======\033[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 "\033[34m======tomcat端口为8080 项目和日志存放路径为:/usr/dev/docker-tomcat/logs, /usr/dev/docker-tomcat/webapps======\033[0m"
}
# jdk运行的项目放在/usr/dev/project/目录下
function runJDK() {
# 删掉正在运行的
docker rm -f $2
echo -e "\033[34m======jdk启动正在后台启动项目======\033[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: 项目名