不使用jenkins,一种使用脚本实现docker一键部署的方式

583 阅读2分钟

jenkins好处在于方便的权限管理,友好的ui界面。

但是很多中小企业或者私人项目,搭建jenkins比较麻烦。这里提供使用sh脚本一键部署项目的方式。

部署环境

  • centos7
  • 安装docker-ce安装方式
  • 安装gityum install -y git
  • 安装expectyum install -y expect

使用步骤

  1. git clone 项目地址到某个路径比如(/webapps/demo),只需要clone一次即可,以后直接运行脚本即可部署
  2. 保存部署脚本,修改项目路径,docker name等参数。运行脚本即可完成一键部署。注意修改xxx为实际git地址,用户名,密码等

后端spring boot项目脚本以及dockerfile参考

#!/bin/bash
name=zls-back-prod
folderName=zls-back
moduleName=zls-main
tag=latest
set -o errexit
cd /webapps/$folderName
echo -e "\033[1;33m--------------------------------从git获取代码----------------------------------\033[0m"
/usr/bin/expect <<EOF
spawn git pull --force
expect "Username for 'http://101.37.xxx.xxx'"
send "xxx\n"
expect "Password for 'http://xxx@101.37.xxx.xxx'"
send "xxxxxxxxx\n"
expect eof
catch wait result
exit [lindex \$result 3]
EOF
echo -e "\033[1;33m----------------------------------maven打包------------------------------------\033[0m"
docker run -it --rm --name maven-temp -v /webapps/$folderName:/usr/src/app -v /webapps/maven/.m2:/root/.m2 -w /usr/src/app maven:3.6.2-jdk-8 mvn clean install -Dmaven.test.skip=true
echo -e "\033[1;33m------------------------------docker删除原有容器-------------------------------\033[0m"
if docker ps -a | grep $name | awk '{print $(NF)}' | grep -Fx $name; then
  docker rm -f $name
fi
echo -e "\033[1;33m------------------------------docker删除原有镜像-------------------------------\033[0m"
if [ $(docker images | awk '{print $1":"$2}' | grep $name:$tag | wc -l) -gt 0 ]; then
docker rmi $name:$tag
fi
echo -e "\033[1;33m--------------------------------docker build-----------------------------------\033[0m"
cd $moduleName
docker build -t $name:$tag .
echo -e "\033[1;33m---------------------------------docker run------------------------------------\033[0m"
docker run -itd -p 6040:6040 -v /webapps/logs/$name:/tmp -v /webapps/uploadFiles/$name:/my-app/uploadFiles --restart=always --cpus=2 -m 3000M --memory-swap 3000M --network my-net --name $name --env SPRING_PROFILES_ACTIVE=prod $name:$tag

实际项目可参考github.com/liu-xinhui/…

FROM openjdk:8-jdk-alpine
MAINTAINER 763306716@qq.com

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && mkdir -p /my-app
WORKDIR /my-app

EXPOSE 8060

ADD ./target/xxxx.jar ./
CMD java -Djava.security.egd=file:/dev/./urandom -jar xxxx.jar

前端vue项目脚本以及dockerfile参考

#!/bin/bash
name=zls-front-prod
folderName=zls-front
tag=latest
set -o errexit
cd /webapps/$folderName
echo -e "\033[1;33m--------------------------------从git获取代码----------------------------------\033[0m"
/usr/bin/expect <<EOF
spawn git fetch --all
expect "Username for 'http://101.37.xxx.xxx'"
send "xxx\n"
expect "Password for 'http://xxx@101.37.xxx.xxx'"
send "xxxxxxxxx\n"
expect eof
catch wait result
exit [lindex \$result 3]
EOF
git reset --hard origin/master
echo -e "\033[1;33m-----------------------------------npm打包-------------------------------------\033[0m"
docker run -it --rm --name node-temp -v /webapps/$folderName:/app -w /app node:11-alpine sh -c 'npm install && npm run build'
echo -e "\033[1;33m------------------------------docker删除原有容器-------------------------------\033[0m"
if docker ps -a | grep $name | awk '{print $(NF)}' | grep -Fx $name; then
  docker rm -f $name
fi
echo -e "\033[1;33m------------------------------docker删除原有镜像-------------------------------\033[0m"
if [ $(docker images | awk '{print $1":"$2}' | grep $name:$tag | wc -l) -gt 0 ]; then
docker rmi $name:$tag
fi
echo -e "\033[1;33m--------------------------------docker build-----------------------------------\033[0m"
docker build -t $name:$tag .
echo -e "\033[1;33m---------------------------------docker run------------------------------------\033[0m"
docker run -itd -p 6041:80 --restart=always --cpus=2 -m 1000M --memory-swap 1000M --network my-net --name $name --env env=prod $name:$tag

实际项目可参考github.com/liu-xinhui/…

FROM nginx:1.17.3-alpine

MAINTAINER 763306716@qq.com

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && mkdir -p /my-app

WORKDIR /my-app

ADD /dist/  /usr/share/nginx/html/
# 自定义nginx配置文件,启用gzip
ADD /nginx.conf /etc/nginx/nginx.conf

ENV env "test"

CMD sed -i "s/vueEnv.active/\"${env}\"/g" /usr/share/nginx/html/config.js && nginx -g 'daemon off;'