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

   

  3、重啟Runner

gitlab-runner restart

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

 

二、在阿里雲鏡像服務創建命名空間、創建鏡像倉庫

 

三、程序配置

  先看目錄不迷糊!!!!

 

  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分支 遇到很多坑,寫這篇文章時已經是第二次操作,很多問題沒體現出來,大神們用這篇文章指引時遇到問題歡迎留言 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM