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

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

  • CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集
    • 安装
      • Docker
      • GitLab
      • GitLab-Runner
      • 阿里云容器仓库
    • GitLab-CI
      • Java微服务的GitLab-CI应用
    • 其他问题
      • Maven本地仓库缓存

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: developfile: '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/noRUN_PIPELINE_TEST:    "no"      #是否运行测试 yes/noRUN_CODE_ANALYSIS:    "no"     #是否代码扫描 yes/noRUN_BUILD_IMAGE:      "no"     #是否生成镜像 yes/noRUN_DEPLOY_ARTIFACTS: "no"      #是否上传制品 yes/noRUN_DEPLOY_K8S:       "no"     #是否发布K8S yes/noRUN_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}"   #目标制品名称## 部署应用k8sAPP_NAME: "$CI_PROJECT_NAME"                #应用名称 <-->deploymentNameCONTAINER_PORT: "8081"                      #服务端口 <--> servicesPortNAMESPACE: "$CI_PROJECT_NAME-$CI_PROJECT_ID-$CI_ENVIRONMENT_SLUG"             #名称空间ENV_URL: "${ENV_NAME}.${CI_PROJECT_NAMESPACE}.${CI_PROJECT_NAME}.devops.com"  #IngressHostscache:paths:# 后续修改解决mvn打包repository缓存问题,需要根据路径设置本地仓库路径- /root/.m2/repository- /opt/repository- ~/.m2/repository- ${CACHE_DIR}## 构建作业
build:# 指定Runner,不指定默认使用共享Runnertags:- runner-java## 部署
## gateway Docker自动化部署
deploy-gateway:stage: deployimage: docker:latesttags:- runner-javaextends: .deploy_dockervariables:# 镜像名称,默认使用服务名IMAGE_NAME: "gateway"# 模块路径MODULE_PATH: "data-center/gateway/"# jar包名称JAR_NAME: gateway.jar## gateway Docker自动化部署
deploy-admin-server:stage: deployimage: docker:latesttags:- runner-javaextends: .deploy_dockervariables:# 镜像名称,默认使用服务名IMAGE_NAME: "admin-server"# 模块路径MODULE_PATH: "data-center/admin/admin-server/"# jar包名称JAR_NAME: admin-server.jar
  1. 创建Dockerfile_template模版
FROM openjdk:11MAINTAINER 249269610@qq.comWORKDIR /opt/jarRUN mkdir -p /opt/shell/
#ADD /zsl0/shell/ /opt/shell/RUN mkdir -p /opt/jar/
ADD MODULE_PATH/target/JAR_NAME /opt/jar/java-program.jarENTRYPOINT ["java", "-jar"]
CMD ["java-program.jar"]

其他问题

Maven本地仓库缓存

根据 参考文章 选择在配置文件中添加 /.m2缓存目录,并在指定mvn指定 /.m2/repository仓库目录:

variables:MAVEN_OPTS: "-Dmaven.repo.local=/.m2/repository "  #maven构建参数

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贪心算法学习——最大数

目录 ​编辑 一&#xff0c;题目 二&#xff0c;题目接口 三&#xff0c;解题思路级代码 一&#xff0c;题目 给定一组非负整数 nums&#xff0c;重新排列每个数的顺序&#xff08;每个数不可拆分&#xff09;使之组成一个最大的整数。 注意&#xff1a;输出结果可能非常大…

虹科分享 | 买车无忧?AR带来全新体验!

文章来源&#xff1a;虹科数字化与AR 阅读原文&#xff1a;https://mp.weixin.qq.com/s/XsUFCTsiI4bkEMBHcGUT7w 新能源汽车的蓬勃发展&#xff0c;推动着汽车行业加速进行数字化变革。据数据显示&#xff0c;全球新能源汽车销售额持续上升&#xff0c;预计到2025年&#xff0…

港联证券:2万元股票一进一出手续费?

股市生意中的手续费是出资者无法避免的一项费用。关于许多出资者来说&#xff0c;手续费的多少对出资收益有着重要的影响。本文将从多个视点分析2万元股票一进一出手续费&#xff0c;并讨论其对出资者和商场的影响。 首先&#xff0c;从出资者的视点来看&#xff0c;2万元股票…

计算机网络第3章-运输层(2)

可靠数据传输原理 可靠数据传输依靠数据在一条可靠信道上进行传输。 TCP也正是依靠可靠信道进行传数据&#xff0c;从而数据不会被丢失。 而实现这种可靠数据传输服务是可靠数据传输协议的责任 构造可靠数据传输协议 1.经完全可靠信道的可靠数据传输&#xff1a;rdt1.0 在…

眨个眼就学会了PixiJS

本文简介 带尬猴&#xff0c;我是德育处主任 当今的Web开发中&#xff0c;图形和动画已经成为了吸引用户注意力的重要手段之一。而 Pixi.js 作为一款高效、易用的2D渲染引擎&#xff0c;已经成为了许多开发者的首选&#xff08;我吹的&#xff09;。本文将为工友们介绍PixiJS的…

【uniapp】小程序开发7:自定义组件、自动注册组件

