Spring Boot 应用的 GitLab CI/CD Docker 部署全过程

2024-01-02 23:53:34 浏览数 (3)

下面是每个步骤的详细说明和示例代码:

1. 编写Spring Boot应用程序代码

创建一个简单的Spring Boot应用程序,例如一个Hello World REST API。

代码语言:java复制
// HelloWorldController.java

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class HelloWorldController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}

2. 创建.gitlab-ci.yml文件,定义CI/CD流水线配置

在项目根目录下创建.gitlab-ci.yml文件。

代码语言:yaml复制
stages:
  - test
  - build
  - deploy

variables:
  DOCKER_IMAGE_NAME: registry.example.com/my-spring-boot-app
  TAG: $CI_COMMIT_SHORT_SHA

test:
  stage: test
  script:
    - ./mvnw test

build:
  stage: build
  script:
    - ./mvnw clean package
    - docker build -t $DOCKER_IMAGE_NAME:$TAG .

deploy:
  stage: deploy
  script:
    - echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
    - docker push $DOCKER_IMAGE_NAME:$TAG

3. 编写Dockerfile用于构建Docker镜像

在项目根目录下创建一个Dockerfile。

代码语言:dockerfile复制
# Dockerfile

FROM adoptopenjdk:11-jre-hotspot

WORKDIR /app

COPY target/my-spring-boot-app.jar .

CMD ["java", "-jar", "my-spring-boot-app.jar"]

4. 将代码推送到GitLab仓库

将代码推送到GitLab仓库,确保已经将Spring Boot应用程序、.gitlab-ci.yml和Dockerfile包含在提交中。

代码语言:bash复制
git add .
git commit -m "Initial commit"
git push origin master

5. GitLab CI/CD流水线触发测试和构建

每当代码推送到GitLab仓库时,GitLab CI/CD流水线将自动触发。它会运行测试并构建Docker镜像。

6. Docker镜像将被构建并推送到指定的Docker Registry

构建的Docker镜像将被推送到指定的Docker Registry,确保在.gitlab-ci.yml文件中设置了正确的CI_REGISTRY_USER、CI_REGISTRY_PASSWORD和CI_REGISTRY。

7. 部署Spring Boot应用程序到目标环境

使用Docker Compose或其他容器编排工具将Spring Boot应用程序部署到目标环境中。下面是使用docker-compose.yml文件进行部署的示例。

代码语言:yaml复制
version: '3'
services:
  web:
    image: registry.example.com/my-spring-boot-app:latest
    ports:
      - "8080:8080"
    depends_on:
      - database
  database:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: mydatabase
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_USERNAME: dbuser
      MYSQL_PASSWORD: dbpassword
    ports:
      - "3306:3306"

在上述docker-compose.yml中,有两个服务:web和database。web服务使用你构建的Spring Boot应用程序的Docker镜像,并将其映射到主机端口8080。database服务使用MySQL的Docker镜像,并设置了一些环境变量来配置数据库。并确保$TAG为你之前构建的Docker镜像的标签。

将上述docker-compose.yml文件放置在项目根目录中。

在项目根目录运行以下命令以启动服务:

代码语言:bash复制
docker-compose up -d

这将启动web和database服务,并将它们分别映射到主机的8080和3306端口。

然后访问http://localhost:8080/api/hello验证应用程序是否成功部署。

若要停止服务,运行以下命令:

代码语言:bash复制
docker-compose down

1 人点赞