概述
只做一个简易的自动部署的控制台,核心流程就是
1、指明代码仓库及分支
2、编写部署脚本
3、web控制台以按钮的形式触发这个脚本
手动部署一个springboot的项目步骤
一、需要一个可部署的web项目
1.1、包含远程仓库地址
1、获取到git的远程仓库地址 git_url
2、需要运行的源代码
目录结构如下
1.2、包含一个Dockerfile文件
Dockerfile文件可以说是一个配置文件,用来告诉docker服务器该怎么构建一个docker镜像。所以需要指明该镜像的构建流程,一般来说需要考虑以下几个问题
1、指明镜像的运行环境,一般来说都需要,如果不需要可选scratch不以任何镜像为基础。
# 如果运行的是java程序,一般会依赖java镜像
# 这里选择依赖java8的镜像,是在此镜像的基础上进行再定制
FROM java:8
2、怎么将需要运行的程序或文件放入镜像(目前主流部署方式是jar包,其他方式请参照google),可以借助COPY、ADD命令
# 将上下文中 catguild-1.0-SNAPSHOT.jar 文件拷贝到镜像的 /catguild.jar里面
COPY catguild-1.0-SNAPSHOT.jar /catguild.jar
那么此时镜像的样子如下
ps:如何将宿主机中的文件上传到docker服务器上,参照镜像构建命令
3、如何运行这个jar包
# CMD基本等同是在执行shell命令,注意这个命令在根目录 / 下执行的,所以需要注意上一步jar放置的位置路径
CMD java -jar catguild.jar
一般到这就可以了,这已经是一个最基本的Dockefile配置了
4、怎么将程序的运行的端口与宿主机的端口关联起来,可以在运行容器的时候指定端口映射
# 声明容器运行时提供服务的端口,仅仅只是声明(jar包启动的端口)
EXPOSE 20000
5、容器中产生的运行数据怎么持久化,容器启动的时候指定挂载位置,但这里可以定义匿名卷防止未指定的情况
# 指定匿名卷的挂载位置,这是指定的是容器内的位置,至于宿主机映射的目录,如果没指定则会自动创建
VOLUME /data
怎么找到自动挂载的匿名卷位置?找到指定的容器id
docker inspect container_id
那么这个Dockerfile最后写成这样
FROM java:8
COPY catguild-1.0-SNAPSHOT.jar /catguild.jar
VOLUME /data
EXPOSE 20000
CMD java -jar catguild.jar
2、shell命令部署
2.1 确认需要部署的代码
1、获取代码仓库
git clone git_url
2、切换分支,比如dev
git checkout -b dev origin/dev
3、更新代码
git pull
2.2 获取可运行的jar包
本示例是gradle项目,在项目根目录下执行./gradle时会提示没有权限执行,所有需要先更变项目跟目录的权限。注意如果是第一次build怎么不能clean,否则会报错。
sudo chmod +x gradlew
./gradlew [-p] [项目根路径] clean build
运行效果如下
2.3 构建容器
docker build -f Dockerfile文件路径 -t 镜像名称 上下文目录(这个目录下的文件会上传到docker服务器上去)
docker build -f /root/test/src/main/docker/Dockerfile -t catguild:1.0 /root/test/build/libs
2.4 启动容器
docker run -it --name catguild -v /root/data:/data -p 20000:20000 --restart=always -d catguild:1.0
2.5 完整的命令
#./bin/bash
sudo chmod +x /root/.automatic_deployment/catguild/catguild/gradlew
/root/.automatic_deployment/catguild/catguild/gradlew -p /root/.automatic_deployment/catguild/catguild clean build
docker build -f /root/.automatic_deployment/catguild/catguild/src/main/docker/Dockerfile -t catguild:1.0 /root/.automatic_deployment/catguild/catguild/build/libs
docker run -it --name catguild -v /root/my-project/data:/data -p 20000:20000 --restart=always -d catguild:1.0
创建一个web控制台来触发这个流程
一、实现的业务流程
1、web端输入部署脚本并将该脚本保存至服务器
2、web端点击部署
3、web服务器执行git命令:clone、checkout、pull等选择并更新需要部署的分支
4、web服务器执行部署脚本:build执行的Dockerfile文件,并启动该容器
5、web服务器执行命令检查容器是否启动成功,curl测试服务是否部署成功
6、最终响应至web控制台部署结果
二、技术栈
语言:python
web框架:Flask
第三方库:GitPython(运行git命令)
Comments | NOTHING