zoukankan      html  css  js  c++  java
  • Docker通过阿里云镜像仓库使用Gitlab_CI部署SpringBoot项目

    Docker、Gitlab、阿里云镜像仓库、SpringBoot的相关安装、搭建这里就不讲了。

    使用环境为:

    jdk 1.8.0_131
    Docker Version:20.10.6
    CentOS Linux release 8.1.1911 (Core)
    SpringBoot 2.1.7.RELEASE
    

      

    一、配置Runner

      1、Gitlab 项目的设置 --->CI/CD--->Runer,展开看到 URL 和注册令牌。

      2、进入安装好Gitlab-Runner的服务器,开始注册

    [linnuo@mt5-product ~]$ sudo gitlab-runner register  # 注册指令
    Runtime platform                                    arch=amd64 os=linux pid=8551 revision=c1edb478 version=14.0.1
    WARNING: Running in user-mode.                    
                                                       
    Enter the GitLab instance URL (for example, https://gitlab.com/):
    http://gitlab.bosenkeji.cn/  # Runner 的 URL
    Enter the registration token:
    2sSYuzj95V5xduf4oJXV  # 注册令牌
    Enter a description for the runner:
    [mt5-product]: robot-shop-prod  # Runner 描述
    Enter tags for the runner (comma-separated):
    robot-shop-prod-tag  # tag 名称,描红,要用的
    Registering runner... succeeded                     runner=2sSYuzj9
    Enter an executor: docker+machine, docker-ssh+machine, docker, shell, ssh, virtualbox, kubernetes, custom, docker-ssh, parallels:
    shell  #根据情况选,shell是最简单
    Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
    

      Runner registered successfully. 注册成功,刷新Gitlab页面即可看到刚注册的Runner

       如果是灰色三角形提示,先移除Runer,再用 sudo gitlab-runner register 命令注册

      3、重启Runner

    gitlab-runner restart
    

      

    二、在阿里云镜像服务创建命名空间、创建镜像仓库

    三、程序配置

      先看目录不迷糊!!!!

      1、pom.xml 在 plugins 节点添加 dockerfile-maven-plugin 配置

    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <version>1.4.13</version>
    </plugin>
    

      

      2、在根目录创建 .gitlab-ci.yml 文件

    # 定义执行阶段  顺序执行
    stages:
      - client
    #定义变量
    variables:
      CI_REGISTRY: registry.cn-hangzhou.aliyuncs.com   # 地址
      CI_NAMESPACE: bosen                   # 命名空间
      CI_CLIENT_IMAGE: shop-client-prod          # 仓库名称
      VERSION: v0.0.1
      CI_REGISTRY_CLIENT_IMAGE: ${CI_REGISTRY}/${CI_NAMESPACE}/${CI_CLIENT_IMAGE}:${VERSION}
    # 第1步
    client:
      image: maven:3-jdk-8  # 打个maven镜像
      stage: client
      only:
        - master  # 提交到 gitlab 的 master 分支才会执行
      script:  # 具体的执行脚本
        - mvn clean package
        # 创建shop-client镜像
        - sudo docker build -t $CI_REGISTRY_CLIENT_IMAGE -f ./shop-client/Dockerfile . # 结合目录看
        # 推送到阿里云镜像库
        - sudo docker push $CI_REGISTRY_CLIENT_IMAGE
        # 从阿里云拉取镜像
        - sudo docker pull $CI_REGISTRY_CLIENT_IMAGE
        # 先把之前存在的容器删除
        - CONTAINER_ID=$(sudo docker container ps -a -f "name=$CI_CLIENT_IMAGE" --format {{.ID}})
        - echo "previous container id is $CONTAINER_ID"
        - if [ -z "$CONTAINER_ID" ]; then echo "没有运行的容器";else sudo docker stop $CONTAINER_ID;sudo docker rm $CONTAINER_ID; fi
        # 把之前同名同版本的镜像A删除,否则A标签会变为 <none>
        - EXIST_IMAGES=$(sudo docker images -f="dangling=true" -f "label=name=$CI_CLIENT_IMAGE" -f "label=version=$VERSION" --format {{.ID}})
        - if [ -z "$EXIST_IMAGES" ]; then echo "没有冲突镜像";else sudo docker rmi $EXIST_IMAGES; fi
        # 获取最新镜像
        - IMAGE_ID=$(sudo docker images -f="dangling=false" -f "label=name=$CI_CLIENT_IMAGE" -f "label=version=$VERSION" --format {{.ID}})
        - echo "current image id is $IMAGE_ID"
        ### 重新构建镜像,8181端口是服务器的端口,8080端口是容器的端口,即项目中设置的端口(默认8080)
        - sudo docker run -d --name $CI_CLIENT_IMAGE --net=host $IMAGE_ID  # --net=host 容器和宿主机同端口
    tags:
      - robot-shop-prod-tag # 还记得上面标红处么?与其一致

      

      3、在项目目录下创建 Dockerfile 文件

    # 基础镜像使用Java
    FROM java:8
    LABEL name=shop-client-prod
    LABEL version=v0.0.1
    # 将jar包添加到容器中并更名为
    # 注意:这个jar包文件名,在服务器目录查看
    COPY /shop-client/target/shop-client-1.0-SNAPSHOT.jar /usr/local/app/shop-client.jar
    # 容器暴露端口
    EXPOSE 7071
    # 这个暂且不用
    # COPY target/lib /app/lib
    ENTRYPOINT ["nohup","java","-Djava.security.egd=file:/dev/./urandom","-jar","-Dspring.profiles.active=dev","/usr/local/app/shop-client.jar", "&"]

      

    四、检查

      1、将代码提交到 git 的 master 分支,进入Gitlab 项目的 CI/CD--->流水线,可以看到执行情况(阶段:详细执行情况,报错看它)

       如果提醒端口被占用,请修改 Dockerfile 的 EXPOSE 或者调整宿主机端口

      第一次配置的 dev分支 遇到很多坑,写这篇文章时已经是第二次操作,很多问题没体现出来,大神们用这篇文章指引时遇到问题欢迎留言 

      

  • 相关阅读:
    android.graphics(2)
    Android 性能优化:字体 (为自定义字体提供字体内存缓存)
    管道相关函数(1)-pipe
    【译】用boosting构建简单的目标分类器
    Ubuntu下matlab快捷键设置
    mysql导入sql文件,乱码,一个例子
    PHOG特征
    图像卷积、相关以及在MATLAB中的操作
    matlab实现hog特征
    操蛋的CTex
  • 原文地址:https://www.cnblogs.com/linnuo/p/14981547.html
Copyright © 2011-2022 走看看