Gitlab CI-CD自动化部署SpringBoot项目的方法步骤

下面是Gitlab CI-CD自动化部署SpringBoot项目的方法步骤的完整攻略:

1. 搭建基础环境

在开始之前,需要确定一个服务器或者主机用于进行代码的自动化构建和部署。服务器需要安装以下软件:

  • Gitlab:用于托管代码和CI-CD流程
  • JDK:用于编译和运行SpringBoot项目
  • Maven:用于管理和构建项目依赖
  • Docker:用于打包和运行项目镜像
  • Docker-Compose:用于快速启动和停止多个Docker容器

2. 配置Gitlab Repository

在Gitlab中,需要至少有一个Repository来作为代码的托管和管理。并且需要配置Deployment Token来授权CI-CD Jobs的执行。

  1. 创建Gitlab Repository

在左边的菜单栏中找到“New Project”按钮,点击之后跳转到新项目的创建页面。在这个页面中,可以选择创建空项目或者从模板进行创建。完成这些步骤之后,就可以在新创建的Repository中开始工作了。

  1. 配置Deployment Token

要配置Deployment Token,需要登录到GitLab的第1级管理面板,然后进入项目->Settings->CI/CD页面,再找到“Deploy Tokens”选项卡。

按照提示进行Token的配置,为仓库创建一个读写权限的Token,并保存好Token字符串。

3. 编译和生成Docker镜像

这个步骤包含了将SpringBoot项目编译成Jar包,然后用Jar包生成Docker镜像的流程。

  1. 在项目根目录下增加.gitlab-ci.yml文件。

  2. .gitlab-ci.yml文件中增加下面的代码片段:

# 编译和构建docker镜像的任务定义
build_and_push:
  image: docker:stable
  stage: build
  services:
    - docker:dind
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_REGISTRY: "$CI_REGISTRY" # 这里的CI_REGISTRY是在Gitlab中预定义的变量,可以使用
    DOCKER_NAMESPACE: "my-namespace" # 自定义的命名空间
    IMAGE_NAME: "my-image" # 镜像名称
    IMAGE_VERSION: "$CI_COMMIT_SHA" # 镜像版本使用当前构建的commit sha值
  before_script:
    # 安装Docker Compose
    - apk --update add docker-compose
    # 登录到Gitlab Docker Registry
    - echo "$CI_JOB_TOKEN" | docker login -u "$CI_REGISTRY_USER" --password-stdin "$CI_REGISTRY"
  script:
    - mvn package -Dmaven.test.skip=true # 编译项目,生成jar包
    - docker-compose build # 构建docker镜像
    - docker push $DOCKER_REGISTRY/$DOCKER_NAMESPACE/$IMAGE_NAME:$IMAGE_VERSION # 推送镜像到Gitlab Registry
  only:
    - master # 仅在master分支提交代码时执行

上述代码实现的是将代码从Gitlab仓库中自动拉取,然后使用Maven进行构建,然后使用Docker-Compose打包生成Docker镜像,最后将Docker镜像推送到Gitlab的Registry中。

这段代码中,build_and_push是任务的名称,image用于指定当前任务中执行的Docker镜像,stage用于指定任务所属的阶段,services用于声明需要的服务,variables定义在作业调度过程中使用的环境变量,before_script定义了在执行任务之前的脚本,script定义了任务要执行的命令,only定义了仅在哪些分支执行任务。

4. 自动化部署

在上一步中,我们已经将SpringBoot项目的Jar包打包成了Docker镜像并存储到了Gitlab Registry中。在这一步中,我们就需要将这个镜像从Registry中拉取出来,部署到我们所选择的服务器、主机或者云平台上。

  1. 在服务器上通过SSH和Docker-Compose来部署项目镜像。

部署和启动Docker镜像最常用的方法就是使用Docker-Compose。通常情况下,可以在服务器上创建一个docker-compose.yml文件,并在其中声明所需的多个Docker应用程序。

下面是一个docker-compose.yml文件的示例:

