Docker-CI
1、思考:Docker-CI 能干什么、为我们解决了什么问题?
1、每天会频繁的将代码合并的主分支上:快速定位错误代码位置,防止偏离主干。
2、每天频繁的从gitlab上拉取最新版本的代码,并且将其部署到Linux操作系统中,测试新功能和老功能是否可以兼容。
- 修改Windows的环境,改成Linux下的环境。
- 将项目打成一个war包。
- 将其复制到tomcat的webapps目录下,运行。
3、Gitlab-Runner可以帮助我们将上述频繁操作,但是重复的流程封装起来。
4、每当我推送代码到Git远程仓库时,他会自动将最新版本的代码部署到指定的Linux服务上。
5、已经准备好Gitlab仓库。
2、安装GitLab-Runner
在资料中准备了一个docker-compose.yml和一个environment目录。
docker-compose.yml:
- 基于environment中的一个Dockerfile构建了一个自定义镜像。
- environment/Dockerfile:
- FROM gitlab-runner:bleeding
- 安装Docker:
- 设置aliyun镜像源。
- 安装Docker需要的环境。
- 安装Docker。
- 设置Docker的私服配置文件。
- 安装docker-compose文件。
- 直接通过COPY和RUN导入镜像中。
- 安装JDK。
- 直接通过COPY和RUN导入镜像中。
- 安装Maven。
- 直接通过COPY和RUN导入镜像中。
- 配置了JDK和Maven的环境变量。
- 在启动自定义镜像前,先设置宿主机Docker的拥有者:
- 通过docker-compose up -d --build 运行Gitlab-Runner自定义镜像
- 等容器启动成功,docker exec -it gitlab-runner usermod -aG root gitlab-runner将容器内部的Docker和宿主机上的Docker绑定。
3 将GitLab-Runner和GitLab绑定到一起
- 在GitLab-Runner容器启动成功后,执行:
docker exec -it gitlab-runner gitlab-runner register
-
回到GitLab仓库中,创建了一个工程,命名为testci。
-
如图找到Gitlab的地址和token
按照Xterm给予的提示,指定: -
GitLab路径。
-
Token。
-
描述。(随便写)
-
指定什么时候执行Runner:deploy。
-
以那种方式操作:Shell。
指定不需要标签也执行ci操作.
4.测试CI
1、创建maven项目,war项目。
2、创建一个HTML页面。
3、提交代码到GitLab仓库。
4、添加一个.gitlab-ci.yml文件。
stages:
- test
# 保证现在的三个test是一致的即可.
test:
stage: test
script:
- echo this is my first ci
- pwd
5、查看ci的控制台。
5.使用CI部署工程
- 脚本文件是在项目路径下执行的。
- 使用maven将项目打成war包,使用mvn命令的绝对路径。
- 在项目目录下创建docker-compose.yml文件,Dockerfile文件。
- 使用copy目录将target目录下的war复制到了Dockerfile同级目录下。
- 停止并删除容器。
- 启动并重新构建镜像和容器。
stages:
- test
test:
stage: test
script:
- echo this is my first ci
- pwd
- /usr/local/maven/apache-maven-3.6.3/bin/mvn clean package -DskipTests # 打包
- cp target/test-ci-1.0-SNAPSHOT.war ./test-ci-1.0-SNAPSHOT.war # 复制war包到Dockerfile路径
- docker-compose down # 先关闭并且删除容器
- docker-compose up -d --build # 启动并制作自定义镜像和容器
- docker image prune -f # 删除名称为<none>的自定义镜像