CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集

news2025/1/11 23:46:39

CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集

  • CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集
    • 安装
      • Docker
      • GitLab
      • GitLab-Runner
      • 阿里云容器仓库
    • GitLab-CI
      • Java微服务的GitLab-CI应用

CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集

日常开发中,每次代码编写完成后,都需要手动打包,并且上传服务器,无论本地打包的时间或者上传文件到服务器都需要花费大量的时间来完成,都是重复的并且毫无意义,应该将时间花费在更有价值的时间上;所以编写这篇文章,将自己收集、搭建、测试的步骤或经验汇总一下,也欢迎大家提出或一起讨论更好的解决方案。

前置技能

  • Shell简单脚本编写(此项满足则说明了解并能够使用Linux)
  • Docker
  • Git
  • Java(可选,既然看了这篇文章,这个会的吧,不过无论自动化部署什么,原理都是相通的)

安装

因为都是本地测试,采用Docker容器来进行快速安装,减少部署所花费的时间,并且大部分之前都有写过对应的安装文章,这里就不重复粘贴了。

Docker

Docker离线安装

GitLab

Docker GitLab安装

GitLab-Runner

Docker GitLab-Runner安装

阿里云容器仓库

(未使用跳过),原本打算使用Harbor镜像私服仓库或者阿里云容器仓库,发现可以省略此步骤,将打包好的docker镜像直接通过宿主机运行(需要Runner配置docker in docker)。

GitLab-CI

进入到CI/CD的核心,语法部分,都是死的,这里推荐一篇文章,原本是b站的视频,发现有对应文章就直接浏览了一遍文章再进行测试,文章链接。

Java微服务的GitLab-CI应用

  1. 拉取gitlab-ci模版仓库,并上传到自己的gitlab上(注意CI/CD引入模版的代码仓库需要此仓库权限)

gitlab-ci模版仓库(develop分支):https://github.com/zsl0/devops-ci-template.git

  1. Java仓库项目目录下创建.gitlab-ci.yml文件

请添加图片描述

简化版本,能够满足代码提交后自动docker运行,注意需要根据需要运行的辅助配置stage为deploy的job任务,如下面配置的gatewayadmin服务器自动化部署,需要配置variables的三个变量IMAGE_NAMEMODULE_PATHJAR_NAME,分别对应服务名、服务模块相对路径、打包后的jar包名称。

项目相对路径:

请添加图片描述

.gitlab-ci.yml配置:

include:
  - project: 'zsl0/devops-ci-template'
    ref: develop
    file: 'templates/default-pipeline.yml'

variables:
  ## 全局配置
  GIT_CLONE_PATH: ${CI_BUILDS_DIR}/builds/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_PIPELINE_ID}
  GIT_CHECKOUT: "false"
  CACHE_DIR: "**/target/**.jar"

  ## 作业控制
  RUN_PIPELINE_BUILD:   "yes"     #是否运行构建 yes/no
  RUN_PIPELINE_TEST:    "no"      #是否运行测试 yes/no
  RUN_CODE_ANALYSIS:    "no"     #是否代码扫描 yes/no
  RUN_BUILD_IMAGE:      "no"     #是否生成镜像 yes/no
  RUN_DEPLOY_ARTIFACTS: "no"      #是否上传制品 yes/no
  RUN_DEPLOY_K8S:       "no"     #是否发布K8S yes/no
  RUN_DEPLOY_DOCKER:    "yes"     #是否发布DOCKER yes/no

  ## 依赖容器镜像
  BUILD_IMAGE: "registry.cn-hangzhou.aliyuncs.com/zsl0/maven-build:0.0.2"
  CURL_IMAGE: "curlimages/curl:7.70.0"
  SONAR_IMAGE: "sonarsource/sonar-scanner-cli:latest"
  KUBECTL_IMAGE: "lucj/kubectl:1.17.2"


  ## 构建测试参数
  MAVEN_OPTS: "-Dmaven.repo.local=/home/gitlab-runner/ci-build-cache/maven "  #maven构建参数