version: '3.8'
services:
  my-app:
    image: registry.gitlab.com/my-namespace/my-image:${CI_COMMIT_SHA}
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prod

上述代码片段中,version用于指定Compose文件的格式版本,services用于定义所需的N个应用程序,my-app是一个应用程序的名称,image用于指定要执行的docker映像,ports用于将容器端口映射到主机端口,environment用于设置应用程序环境变量。

  1. 在Gitlab CI-CD中增加部署任务

配置CI-CD Jobs,定义自动化部署任务,这个任务需要:

  • 编写部署脚本
  • 在编写的部署脚本中拉取镜像并执行相关命令
# 自动化部署任务定义
deploy:
  image: docker:stable
  stage: deploy
  services:
    - docker:dind
  variables:
    DOCKER_DRIVER: overlay2
    SSH_PRIVATE_KEY: "$SSH_PRIVATE_KEY" # 用于服务器SSH登录需求的私钥
    DOCKER_REGISTRY: "$CI_REGISTRY" # Gitlab Registry URL
    DOCKER_NAMESPACE: "my-namespace"
    IMAGE_NAME: "my-image"
    IMAGE_VERSION: "$CI_COMMIT_SHA"
    DOCKER_COMPOSE: /usr/local/bin/docker-compose # 指定docker-compose的路径
  before_script:
    - apk add --no-cache openssh-client
    # 解密SSH私钥,并存储到文件中
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan www.example.com >> ~/.ssh/known_hosts # 替换为部署网站的域名或IP地址
  script:
    - ssh -t -i "$SSH_PRIVATE_KEY" user@www.example.com "docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN"
    - ssh -t -i "$SSH_PRIVATE_KEY" user@www.example.com "docker-compose pull my-service" # 拉取最新的docker镜像
    - ssh -t -i "$SSH_PRIVATE_KEY" user@www.example.com "docker-compose up -d my-service" # 启动新版本的应用程序
  only:
    - master # 仅在master分支提交代码时执行

在上述代码片段中,deploy是任务名称,其他部分与之前的任务定义相类似。before_script中进行了一些准备工作,包括将SSH私钥解密、将Gitlab Registry添加到ssh known_hosts中,以及在执行脚本时,需要运行所需的其他软件包。

script定义了任务所需的脚本。在该脚本中,使用SSH登录到通过参数提供的服务器,进行必要的操作,例如使用Docker-Compose从Gitlab的Registry中拉取镜像并启动新版本的应用程序。

.gitlab-ci.yml文件的底部,增加这个部署任务:

stages:
  - build
  - deploy

build_and_push:
  # ...

deploy:
  # ...

最后,提交.gitlab-ci.yml文件到Gitlab Repository,完成自动化部署设置。

示例:

  1. 修改.gitlab-ci.yml文件,增加Push事件触发的编译任务:
image: maven:3.6.3-openjdk-8 # 定义使用的Docker镜像

stages:
  - build

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=./.m2/repository" # 修改Maven本地仓库地址,避免新建或修改依赖被忽略

compile:
  stage: build # 定义阶段
  script:
    - mvn clean install -DskipTests=true # 安装项目
  only:
    - /^release*/ # 定义触发push事件的规则,这里只处理以release开头的分支
    - master
  1. 部署脚本示例:
#!/bin/bash
set -x

DOCKER_TAG=`git describe --tags`
STACK_NAME=web-stack

docker build -t my-namespace/web-api:$DOCKER_TAG .

# 删除旧的镜像
docker rmi $(docker images -q web-api* | uniq) || true

# 切换至主机部署目录
cd /opt

# 拉取最新的docker-compose.yml文件
git fetch origin && git reset --hard origin/master

# 部署docker服务
docker-compose --project-name=$STACK_NAME up -d web-api

