特此记录-使用gitlab ci和 dockerfile和docker-compose 持续集成部署多个项目

这种方式可以同时运行多个maven子项目

所有的代码都在gitlab.yml 和dockerfile和docker-compose 中完成的
包括jdk和maven环境以及打包部署启动

首先看下项目的目录结构和Dockerfile以及gitlab-ci文件的放置位置
在这里插入图片描述

说明:
目前结果是 只有单独打包后的jar生成的镜像.,其他操作不在最后的jar中(分离)
1.根目录下的 Dockerfile文件是搭建 jdk和maven的环境和配置环境变量的镜像
2.根目录下的 Dockerfile2文件是单独的在docker中进行mvn打包命令的
2.api和dispatch目录下的Dockerfile文件是创建对应jar的镜像
3.docker-compose文件是运行启动jar的
4.gitlab ci 是执行运行这些文件的总文件

安装gitlab-runner 和注册就不说明了,上篇文章有写到。。。 直接来看重要的几个文件

.gitlab-ci.yml

主要分三个步骤,第一个是创建基础镜像,第二步是创建执行maven的镜像并且拷贝对应的jar包到宿主机,然后创建api和dispatch的镜像,然后api和dispatch中从宿主机去copy打包好的jar。第三步是启动执行docker-compose

stages:
  - build
  - package
  - deploy

build:
  stage: build
  script:
    # 判断是否存在,通过Dockerfile生成java:1.8 镜像(只需要执行一次)
    #- if [ $( docker images java:1.8) ]; then echo "1" else docker build -t java:1.8 -f ./Dockerfile . ;fi
    - docker build -t java:1.8 -f ./Dockerfile .

  tags:
    # 执行Job的服务器
    - smart
  only:
    # 只有在master分支才会执行
    - master

package:
  stage: package
  script:
    # 执行 mvn命 令
    - docker build -t mvn -f ./Dockerfile2 .
    #拷贝mvn镜像 临时文件save下的jar包到 宿主机65上的tt目录下
    - docker run  -v $PWD/tt:/home/save  mvn
    # 通过Dockerfile生成smart-ele-api镜像
    - docker build -t smart-ele-api -f ./smart-ele-api/Dockerfile .
    # 通过Dockerfile生成smart-ele-dispatch镜像
    - docker build -t smart-ele-dispatch -f ./smart-ele-dispatch/Dockerfile .

  artifacts:
    when: on_success
    paths:
      - target/
  tags:
    # 执行Job的服务器
    - smart
  only:
    # 只有在master分支才会执行
    - master


deploy:
  stage: deploy
  script:
    # 通过镜像启动容器,并把本机8001端口映射到容器8001端口
    - docker-compose up -d

  artifacts:
    when: on_success
    paths:
      - target/
  tags:
    # 执行Job的服务器
    - smart
  only:
    # 只有在master分支才会执行
    - master

根目录的dockerfile


FROM docker.io/library/centos:latest

RUN yum -y install wget
#构建 maven 环境
RUN cd /usr/local
RUN mkdir maven
RUN chmod 777 -R maven
RUN wget -P /usr/local/maven http://apache-mirror.rbc.ru/pub/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
RUN cd /usr/local/maven && tar -zxvf apache-maven-3.6.3-bin.tar.gz
RUN export PATH=apache-maven-3.6.3/bin:$PATH
RUN export PATH=/usr/local/maven/apache-maven-3.6.3/bin:$PATH
RUN echo $PATH

#构建java jdk1.8环境
RUN cd /usr/local
RUN mkdir jdk8
RUN chmod 777 -R jdk8
RUN wget  -P /usr/local/jdk8 --no-check-certificate --no-cookies --header "Cookie:oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz
RUN cd /usr/local/jdk8 && tar -zxvf jdk-8u141-linux-x64.tar.gz


ENV JAVA_HOME /usr/local/jdk8/jdk1.8.0_141
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
#执行环境变量
#ENV JAVA_HOME /usr/local/jdk8/jdk1.8.0_141
#ENV M2_HOME /usr/local/maven/apache-maven-3.6.3
#ENV PATH $PATH:$JAVA_HOME/bin:$M2_HOME/bin```



根目录的dockerfile2


FROM java:1.8
#工作目标目录
WORKDIR /home
#拷贝项目到docker中,然后进行打包jar
COPY  /  .
RUN ls /home \
    && mkdir /save
#maven 打包
RUN mvn clean  install -pl smart-ele-common  -am
RUN mvn clean  install -pl smart-ele-api -am
RUN mvn clean  install -pl smart-ele-dispatch -am
#RUN ls /home/smart-ele-common/target
#RUN ls /home/smart-ele-api/target
#RUN ls /home/smart-ele-dispatch/target
ENTRYPOINT  cp /home/smart-ele-api/target/smart-ele-api.jar /home/save/ &&   cp /home/smart-ele-dispatch/target/smart-ele-dispatch.jar /home/save/
#执行 复制命令
#ENTRYPOINT  cp /home/pom.xml /home/save/ && cp /home/README.md /home/save/

api的dockerfile


FROM java:8

#工作目标目录
WORKDIR /home

#RUN ls /home/
COPY tt/smart-ele-api.jar  .
#COPY tt/  .
#RUN ls /home


#暴露端口
EXPOSE 8877

dispatch的dockerfile


FROM java:8

#工作目标目录
WORKDIR /home
COPY tt/smart-ele-dispatch.jar  .
#RUN ls /home
#暴露端口
EXPOSE 8855


docker-compose.yml

version: "3"

services:
  smart-ele-api:
    image: smart-ele-api
    ports:
      - "8877:8877"
    entrypoint : ["nohup","java", "-jar", "/home/smart-ele-api.jar"]
  smart-ele-dispatch:
    image: smart-ele-dispatch
    ports:
      - "8855:8855"
    entrypoint : ["nohup","java", "-jar", "/home/smart-ele-dispatch.jar"]


效果图

在这里插入图片描述
命令
查看dockers-compose执行的日志文件
首先要进入到该compose-yml文件的目录(也就是生成的项目路径)----然后执行
sudo docker-compose logs -f smart-ele-api

停止也是在该目录下直接 sudo docker-compose down(直接项目停止容器删除)

删除镜像根据名称和版本号(tag)sudo docker image rm smart-ele-dispatch1:latest

参考上一篇: https://blog.csdn.net/weijx_/article/details/111033457

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值