#  BUILD_SHELL: 'mvn clean package  -DskipTests -P zsl0-prod'   #构建命令
  BUILD_SHELL: 'mvn clean package  -DskipTests -P hxkj-dev'   #构建命令
  #GRADLE_OPTS: ""               #gradle构建参数

  ## 单元测试参数
  TEST_SHELL : 'mvn test   '       #测试命令
  JUNIT_REPORT_PATH: 'target/surefire-reports/TEST-*.xml'   #单元测试报告                                #项目扫描参数

  ## 构建镜像
  #CI_REGISTRY: 'registry.cn-beijing.aliyuncs.com'               #镜像仓库地址
  #CI_REGISTRY_USER: '610556220zy'                               #仓库用户信息
  #CI_REGISTRY_PASSWD: 'xxxxxxxx.'                              #仓库用户密码
  IMAGE_NAME: "${CI_REGISTRY}/${CI_PROJECT_PATH}:${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}"     #镜像名称
  DOCKER_FILE_PATH: "./Dockerfile"                              #Dockerfile位置

  ## 上传制品库(artifactory)
  #ARTIFACTORY_URL: "http://192.168.1.200:30082/artifactory"     #制品库地址
  #ARTIFACTORY_NAME: "${CI_PROJECT_NAMESPACE}"                   #制品库名称
  #ARTIFACT_PACKAGE: "jar"                                       #制品类型
  #ARTIFACT_PATH: "target/*.${ARTIFACT_PACKAGE}"                 #制品位置
  #TARGET_FILE_PATH: "${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}"   #目标制品位置(目录结构)
  #TARGET_ARTIFACT_NAME: "${CI_PROJECT_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}.${ARTIFACT_PACKAGE}"   #目标制品名称

  ## 部署应用k8s
  APP_NAME: "$CI_PROJECT_NAME"                #应用名称 <-->deploymentName
  CONTAINER_PORT: "8081"                      #服务端口 <--> servicesPort
  NAMESPACE: "$CI_PROJECT_NAME-$CI_PROJECT_ID-$CI_ENVIRONMENT_SLUG"             #名称空间
  ENV_URL: "${ENV_NAME}.${CI_PROJECT_NAMESPACE}.${CI_PROJECT_NAME}.devops.com"  #IngressHosts

cache:
  paths:
    # 后续修改解决mvn打包repository缓存问题,需要根据路径设置本地仓库路径
    - /root/.m2/repository
    - /opt/repository
    - ~/.m2/repository
    - ${CACHE_DIR}

## 构建作业
build:
  # 指定Runner,不指定默认使用共享Runner
  tags:
    - runner-java

## 部署
## gateway Docker自动化部署
deploy-gateway:
  stage: deploy
  image: docker:latest
  tags:
    - runner-java
  extends: .deploy_docker
  variables:
    # 镜像名称,默认使用服务名
    IMAGE_NAME: "gateway"
    # 模块路径
    MODULE_PATH: "data-center/gateway/"
    # jar包名称
    JAR_NAME: gateway.jar

## gateway Docker自动化部署
deploy-admin-server:
  stage: deploy
  image: docker:latest
  tags:
    - runner-java
  extends: .deploy_docker
  variables:
    # 镜像名称,默认使用服务名
    IMAGE_NAME: "admin-server"
    # 模块路径
    MODULE_PATH: "data-center/admin/admin-server/"
    # jar包名称
    JAR_NAME: admin-server.jar

  1. 创建Dockerfile_template模版
FROM openjdk:11

MAINTAINER 249269610@qq.com

WORKDIR /opt/jar

RUN mkdir -p /opt/shell/
#ADD /zsl0/shell/ /opt/shell/

RUN mkdir -p /opt/jar/
ADD MODULE_PATH/target/JAR_NAME /opt/jar/java-program.jar

