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

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"]

其他问题

Maven本地仓库缓存

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

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=/.m2/repository "  #maven构建参数
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GitLab CI/CD 是一个强大的持续集成和持续交付工具,可以用于自动化 Android 应用程序的构建、测试和部署过程。以下是一些关于 GitLab CI/CD 和 Android 自动化的常见问题和解答: 1. 如何在 GitLab 中配置 Android 的 CI/CD? 在 GitLab 中配置 Android 的 CI/CD 可以通过编写一个名为 `.gitlab-ci.yml` 的配置文件来实现。该文件将定义构建、测试和部署的步骤。你可以使用 Android Gradle 插件执行构建和测试任务,然后使用 Gradle 插件将应用程序部署到设备或模拟器。 2. 如何执行 Android 构建和测试任务? 在 `.gitlab-ci.yml` 文件中,你可以使用 `before_script` 部分指定运行构建和测试任务所需的环境设置,例如安装 JDK、Android SDK 和 Gradle。然后,你可以使用 `script` 部分指定实际的构建和测试命令,例如运行 `gradlew assemble` 构建 APK 文件,或者运行 `gradlew test` 执行单元测试。 3. 如何在 GitLab CI/CD 中执行 Android 设备或模拟器上的 UI 测试? 如果你想在设备或模拟器上执行 UI 测试,你可以使用一些工具,例如 Espresso、UI Automator 或 Appium。你可以在 `script` 部分中运行适当的命令来启动设备或模拟器,并执行 UI 测试步骤。 4. 如何将 Android 应用程序部署到实际设备或应用商店? 在 GitLab CI/CD 中,你可以使用 Gradle 插件和适当的脚本命令将 Android 应用程序构建输出部署到实际设备或应用商店。你可以使用 `gradlew assembleRelease` 构建发布版本,并使用适当的脚本命令将 APK 文件上传到 Google Play Store 或其他应用商店。 这些是关于 GitLab CI/CD 和 Android 自动化的一些基本信息。当然,具体的配置和步骤可能因项目的需求和环境而有所不同。希望这些信息对你有所帮助!如果你有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值