企业级代码托管:GITEA 与 CI/CD 深度整合实践
最近在团队内部搭建了一套完整的 CI/CD 流程,用 GITEA 作为代码仓库,结合 Jenkins、Docker 和 Kubernetes 实现了自动化构建和部署。整个过程踩了不少坑,但也积累了一些经验,分享给大家参考。
为什么选择 GITEA
GITEA 是一个轻量级的自托管 Git 服务,相比 GitLab 和 GitHub,它更轻量、更易部署,特别适合中小团队使用。我们选择 GITEA 主要考虑以下几点:
- 开源免费,没有用户数量限制
- 资源占用低,单机就能跑得很好
- 支持 Webhook,方便与 CI/CD 工具集成
- 界面简洁,学习成本低
整体架构设计
我们的 CI/CD 流程主要包含以下几个环节:
- 开发人员在 GITEA 上提交代码
- GITEA 通过 Webhook 通知 Jenkins
- Jenkins 拉取代码并执行构建
- 构建成功后,Jenkins 调用 Docker 打包镜像
- 最后将镜像推送到私有仓库,并通过 Kubernetes 部署
详细配置步骤
1. GITEA 仓库设置
首先需要在 GITEA 上创建项目仓库,并设置 Webhook:
- 登录 GITEA,创建新仓库
- 进入仓库设置 -> Webhooks -> 添加 Webhook
- 填写 Jenkins 的 Webhook 地址(通常是
http://<jenkins-url>/gitea-webhook/) - 选择触发事件为"Push events"
- 设置 Secret 用于验证请求
2. Jenkins 配置
Jenkins 需要安装 Gitea 插件和 Pipeline 插件:
- 安装 Gitea 插件:管理 Jenkins -> 插件管理 -> 搜索"Gitea"
- 创建 Pipeline 项目
- 在构建触发器中选择"Gitea webhook trigger"
- 配置源码管理为 Git,填写 GITEA 仓库地址
- 在 Pipeline 脚本中定义构建流程
Jenkinsfile 示例主要包含以下阶段:
- Checkout:拉取代码
- Build:编译项目
- Test:运行单元测试
- Docker Build:构建 Docker 镜像
- Deploy:部署到 Kubernetes
pipeline {
agent any
stages {
stage('Checkout') { steps { checkout scm } }
stage('Build') { steps { sh 'mvn clean package' } }
stage('Test') { steps { sh 'mvn test' } }
stage('Docker Build') { steps { sh 'docker build -t myapp .' } }
stage('Deploy') { steps { sh 'kubectl apply -f k8s/' } }
}
}
3. Docker 镜像构建
Dockerfile 需要根据项目语言进行定制,以 Java 项目为例:
- 使用多阶段构建减少镜像体积
- 第一阶段用 Maven 镜像构建项目
- 第二阶段用精简的 JRE 镜像运行应用
- 暴露应用端口
- 设置健康检查
# 构建阶段
FROM maven:3.8-openjdk-11 as build
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests
# 运行阶段
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
HEALTHCHECK CMD curl --fail http://localhost:8080/actuator/health || exit 1
CMD ["java", "-jar", "app.jar"]

