使用 Java 项目基于Maven 仓库、GitLab 仓库、Drone CI 和 Harbor 来建立一个轻量化的 CI/CD 流程
1. Java Web 项目基础
a. 创建一个简单的 Java Web 应用
- 使用 Spring Initializr (https://start.spring.io/) 创建一个基本的 Spring Boot 项目。
- 选择 Maven Project, Java, 和 Spring Boot 的版本。
- 添加依赖:Spring Web。
- 生成项目并解压到本地目录。
b. 编写一个简单的 REST 控制器
在 src/main/java/com/example/demo
目录下创建一个新的 Java 类 HelloController.java
:
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/")
public String index() {
return "Hello, World!";
}
}
c. 运行和测试应用
- 在项目根目录下运行
mvn spring-boot:run
。 - 访问
http://localhost:8080
,应该看到 "Hello, World!"。
2. 使用 GitLab
a. Git 基础
- 安装 Git(如果尚未安装)。
- 初始化 Git 仓库:
git init
。 - 添加文件到仓库:
git add .
。 - 提交更改:
git commit -m "Initial commit"
。
b. 在 GitLab 创建新仓库
- 登录 GitLab,创建一个新的项目。
- 将本地仓库关联到 GitLab:
git remote add origin <repository-url>
。 - 推送代码到 GitLab:
git push -u origin master
。
3. Maven 仓库配置
a. Maven 配置
- 在
pom.xml
中配置项目依赖。 - 使用 Maven Wrapper(推荐)或确保本地安装了 Maven。
b. Nexus 或 Artifactory 设置
- 安装和配置 Nexus/Artifactory。
- 创建 Maven 仓库。
- 在
settings.xml
中配置 Maven 以使用此仓库。
4. Docker 和 Harbor
a. Docker 化应用
- 安装 Docker。
- 创建
Dockerfile
在项目根目录。
FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
- 构建 Docker 镜像:
docker build -t myapp .
。 - 运行 Docker 容器:
docker run -p 8080:8080 myapp
。
b. 配置 Harbor
- 安装和配置 Harbor。
- 创建项目以存储 Docker 镜像。
- 配置 Docker 以推送和拉取镜像到 Harbor。
5. Drone CI 配置
a. 设置 Drone CI
- 安装和配置 Drone CI。
- 将 Drone CI 与 GitLab 集成。
安装 Drone 访问 需要去drone官方下载,选择适合你的操作系统的安装说明。
配置 Drone Drone 的配置通常是通过环境变量进行的。你需要配置 Drone 与你的版本控制系统(如 GitLab)的连接,以及设置其他相关的选项。
启动 Drone 服务 根据安装指南启动 Drone 服务。这通常涉及到运行一个 Docker 容器。
验证 Drone 安装 访问 Drone 的 Web 界面,通常是
http://<your-server-ip>
。你应该能看到 Drone 的登录页面。配置
.drone.yml
.drone.yml
文件定义了 Drone 如何构建、测试和部署你的应用。
创建
.drone.yml
文件 在你的项目根目录下创建.drone.yml
文件。定义构建步骤 在
.drone.yml
中定义各个构建步骤,如编译代码、运行测试、构建 Docker 镜像等。配置 Docker 镜像构建和推送 在
.drone.yml
中配置 Docker 镜像的构建和推送步骤,确保它能够将构建的镜像推送到 Harbor。提交并测试 将
.drone.yml
提交到你的 GitLab 仓库,并触发一个构建来测试配置。
b. 配置 .drone.yml
创建 .drone.yml
文件以定义 CI 流程:
kind: pipeline
type: docker
name: default
steps:
- name: build
image: maven:3.6.3-jdk-8
commands:
- mvn clean package
- name: docker
image: plugins/docker
settings:
repo: <harbor-repo>/<your-image>
tags: latest
registry: <harbor-url>
username:
from_secret: harbor_username
password:
from_secret: harbor_password
在 Drone CI 中配置秘密(harbor_username 和 harbor_password)。
当然你可以添加其他 step,如上传maven仓库,部署,通知等
kind: pipeline
type: docker
name: default
steps:
- name: build
image: maven:3.6.3-jdk-8
commands:
- mvn clean package
- name: docker
image: plugins/docker
settings:
repo: <harbor-repo>/<your-image>
tags: latest
registry: <harbor-url>
username:
from_secret: harbor_username
password:
from_secret: harbor_password
- name: deploy
image: appleboy/drone-ssh
settings:
host: <deploy-host>
username:
from_secret: deploy_username
password:
from_secret: deploy_password
port: 22
script:
- echo "Deploying application..."
- docker pull <harbor-repo>/<your-image>:latest
- docker run -d -p 80:8080 <harbor-repo>/<your-image>:latest
- name: upload-to-maven
image: maven:3.6.3-jdk-8
commands:
- mvn deploy
environment:
MAVEN_USERNAME:
from_secret: maven_username
MAVEN_PASSWORD:
from_secret: maven_password
- name: notify-wechat
image: appleboy/drone-wechat
settings:
corpid: <wechat-corpid>
corp_secret:
from_secret: wechat_corp_secret
agent_id: <wechat-agent-id>
to_user: "@all"
message: |
Build Number: ${DRONE_BUILD_NUMBER}
Status: ${DRONE_BUILD_STATUS}
-
构建步骤 (
build
): 使用 Maven 构建 Java 项目。 -
Docker 构建和推送 (
docker
): 构建 Docker 镜像并推送到 Harbor。 -
部署步骤 (
deploy
): 使用 SSH 连接到部署服务器,拉取最新的 Docker 镜像,并运行它。 -
上传到 Maven 仓库 (
upload-to-maven
): 使用 Maven 将构建的工件上传到 Maven 仓库。 -
企业微信通知 (
notify-wechat
): 使用企业微信插件发送构建状态通知。
-
确保你已经在 Drone CI 中设置了所有必要的秘密(如
harbor_username
,harbor_password
,deploy_username
,deploy_password
,maven_username
,maven_password
,wechat_corp_secret
等)。 -
替换
<harbor-repo>
,<your-image>
,<harbor-url>
,<deploy-host>
,<wechat-corpid>
,<wechat-agent-id>
等占位符为你的实际值。 -
根据你的实际需求调整 SSH 脚本和 Maven 配置。
6. CI/CD 流程
- 开发人员在本地完成代码开发和测试。
- 提交代码到 GitLab,触发 Drone CI 流程。
- Drone CI 执行 Maven 构建和 Docker 镜像构建。
- Drone CI 将镜像推送到 Harbor。
- 镜像可以被部署到测试或生产环境。
更多推荐
所有评论(0)