在上述脚本中,首先是使用Docker编译镜像,然后删除旧版本的镜像;接着在部署脚本中,需要切换到主机上的指定目录,在该目录内使用git命令拉取最新的docker-compose.yml文件,并使用docker-compose部署新的容器,这样就完成了整个CI-CD自动化流程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Gitlab CI-CD自动化部署SpringBoot项目的方法步骤 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 什么是算法?

    算法的完整攻略,通常包含以下几个步骤: 第一步:明确问题 在开始解决任何问题之前,我们需要先明确问题是什么,需要解决什么样的需求。关于问题的具体描述和要求,可以从问题描述中获取。此外,还需要考虑问题的输入和输出格式,以及其他相关限制条件等。 示例 假设我们要解决的问题是求两个整数的最大公约数,那么我们需要明确以下几点: 问题:求两个整数的最大公约数 要求:计…

    其他 2023年4月19日
    00
  • fastjson使用TypeReference示例

    fastjson使用TypeReference示例的完整攻略 fastjson是一款高性能的Java JSON解析库,支持Java对象和JSON字符串之间的互相转换。在fastjson中,使用TypeReference可以解决泛型类型在序列化和反序列化时的问题。本文将详细介绍fastjson使用TypeReference的方法,并提供两个示例说明。 使用Ty…

    other 2023年5月5日
    00
  • 关于java:optional.ifpresent()的正确用法

    关于Java Optional.ifPresent()的正确用法 Optional.ifPresent()是Java 8中的一个方法,它可以在Optional对象中存在值时执行一个操作。本文将详细讲解Optional.ifPresent()的正确用法,包括基本法、示例说明和最佳实践。 1. 基本语法 Optional.ifPresent()的基本语法如下: …

    other 2023年5月7日
    00
  • vmware虚拟机将英文改成中文的方法

    vmware虚拟机将英文改成中文的方法 在使用vmware虚拟机的过程中,有时候我们需要将界面从英文改成中文,方便我们更好地使用。这里介绍一下在vmware虚拟机中将英文界面改成中文的方法。 步骤一:下载中文语言包 首先,我们需要在官网或其他渠道下载合适版本的中文语言包。需要注意的是,所下载的语言包版本必须和当前使用的vmware版本一致。 步骤二:安装中文…

    其他 2023年3月28日
    00
  • 深入了解Android IO的底层原理

    深入了解Android IO的底层原理 IO(输入输出)是Android系统中的基本操作之一。本攻略将深入探究Android IO的底层原理,包括如何使用Java IO和NIO进行文件读写,如何使用内存映射文件进行快速读写等内容。 Java IO Java IO是Android系统中最常用的IO操作方式之一,其底层实现基于操作系统提供的文件IO操作(read…

    other 2023年6月27日
    00
  • Java NIO服务器端开发详解

    下面详细讲解一下“Java NIO服务器端开发详解”的完整攻略。 简介 Java NIO(New IO,非阻塞IO)是Java中一套支持IO多路复用的新的API,相比于传统的IO,Java NIO能够更好地利用多核CPU的性能,同时也可以更好地实现高并发。 在Java NIO中,以Channel为中心,数据的读写以及网络的传输都是通过Channel进行的。C…

    other 2023年6月27日
    00
  • java实现CSV 字段分割

    下面是 Java 实现 CSV 字段分割的完整攻略。 什么是 CSV 文件 CSV 文件是一种简单的文本文件格式,通常用于存储表格数据,以逗号作为字段之间的分隔符。它的全称为“Comma-Separated Values”。具体的格式如下: 字段1,字段2,字段3,字段4 Java 实现 CSV 字段分割 对于 CSV 文件,Java 中可以使用 Strin…

    other 2023年6月26日
    00
  • 24款虚拟光驱软件介绍与下载地址

    24款虚拟光驱软件介绍与下载地址攻略 本攻略将为您详细介绍24款虚拟光驱软件,并提供它们的下载地址。虚拟光驱软件可以模拟光驱,将光盘映像文件加载到计算机中,方便您在没有实际光驱的情况下使用光盘内容。 以下是24款虚拟光驱软件的介绍和下载地址: 1. Daemon Tools Lite 简介:Daemon Tools Lite 是一款功能强大的虚拟光驱软件,支…

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部