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

yizhihongxing

下面是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日

相关文章

  • 整理Javascript基础入门学习笔记

    整理Javascript基础入门学习笔记攻略 学习Javascript的基础知识是成为一名优秀的前端开发人员的重要一步。下面是一个详细的攻略,帮助你整理Javascript基础入门学习笔记。 1. 学习资源 首先,你需要找到一些优质的学习资源来学习Javascript的基础知识。以下是一些推荐的资源: MDN Web 文档:MDN提供了非常详细和权威的Jav…

    other 2023年8月8日
    00
  • emoji表情的全部代码

    Emoji表情的全部代码 在我们的日常生活中,表情符号已经成为一种广泛使用的交流方式。在文字无法表达思想、情感或态度的情况下,表情符号可以提供一种简明扼要的方式来传达意义。Emoji表情符号,就是被广泛使用的一种表情符号。 什么是Emoji表情? 在日本,Emoji表情符号来自于日本的移动电话公司,实际上,这些表情符号被称为“电子邮件表情符号”,并被认为是现…

    其他 2023年3月28日
    00
  • MySQL使用Replace操作时造成数据丢失的问题解决

    MySQL使用Replace操作时造成数据丢失的问题解决攻略 1. 问题描述 在MySQL中,使用REPLACE操作时可能会导致数据丢失的问题。REPLACE操作会先删除原有的记录,然后插入新的记录。如果在删除原有记录和插入新记录之间有其他并发操作修改了数据,就会导致数据丢失的情况发生。 2. 解决方法 为了解决MySQL使用REPLACE操作造成数据丢失的…

    other 2023年10月18日
    00
  • 电脑鼠标右键菜单找不到选项卡的解决绝办法

    以下是电脑鼠标右键菜单找不到选项卡的解决方法: 问题描述 当右键点击鼠标时,没有弹出选项卡,或者弹出的选项卡缺少一些常用的操作选项,如打开或移动文件、修改属性等。 解决方法 1. 重新启动Windows Explorer 尝试重新启动Windows Explorer来解决该问题。 步骤如下: 打开任务管理器:Ctrl + Alt + Delete 或 Ctr…

    other 2023年6月27日
    00
  • mp3文件格式解析

    以下是“MP3文件格式解析”的完整攻略: MP3文件格式解析 MP3是一种常见的音频文件格式,它使用有损压缩技术来减小文件大小。本攻略将介绍MP3文件的基本结构和如何解析MP3文件。 步骤1:了解MP3文件格式 MP3文件格式由多个部分组成,包括文件头、帧头、音频数据和填充数据。以下是MP3文件格式的基本结构: +———————-…

    other 2023年5月7日
    00
  • vscode使用editorconfig插件以及.editorconfig配置文件说明详解

    下面我将为你提供详细讲解“vscode使用editorconfig插件以及.editorconfig配置文件说明详解”的完整攻略。 什么是editorconfig? editorconfig是一款编辑器插件,它提供了一种配置文件格式,用于在不同编辑器以及IDE中保持一致的代码风格,包括缩进、换行符类型、文件编码等等。它的作用在于,在不同的编辑器或开发者环境下…

    other 2023年6月25日
    00
  • Python实现单链表中元素的反转

    下面是Python实现单链表中元素反转的攻略。 1. 创建单链表 首先,我们需要定义单链表的结构。单链表可以通过定义一个节点类来实现,该类至少包含两个属性,一个是存储数据的值,一个是指向下一个节点的指针。具体实现如下: class ListNode: def __init__(self, val=0, next=None): self.val = val s…

    other 2023年6月27日
    00
  • c#中distinct的使用

    当然,我很乐意为您提供有关“C#中Distinct的使用”的完整攻略。以下是详细的步骤和两个示例: 1 Distinct的使用 在C#中,Distinct是一个LINQ扩展方法,用于从序列中返回不同的元素。以下是使用Distinct的步骤: 1.1 导入命名空间 首先,您需要在C#代码中导入System.Linq命名空间,以便使用LINQ扩展方法。您可以使用…

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