ENTRYPOINT ["java", "-jar"]
CMD ["java-program.jar"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1128131.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix自定义监控项监控进程状态

agent服务端配置 自定义监控项脚本 # 文件路径: C:\zabbix_agent2-6.0.4-windows-amd64-static\conf\a.bat echo off setlocalset "processNameo2Popper.exe"tasklist /FI "IMAGENAME eq %processName%" 2>NUL | find /I /N "%processName%"…

微信小程序抓包及测试

目录 环境准备 小程序反编译 一不小心getshell 本来只想写个抓包反编译过程&#xff0c;没想到大肠包小肠有意外收获 网上大多数的小程序测试抓包都是用的安卓模拟器&#xff0c;这里使用的是BurpSuiteProxifer微信客户端的抓包方式 环境准备 Burp2023.9.2 Proxifier4.5…

darknet框架 训练分类模型及测试图片

darknet 框架的Yolo模型大概已经没什么公司使用了&#xff0c;对于老项目的维护可能新手需要了解下&#xff0c;然而 darknet架构并不十分友好&#xff0c;新手入手门槛比较高&#xff0c;特别是做分类任务时&#xff0c;简直了&#xff01;&#xff01;&#xff01; 博主也是走…

交传翻译在不同场合的差异,你了解多少?

交替传译就是指译员在讲话人发言后&#xff0c;将目标语言准确翻译出来的口译方式。两会期间的新闻发布会就是采用交传。与同传相比&#xff0c;交传更具挑战性&#xff0c;因为译员需要承受与听众直接交流的压力&#xff0c;同时也需要充分理解源语言的内容并进行适当的结构调…

日志报错 fork:Cannot allocate memory

现象描述 日志中出现报错信息 “fork&#xff1a;Cannot allocate memory”。如下图所示&#xff1a; 可能原因 可能是进程数超限导致。系统内部的总进程数达到了 pid_max 时&#xff0c;再创建新进程时会报 “fork&#xff1a;Cannot allocate memory” 错。 解决思路 1. …

有效防止重要需求遗漏的几点建议

防止重要需求的遗漏&#xff0c;保障需求的完整性&#xff0c;这直接关系着项目的成功和客户的满意度。如果关键需求被遗漏或忽视&#xff0c;项目可能无法达到预期的目标和交付成果&#xff0c;无法满足用户的需求和期望&#xff0c;直接影响产品的市场竞争力。 因此确保需求的…

哪吒X选车指南:推荐哪吒X 500lite 版

当下,紧凑型纯电动SUV市场新车不断,可选项越来越多。最近哪吒汽车又上市一款“大气舒适新标杆”——哪吒X,限时权益价10.88万元-12.88万元,以大空间,超舒适,更安全等优势,强势对标AION Y Plus和元Plus等车型。 很多有购车打算的消费者看过价格和配置,直呼哪吒X是“性价比显眼包…

【linux】SourceForge 开源软件开发平台和仓库

在linux上面安装服务和工具。我们经常会下载安装包。今天推荐一个网站。 SourceForge 开源软件开发平台和仓库 ​ 全球最大开源软件开发平台和仓库 SourceForge.net&#xff0c;又称SF.net&#xff0c;是开源软件开发者进行开发管理的集中式场所。 SourceForge.net由VA Softwa…

JavaScript_Pig Game摇骰子

对于一个大的项目&#xff0c;画流程图是一种特别好的方式&#xff01; ● 我们首先把页面上的重置游戏、掷色子、切换用户存入变量中 const btnNew document.querySelector(.btn--new); const btnRoll document.querySelector(.btn--roll); const btnHold document.quer…

GoLong的学习之路(八)语法之Map

文章目录 Map初始化方式判断某个键是否存在map的遍历对value值遍历。对key值遍历 使用delete()函数删除键值对按照指定顺序遍历map元素为map的切片值为切片类型的map 做个题吧 Map 哈希表是一种巧妙并且实用的数据结构。它是一个无序的key/value对的集合&#xff0c;其中所有的…

Day 10 python学习笔记

高阶函数 map( ) map()函数接收两个参数&#xff0c;一个是函数&#xff0c;一个是Iterable&#xff0c;map将传入的函数依次作用到序列的每个元素&#xff0c;并把结果作为新的Iterator返回。&#xff08;Iterator是一个可迭代对象&#xff09; 再简单点说&#xff1a;从可迭代…

跨境电商的发展趋势及语言翻译的重要性

随着全球化的不断深入和互联网技术的普及&#xff0c;跨境电商在过去几年内得到了快速发展。跨境电商指的是企业通过电子商务平台销售商品或服务给其他国家或地区的消费者。这种模式不仅打破了传统国际贸易的限制&#xff0c;也为企业提供了更广阔的市场空间。 跨境电商的快速发…

音视频技术开发周刊 | 316

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 日程揭晓&#xff01;速览深圳站大会专题议程详解 LiveVideoStackCon 2023 音视频技术大会深圳站&#xff0c;保持着往届强大的讲师阵容以及高水准的演讲质量。两天的参会…

河南工业大学人工智能与大数据学院学子在第三届“火焰杯”软件测试开发选拔赛中 取得佳绩

近日&#xff0c;第三届“火焰杯”软件测试开发选拔赛落下帷幕&#xff0c;我校人工智能与大数据学院选派的多名参赛选手在王雪涛老师的指导下&#xff0c;经过激烈的角逐&#xff0c;取得优异成绩。其中&#xff0c;何鸿彬&#xff0c;贾文聪获得决赛二等奖&#xff0c;王静宇…

【PyTorch】深度学习实践 01 Overview

人工智能概述 课程前置知识 线性代数 概率论 &#xff08;不要有路径依赖&#xff0c;遇到不会的就现学&#xff09;Python基础 人工智能 问题分类 人工智能&#xff0c;实际上就是利用计算机来代替人脑进行智能工作&#xff0c;计算机所要实现的智能可以分为两大部分&am…

腾讯待办是不是停了?能准时提醒待办事项的APP

有不少网友会使用“腾讯待办”小程序来记录待办的事情&#xff0c;并且设置提醒时间&#xff0c;进行任务管理。不过有不少网友最近在使用腾讯待办小程序的时候&#xff0c;看到了“业务关停通知”的弹窗&#xff0c;想问一下&#xff0c;腾讯待办是不是停了&#xff1f;确实如…

JS多选答题时,选项互斥时的情况

在做答题类的项目时&#xff0c;应该会比较常见多选题选相互斥的问题&#xff0c;例如&#xff1a; 你喜欢什么颜色&#xff1f;&#xff08;&#xff09;A、红色B、紫色C、蓝色D、灰色E、均无如该题&#xff0c;当选择选项E时&#xff0c;明显与其他选项互斥。这个时候经常会…

《作为一名编程新手,如何提升编程能力》

互联网行业是一个充满挑战且内卷比较严重的行业&#xff0c;程序员如何让自己在行业内一直保持竞争力&#xff0c;其实就是需要通过不断的学习提升自己&#xff0c;那么对于一个刚刚入门的新手&#xff0c;如何快速的提升自己呢&#xff1f;本文就和大家交流下入门级程序员想要…

Vue中linq的应用及语句示例

一、运行npm install linq 二、引入linq&#xff08;在你需要用到的组件中引入&#xff09; var Enumerable require(linq); linq并不需要在main.js中import和Vue.use(linq) 三、linq的具体应用 &#xff08;1&#xff09;linq.js 的方法解析说明&#xff08;但是在不同的…

【Python】机器学习-K-近邻(KNN)算法【文末送书】

目录 一 . K-近邻算法&#xff08;KNN&#xff09;概述 二、KNN算法实现 三、 MATLAB实现 四、 实战 一 . K-近邻算法&#xff08;KNN&#xff09;概述 K-近邻算法&#xff08;KNN&#xff09;是一种基本的分类算法&#xff0c;它通过计算数据点之间的距离来进行分类。在…