📌  相关文章
📜  在 GitLab 上使用 Shell 和 Docker Executor 在Java应用程序(Linux)中实现 CICD(1)

📅  最后修改于: 2023-12-03 15:23:08.964000             🧑  作者: Mango

在 GitLab 上使用 Shell 和 Docker Executor 在 Java 应用程序(Linux)中实现 CICD

本文将介绍如何在 GitLab 上使用 Shell 和 Docker Executor 实现 Java 应用程序的持续集成和持续部署(CICD)。

什么是 GitLab?

GitLab 是一个基于 Git 的版本控制系统和合作工具,可以让团队开发更加高效。GitLab 提供了许多功能,包括代码存储库、问题追踪、持续集成和持续部署等。

什么是 Shell 和 Docker Executor?

Shell Executor 是 GitLab Runner 提供的一种执行器,可以在 GitLab CI / CD 中运行 shell 脚本。

Docker Executor 是 GitLab Runner 提供的另一种执行器,可以在Docker容器中运行自定义镜像。这可以确保你的编译和测试环境与你的目标部署环境保持一致。

在本文中,我们将使用 Shell Executor 和 Docker Executor 来实现 Java 应用程序的 CICD。

Java 应用程序的 CICD 流程

Java 应用程序的 CICD 流程通常包括以下步骤:

  1. 在 GitLab 上创建一个新项目并将源代码提交到项目中。
  2. 设置 GitLab CI / CD pipeline,定义构建、测试和部署的脚本。
  3. 当有代码提交到 GitLab 时,GitLab Runner 将检测到这个事件并运行 CI / CD pipeline。
  4. 在构建阶段,GitLab Runner 将从源代码中构建出可执行的 Java 应用程序。
  5. 在测试阶段,GitLab Runner 将运行测试用例并检测代码是否符合标准。
  6. 在部署阶段,GitLab Runner 将部署你的应用程序到服务器上。
实现 Java 应用程序的 CICD

现在,我们就开始实现 Java 应用程序的 CICD。

步骤1:准备 Docker 镜像

首先,我们需要准备一个 Docker 镜像,以便在 GitLab Runner 中使用。你可以使用 Dockerfile 创建一个自定义镜像,也可以使用现有的镜像。

在本文中,我们将使用 openjdk:11-jre 镜像来构建我们的 Java 应用程序并运行测试用例。在运行测试用例之前,需要将应用程序包复制到 Docker 容器中。以下是 Dockerfile 的示例:

FROM openjdk:11-jre

ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

步骤2:添加 GitLab Runner

接下来,我们需要添加一个 GitLab Runner。GitLab Runner 是一个代理程序,它运行 CI / CD pipeline 并执行定义的脚本。

你可以在官方文档中找到如何安装 GitLab Runner 的指南。或者,你可以选择使用 GitLab.com 的共享 Runner。

步骤3:在 GitLab 中设置 pipeline

现在,我们将设置 GitLab CI / CD pipeline,用于构建、测试和部署 Java 应用程序。

以下是一个示例的 .gitlab-ci.yml 文件:

stages:
  - build
  - test
  - deploy

variables:
  DOCKER_DRIVER: overlay
  IMAGE_NAME: registry.gitlab.com/<your-gitlab-username>/<your-project-name>

build:
  stage: build
  image: openjdk:11-jdk
  script:
    - ./gradlew build -x test
    - docker build -t $IMAGE_NAME .
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
    - docker push $IMAGE_NAME

test:
  stage: test
  image: docker:19.03.12
  services:
    - docker:19.03.12-dind
  script:
    - docker pull $IMAGE_NAME
    - docker run -d --rm --name my-app -p 8080:8080 $IMAGE_NAME
    - sleep 10
    - docker logs my-app
    - curl -I localhost:8080
    - docker stop my-app

deploy:
  stage: deploy
  image: docker:19.03.12
  services:
    - docker:19.03.12-dind
  script:
    - docker pull $IMAGE_NAME
    - docker run -d --name my-app -p 80:8080 $IMAGE_NAME

这个文件定义了三个阶段:build、test 和 deploy。在构建阶段,我们使用 Gradle 构建应用程序,并将其打包到 Docker 镜像中。Docker 镜像然后被推送到 GitLab 的镜像仓库中。

在测试阶段,我们使用 Docker 运行容器,然后运行测试用例。在运行测试之前,我们需要拉取镜像。

在部署阶段,我们仅拉取 Docker 镜像并使用 Docker 运行容器。

步骤4:运行 pipeline

现在,当你提交代码并推到 GitLab 时,GitLab Runner 将自动运行 CI / CD pipeline。

你可以浏览运行的管道,了解构建、测试和部署的进度和状态。当运行完成时,你可以在服务器上访问你的应用程序,确保它正在正确运行。

结论

在本文中,我们介绍了如何在 GitLab 上使用 Shell 和 Docker Executor 在 Java 应用程序(Linux)中实现 CICD。我们讨论了 CICD 流程、设置 Docker 镜像、添加 GitLab Runner 和编写 pipeline 脚本。

通过使用 GitLab Runner 和 Docker,可以确保代码的构建、测试和部署过程可靠和可重复。这有助于团队更加高效地开发和部署应用程序。