一、自定义轮播图组件、自动注册 以首页轮播图组件为例。 1、创建组件文件src/components/my-swipper.vue 代码如下&#xff1a; <template><view><view class"uni-margin-wrap"><swiper class"swiper" circular :indicator-dots…

移动端之Unity嵌入Android项目开发

目录 前言1 搭建开发环境2 创建Unity项目 2.1 新建项目2.2 Unity构建配置2.3 Android环境相关配置2.4 导出Unity库文件3 创建Android项目 3.1 新建Android项目3.2 Android环境相关配置3.2 导入Unity相关的库3.3 Android中跳转到Unity视图4 进阶扩展 4.1 包体积优化 4.1.1 mono…

【html】图片多矩形框裁剪

说明 由于项目中需要对一个图片进行多选择框进行裁剪&#xff0c;所以特写当前的示例代码。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><base href"/"><title>图片裁剪</tit…

LVS+keepalived高可用集群

1、定义 keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用&#xff0c;keepalived实现的是调度器的高可用&#xff0c;但keepalived不只为lvs集群服务的&#xff0c;也可以做其他代理服务器的高可用&#xff0c;比如nginxkeepalived也可实现高可用&#xff08;重…

信道数据传输速率、信号传播速度——参考《天勤计算机网络》

一、缘起题目 二、解析 三、总结 信道数据传输速率和信号传播速度是两个不同的概念。 3.1 信道数据传输速率&#xff08;Channel Data Transfer Rate&#xff09; 指的是在通信系统中&#xff0c;通过信道传输的数据量&#xff0c;通常以 比特率&#xff08;bits per second…

Python 算法高级篇:快速排序的优化算法

Python 算法高级篇&#xff1a;快速排序的优化算法 引言 1. 快速排序的基本原理2. 快速排序的优化技巧2.1 随机选择基准2.2 三分法2.3 小数组使用插入排序 3. 性能比较4. 结论 引言 在计算机科学中&#xff0c;排序是一个基本操作&#xff0c;而快速排序&#xff08; Quick So…

接口自动化测试工具,Postman使用详解

一、概念 1、Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件&#xff0c;Postman分为Postman native app和Postman Chrome app两个版本。目前Chrome app已经停止维护&#xff0c;官方也不推荐使用该版本。 2、官网下载地址&#xff1a;http://www.getpostman…

你绝对不知道的接口加密解决方案:Python的各种加密实现

在现代软件开发中&#xff0c;接口测试已经成为了不可或缺的一部分。随着互联网的普及&#xff0c;越来越多的应用程序都采用了接口作为数据传输的方式。接口测试的目的是确保接口的正确性、稳定性和安全性&#xff0c;从而保障系统的正常运行。 在接口测试中&#xff0c;加密…

吃豆人C语言开发—Day2 需求分析 流程图 原型图

目录 需求分析 流程图 原型图 主菜单&#xff1a; 设置界面&#xff1a; 地图选择&#xff1a; 游戏界面&#xff1a; 收集完成提示&#xff1a; 游戏胜利界面&#xff1a; 游戏失败界面 死亡提示&#xff1a; 这个项目是我和朋友们一起开发的&#xff0c;在此声明一下…

金融行业网络安全保护与三级等保合规实施方案

金融行业网络安全保护与三级等保合规实施方案旨在帮助金融机构实施符合三级等保标准的网络安全保护措施。以下是一个基本的实施方案概述&#xff1a; 评估和规划&#xff1a; 进行风险评估&#xff1a;评估网络系统的风险&#xff0c;确定安全威胁、弱点和潜在风险。 确定等级…

Kafka入门04——原理分析

目录 01理解Topic和Partition Topic(主题) Partition(分区) 02理解消息分发 消息发送到分区 消费者订阅和消费指定分区 总结 03再均衡(rebalance) 再均衡的触发 分区分配策略 RangeAssignor(范围分区) RoundRobinAssignor(轮询分区) StickyAssignor(粘性分区) Re…

基于安卓android微信小程序的校园跑腿系统

项目介绍 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;校园跑腿系统被用户普遍使用&#xff0c;为方便用户能…

Kubernetes(K8S)集群部署

目录 一、创建3台虚拟机 二、为每台虚拟机安装Docker 三、安装kubelet 3.1 安装要求 3.2 为每台服务器完成前置设置 3.3 为每台服务器安装kubelet、kubeadm、kubectl 四、使用kubeadm引导集群 4.1 master服务器 4.2 node1、node2服务器 4.3 初始化主节点 4.4 work节…

腾讯云 AI 绘画:文生图、图生图、图审图 快速入门

腾讯云 AI 绘画是腾讯云推出的一款基于人工智能的图像生成和编辑产品&#xff0c;能够根据输入的图片或描述文本&#xff0c;智能生成与输入内容相关的图片&#xff0c;支持多样化的图片风格选择。 在本文中&#xff0c;我们将介绍如何使用腾讯云 AI 绘画的三项主要功能&#…

如何使用 VuePress 搭建博客网站并 Vercel 部署

先来看一下网站截图&#xff1a; 快速上手 1.创建并进入一个新目录 mkdir vuepress-starter && cd vuepress-starter2.使用你喜欢的包管理器进行初始化 yarn init # npm init3.将 VuePress 安装为本地依赖 yarn add -D vuepress # npm install -D vuepress4.创建你…