新增文档
This commit is contained in:
@@ -1,79 +1,79 @@
|
||||
# Drone CI 使用指南
|
||||
|
||||
## 简介
|
||||
|
||||
Drone 是一个基于容器的持续集成/持续部署(CI/CD)平台。
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **Web 界面**: http://101.43.95.130:3000 (需配置)
|
||||
|
||||
## 基本概念
|
||||
|
||||
### Pipeline
|
||||
|
||||
Pipeline 是 CI/CD 的执行流程,定义在 `.drone.yml` 文件中。
|
||||
|
||||
### Step
|
||||
|
||||
Step 是 Pipeline 中的一个步骤,每个 Step 在一个独立的容器中执行。
|
||||
|
||||
### Service
|
||||
|
||||
Service 是 Pipeline 中提供的服务,如数据库、缓存等。
|
||||
|
||||
## 配置文件示例
|
||||
|
||||
在项目根目录创建 `.drone.yml`:
|
||||
|
||||
```yaml
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: default
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: maven:3.8-openjdk-17
|
||||
commands:
|
||||
- mvn clean package
|
||||
|
||||
- name: test
|
||||
image: maven:3.8-openjdk-17
|
||||
commands:
|
||||
- mvn test
|
||||
|
||||
- name: deploy
|
||||
image: alpine
|
||||
commands:
|
||||
- echo "部署应用..."
|
||||
```
|
||||
|
||||
## 常用操作
|
||||
|
||||
### 触发构建
|
||||
|
||||
- 推送到仓库会自动触发构建
|
||||
- 在 Web 界面手动触发构建
|
||||
|
||||
### 查看构建日志
|
||||
|
||||
在 Web 界面查看构建日志,了解构建过程。
|
||||
|
||||
### 构建状态
|
||||
|
||||
- **Success**: 构建成功
|
||||
- **Failure**: 构建失败
|
||||
- **Running**: 构建中
|
||||
- **Pending**: 等待执行
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **缓存依赖**: 使用缓存加速构建
|
||||
2. **并行执行**: 将独立的任务并行执行
|
||||
3. **环境变量**: 使用密钥管理敏感信息
|
||||
4. **通知机制**: 配置构建通知
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [Drone 官方文档](https://docs.drone.io/)
|
||||
|
||||
# Drone CI 使用指南
|
||||
|
||||
## 简介
|
||||
|
||||
Drone 是一个基于容器的持续集成/持续部署(CI/CD)平台。
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **Web 界面**: http://101.43.95.130:3000 (需配置)
|
||||
|
||||
## 基本概念
|
||||
|
||||
### Pipeline
|
||||
|
||||
Pipeline 是 CI/CD 的执行流程,定义在 `.drone.yml` 文件中。
|
||||
|
||||
### Step
|
||||
|
||||
Step 是 Pipeline 中的一个步骤,每个 Step 在一个独立的容器中执行。
|
||||
|
||||
### Service
|
||||
|
||||
Service 是 Pipeline 中提供的服务,如数据库、缓存等。
|
||||
|
||||
## 配置文件示例
|
||||
|
||||
在项目根目录创建 `.drone.yml`:
|
||||
|
||||
```yaml
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: default
|
||||
|
||||
steps:
|
||||
- name: build
|
||||
image: maven:3.8-openjdk-17
|
||||
commands:
|
||||
- mvn clean package
|
||||
|
||||
- name: test
|
||||
image: maven:3.8-openjdk-17
|
||||
commands:
|
||||
- mvn test
|
||||
|
||||
- name: deploy
|
||||
image: alpine
|
||||
commands:
|
||||
- echo "部署应用..."
|
||||
```
|
||||
|
||||
## 常用操作
|
||||
|
||||
### 触发构建
|
||||
|
||||
- 推送到仓库会自动触发构建
|
||||
- 在 Web 界面手动触发构建
|
||||
|
||||
### 查看构建日志
|
||||
|
||||
在 Web 界面查看构建日志,了解构建过程。
|
||||
|
||||
### 构建状态
|
||||
|
||||
- **Success**: 构建成功
|
||||
- **Failure**: 构建失败
|
||||
- **Running**: 构建中
|
||||
- **Pending**: 等待执行
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **缓存依赖**: 使用缓存加速构建
|
||||
2. **并行执行**: 将独立的任务并行执行
|
||||
3. **环境变量**: 使用密钥管理敏感信息
|
||||
4. **通知机制**: 配置构建通知
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [Drone 官方文档](https://docs.drone.io/)
|
||||
|
||||
|
||||
@@ -1,63 +1,63 @@
|
||||
# Gerrit 使用指南
|
||||
|
||||
## 简介
|
||||
|
||||
Gerrit 是一个基于 Git 的代码审查工具,用于团队协作和代码质量控制。
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **Web 界面**: http://101.43.95.130:8082
|
||||
- **SSH 端口**: 29418
|
||||
|
||||
## 基本使用
|
||||
|
||||
### 克隆项目
|
||||
|
||||
```bash
|
||||
git clone ssh://admin@101.43.95.130:29418/项目名
|
||||
```
|
||||
|
||||
### 提交代码审查
|
||||
|
||||
1. 创建分支并提交更改
|
||||
2. 推送到 Gerrit 进行审查:
|
||||
```bash
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
3. 在 Web 界面查看审查请求
|
||||
|
||||
### 审查流程
|
||||
|
||||
1. **创建变更**: 开发者推送代码
|
||||
2. **代码审查**: 审查者查看代码并添加评论
|
||||
3. **修改代码**: 根据反馈修改代码
|
||||
4. **重新提交**: 推送新的补丁集
|
||||
5. **通过审查**: 审查者批准代码
|
||||
6. **合并代码**: 代码合并到主分支
|
||||
|
||||
## 常用命令
|
||||
|
||||
### 查看待审查的变更
|
||||
|
||||
```bash
|
||||
ssh -p 29418 admin@101.43.95.130 gerrit query --format=JSON status:open
|
||||
```
|
||||
|
||||
### 查看特定变更
|
||||
|
||||
```bash
|
||||
ssh -p 29418 admin@101.43.95.130 gerrit query change:12345
|
||||
```
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **小步提交**: 每次提交只包含一个功能或修复
|
||||
2. **清晰的提交信息**: 使用清晰的提交信息说明更改内容
|
||||
3. **及时响应**: 及时响应审查者的反馈
|
||||
4. **代码质量**: 确保代码通过所有测试和检查
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [Gerrit 官方文档](https://gerrit-review.googlesource.com/Documentation/)
|
||||
- [Gerrit 工作流程](https://gerrit-review.googlesource.com/Documentation/intro-user.html)
|
||||
|
||||
# Gerrit 使用指南
|
||||
|
||||
## 简介
|
||||
|
||||
Gerrit 是一个基于 Git 的代码审查工具,用于团队协作和代码质量控制。
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **Web 界面**: http://101.43.95.130:8082
|
||||
- **SSH 端口**: 29418
|
||||
|
||||
## 基本使用
|
||||
|
||||
### 克隆项目
|
||||
|
||||
```bash
|
||||
git clone ssh://admin@101.43.95.130:29418/项目名
|
||||
```
|
||||
|
||||
### 提交代码审查
|
||||
|
||||
1. 创建分支并提交更改
|
||||
2. 推送到 Gerrit 进行审查:
|
||||
```bash
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
3. 在 Web 界面查看审查请求
|
||||
|
||||
### 审查流程
|
||||
|
||||
1. **创建变更**: 开发者推送代码
|
||||
2. **代码审查**: 审查者查看代码并添加评论
|
||||
3. **修改代码**: 根据反馈修改代码
|
||||
4. **重新提交**: 推送新的补丁集
|
||||
5. **通过审查**: 审查者批准代码
|
||||
6. **合并代码**: 代码合并到主分支
|
||||
|
||||
## 常用命令
|
||||
|
||||
### 查看待审查的变更
|
||||
|
||||
```bash
|
||||
ssh -p 29418 admin@101.43.95.130 gerrit query --format=JSON status:open
|
||||
```
|
||||
|
||||
### 查看特定变更
|
||||
|
||||
```bash
|
||||
ssh -p 29418 admin@101.43.95.130 gerrit query change:12345
|
||||
```
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **小步提交**: 每次提交只包含一个功能或修复
|
||||
2. **清晰的提交信息**: 使用清晰的提交信息说明更改内容
|
||||
3. **及时响应**: 及时响应审查者的反馈
|
||||
4. **代码质量**: 确保代码通过所有测试和检查
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [Gerrit 官方文档](https://gerrit-review.googlesource.com/Documentation/)
|
||||
- [Gerrit 工作流程](https://gerrit-review.googlesource.com/Documentation/intro-user.html)
|
||||
|
||||
|
||||
@@ -1,57 +1,57 @@
|
||||
# Gitea 使用指南
|
||||
|
||||
## 简介
|
||||
|
||||
Gitea 是一个轻量级的 Git 服务,提供 Web 界面和 Git 仓库管理功能。
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **Web 界面**: http://101.43.95.130:3000
|
||||
- **SSH 端口**: 222
|
||||
|
||||
## 基本使用
|
||||
|
||||
### 创建仓库
|
||||
|
||||
1. 登录 Gitea
|
||||
2. 点击右上角 "+" 按钮
|
||||
3. 选择 "New Repository"
|
||||
4. 填写仓库信息并创建
|
||||
|
||||
### 克隆仓库
|
||||
|
||||
```bash
|
||||
# HTTPS
|
||||
git clone http://101.43.95.130:3000/用户名/仓库名.git
|
||||
|
||||
# SSH
|
||||
git clone ssh://git@101.43.95.130:222/用户名/仓库名.git
|
||||
```
|
||||
|
||||
### 推送代码
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "提交信息"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
## 功能特性
|
||||
|
||||
- **代码仓库**: Git 仓库管理
|
||||
- **Issue 跟踪**: 问题跟踪和管理
|
||||
- **Pull Request**: 代码合并请求
|
||||
- **Wiki**: 项目文档
|
||||
- **项目管理**: 看板和里程碑
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **分支管理**: 使用分支进行功能开发
|
||||
2. **提交规范**: 遵循提交信息规范
|
||||
3. **代码审查**: 使用 Pull Request 进行代码审查
|
||||
4. **文档维护**: 使用 Wiki 维护项目文档
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [Gitea 官方文档](https://docs.gitea.io/)
|
||||
|
||||
# Gitea 使用指南
|
||||
|
||||
## 简介
|
||||
|
||||
Gitea 是一个轻量级的 Git 服务,提供 Web 界面和 Git 仓库管理功能。
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **Web 界面**: http://101.43.95.130:3000
|
||||
- **SSH 端口**: 222
|
||||
|
||||
## 基本使用
|
||||
|
||||
### 创建仓库
|
||||
|
||||
1. 登录 Gitea
|
||||
2. 点击右上角 "+" 按钮
|
||||
3. 选择 "New Repository"
|
||||
4. 填写仓库信息并创建
|
||||
|
||||
### 克隆仓库
|
||||
|
||||
```bash
|
||||
# HTTPS
|
||||
git clone http://101.43.95.130:3000/用户名/仓库名.git
|
||||
|
||||
# SSH
|
||||
git clone ssh://git@101.43.95.130:222/用户名/仓库名.git
|
||||
```
|
||||
|
||||
### 推送代码
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "提交信息"
|
||||
git push origin main
|
||||
```
|
||||
|
||||
## 功能特性
|
||||
|
||||
- **代码仓库**: Git 仓库管理
|
||||
- **Issue 跟踪**: 问题跟踪和管理
|
||||
- **Pull Request**: 代码合并请求
|
||||
- **Wiki**: 项目文档
|
||||
- **项目管理**: 看板和里程碑
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **分支管理**: 使用分支进行功能开发
|
||||
2. **提交规范**: 遵循提交信息规范
|
||||
3. **代码审查**: 使用 Pull Request 进行代码审查
|
||||
4. **文档维护**: 使用 Wiki 维护项目文档
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [Gitea 官方文档](https://docs.gitea.io/)
|
||||
|
||||
|
||||
@@ -1,87 +1,87 @@
|
||||
# MinIO 使用指南
|
||||
|
||||
## 简介
|
||||
|
||||
MinIO 是一个高性能的对象存储服务,兼容 Amazon S3 API。
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **API 地址**: http://101.43.95.130:9000
|
||||
- **Console 地址**: http://101.43.95.130:9001
|
||||
- **默认账号**: minioadmin / minioadmin123
|
||||
|
||||
## 基本使用
|
||||
|
||||
### 创建存储桶(Bucket)
|
||||
|
||||
1. 登录 MinIO Console
|
||||
2. 点击 "Create Bucket"
|
||||
3. 输入存储桶名称
|
||||
4. 配置访问策略
|
||||
|
||||
### 上传文件
|
||||
|
||||
1. 选择存储桶
|
||||
2. 点击 "Upload"
|
||||
3. 选择文件上传
|
||||
|
||||
### 下载文件
|
||||
|
||||
1. 在存储桶中找到文件
|
||||
2. 点击文件下载
|
||||
|
||||
## API 使用
|
||||
|
||||
### 使用 Python SDK
|
||||
|
||||
```python
|
||||
from minio import Minio
|
||||
from minio.error import S3Error
|
||||
|
||||
# 初始化客户端
|
||||
client = Minio(
|
||||
"101.43.95.130:9000",
|
||||
access_key="minioadmin",
|
||||
secret_key="minioadmin123",
|
||||
secure=False
|
||||
)
|
||||
|
||||
# 上传文件
|
||||
client.fput_object("my-bucket", "object-name", "file-path")
|
||||
```
|
||||
|
||||
### 使用 Java SDK
|
||||
|
||||
```java
|
||||
MinioClient minioClient = MinioClient.builder()
|
||||
.endpoint("http://101.43.95.130:9000")
|
||||
.credentials("minioadmin", "minioadmin123")
|
||||
.build();
|
||||
|
||||
minioClient.uploadObject(
|
||||
UploadObjectArgs.builder()
|
||||
.bucket("my-bucket")
|
||||
.object("object-name")
|
||||
.filename("file-path")
|
||||
.build()
|
||||
);
|
||||
```
|
||||
|
||||
## 使用场景
|
||||
|
||||
- **构建产物存储**: 存储 CI/CD 构建的产物
|
||||
- **APK 仓库**: 存储 Android APK 文件
|
||||
- **文件备份**: 备份重要文件
|
||||
- **静态资源**: 存储网站静态资源
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **访问控制**: 配置适当的访问策略
|
||||
2. **数据备份**: 定期备份重要数据
|
||||
3. **版本控制**: 启用对象版本控制
|
||||
4. **监控告警**: 配置监控和告警
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [MinIO 官方文档](https://min.io/docs/)
|
||||
|
||||
# MinIO 使用指南
|
||||
|
||||
## 简介
|
||||
|
||||
MinIO 是一个高性能的对象存储服务,兼容 Amazon S3 API。
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **API 地址**: http://101.43.95.130:9000
|
||||
- **Console 地址**: http://101.43.95.130:9001
|
||||
- **默认账号**: minioadmin / minioadmin123
|
||||
|
||||
## 基本使用
|
||||
|
||||
### 创建存储桶(Bucket)
|
||||
|
||||
1. 登录 MinIO Console
|
||||
2. 点击 "Create Bucket"
|
||||
3. 输入存储桶名称
|
||||
4. 配置访问策略
|
||||
|
||||
### 上传文件
|
||||
|
||||
1. 选择存储桶
|
||||
2. 点击 "Upload"
|
||||
3. 选择文件上传
|
||||
|
||||
### 下载文件
|
||||
|
||||
1. 在存储桶中找到文件
|
||||
2. 点击文件下载
|
||||
|
||||
## API 使用
|
||||
|
||||
### 使用 Python SDK
|
||||
|
||||
```python
|
||||
from minio import Minio
|
||||
from minio.error import S3Error
|
||||
|
||||
# 初始化客户端
|
||||
client = Minio(
|
||||
"101.43.95.130:9000",
|
||||
access_key="minioadmin",
|
||||
secret_key="minioadmin123",
|
||||
secure=False
|
||||
)
|
||||
|
||||
# 上传文件
|
||||
client.fput_object("my-bucket", "object-name", "file-path")
|
||||
```
|
||||
|
||||
### 使用 Java SDK
|
||||
|
||||
```java
|
||||
MinioClient minioClient = MinioClient.builder()
|
||||
.endpoint("http://101.43.95.130:9000")
|
||||
.credentials("minioadmin", "minioadmin123")
|
||||
.build();
|
||||
|
||||
minioClient.uploadObject(
|
||||
UploadObjectArgs.builder()
|
||||
.bucket("my-bucket")
|
||||
.object("object-name")
|
||||
.filename("file-path")
|
||||
.build()
|
||||
);
|
||||
```
|
||||
|
||||
## 使用场景
|
||||
|
||||
- **构建产物存储**: 存储 CI/CD 构建的产物
|
||||
- **APK 仓库**: 存储 Android APK 文件
|
||||
- **文件备份**: 备份重要文件
|
||||
- **静态资源**: 存储网站静态资源
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **访问控制**: 配置适当的访问策略
|
||||
2. **数据备份**: 定期备份重要数据
|
||||
3. **版本控制**: 启用对象版本控制
|
||||
4. **监控告警**: 配置监控和告警
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [MinIO 官方文档](https://min.io/docs/)
|
||||
|
||||
|
||||
@@ -1,96 +1,96 @@
|
||||
# Nexus 使用指南
|
||||
|
||||
## 简介
|
||||
|
||||
Nexus Repository Manager 是一个 Maven 仓库管理器,用于管理构建依赖和发布构件。
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **Web 界面**: http://101.43.95.130:8081
|
||||
- **默认账号**: admin (首次登录会提示修改密码)
|
||||
|
||||
## 基本使用
|
||||
|
||||
### 配置 Maven
|
||||
|
||||
在 `~/.m2/settings.xml` 中配置:
|
||||
|
||||
```xml
|
||||
<settings>
|
||||
<mirrors>
|
||||
<mirror>
|
||||
<id>nexus</id>
|
||||
<mirrorOf>*</mirrorOf>
|
||||
<url>http://101.43.95.130:8081/repository/maven-public/</url>
|
||||
</mirror>
|
||||
</mirrors>
|
||||
</settings>
|
||||
```
|
||||
|
||||
### 发布构件
|
||||
|
||||
在项目的 `pom.xml` 中配置:
|
||||
|
||||
```xml
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>nexus-releases</id>
|
||||
<url>http://101.43.95.130:8081/repository/maven-releases/</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>nexus-snapshots</id>
|
||||
<url>http://101.43.95.130:8081/repository/maven-snapshots/</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
```
|
||||
|
||||
### 发布命令
|
||||
|
||||
```bash
|
||||
mvn clean deploy
|
||||
```
|
||||
|
||||
## 仓库类型
|
||||
|
||||
### Maven Central 代理
|
||||
|
||||
- **名称**: maven-central
|
||||
- **类型**: Proxy
|
||||
- **远程 URL**: https://repo1.maven.org/maven2/
|
||||
|
||||
### Maven Public 组
|
||||
|
||||
- **名称**: maven-public
|
||||
- **类型**: Group
|
||||
- **包含**: maven-central, maven-releases, maven-snapshots
|
||||
|
||||
### Maven Releases
|
||||
|
||||
- **名称**: maven-releases
|
||||
- **类型**: Hosted
|
||||
- **策略**: Release
|
||||
|
||||
### Maven Snapshots
|
||||
|
||||
- **名称**: maven-snapshots
|
||||
- **类型**: Hosted
|
||||
- **策略**: Snapshot
|
||||
|
||||
## 使用场景
|
||||
|
||||
- **依赖加速**: 加速 Gradle/Maven 依赖下载
|
||||
- **私有仓库**: 存储私有构件
|
||||
- **版本管理**: 管理发布版本和快照版本
|
||||
- **安全扫描**: 扫描依赖漏洞
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **定期清理**: 清理不需要的快照版本
|
||||
2. **备份数据**: 定期备份仓库数据
|
||||
3. **访问控制**: 配置适当的用户权限
|
||||
4. **监控告警**: 监控仓库使用情况
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [Nexus 官方文档](https://help.sonatype.com/repomanager3)
|
||||
|
||||
# Nexus 使用指南
|
||||
|
||||
## 简介
|
||||
|
||||
Nexus Repository Manager 是一个 Maven 仓库管理器,用于管理构建依赖和发布构件。
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **Web 界面**: http://101.43.95.130:8081
|
||||
- **默认账号**: admin (首次登录会提示修改密码)
|
||||
|
||||
## 基本使用
|
||||
|
||||
### 配置 Maven
|
||||
|
||||
在 `~/.m2/settings.xml` 中配置:
|
||||
|
||||
```xml
|
||||
<settings>
|
||||
<mirrors>
|
||||
<mirror>
|
||||
<id>nexus</id>
|
||||
<mirrorOf>*</mirrorOf>
|
||||
<url>http://101.43.95.130:8081/repository/maven-public/</url>
|
||||
</mirror>
|
||||
</mirrors>
|
||||
</settings>
|
||||
```
|
||||
|
||||
### 发布构件
|
||||
|
||||
在项目的 `pom.xml` 中配置:
|
||||
|
||||
```xml
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
<id>nexus-releases</id>
|
||||
<url>http://101.43.95.130:8081/repository/maven-releases/</url>
|
||||
</repository>
|
||||
<snapshotRepository>
|
||||
<id>nexus-snapshots</id>
|
||||
<url>http://101.43.95.130:8081/repository/maven-snapshots/</url>
|
||||
</snapshotRepository>
|
||||
</distributionManagement>
|
||||
```
|
||||
|
||||
### 发布命令
|
||||
|
||||
```bash
|
||||
mvn clean deploy
|
||||
```
|
||||
|
||||
## 仓库类型
|
||||
|
||||
### Maven Central 代理
|
||||
|
||||
- **名称**: maven-central
|
||||
- **类型**: Proxy
|
||||
- **远程 URL**: https://repo1.maven.org/maven2/
|
||||
|
||||
### Maven Public 组
|
||||
|
||||
- **名称**: maven-public
|
||||
- **类型**: Group
|
||||
- **包含**: maven-central, maven-releases, maven-snapshots
|
||||
|
||||
### Maven Releases
|
||||
|
||||
- **名称**: maven-releases
|
||||
- **类型**: Hosted
|
||||
- **策略**: Release
|
||||
|
||||
### Maven Snapshots
|
||||
|
||||
- **名称**: maven-snapshots
|
||||
- **类型**: Hosted
|
||||
- **策略**: Snapshot
|
||||
|
||||
## 使用场景
|
||||
|
||||
- **依赖加速**: 加速 Gradle/Maven 依赖下载
|
||||
- **私有仓库**: 存储私有构件
|
||||
- **版本管理**: 管理发布版本和快照版本
|
||||
- **安全扫描**: 扫描依赖漏洞
|
||||
|
||||
## 最佳实践
|
||||
|
||||
1. **定期清理**: 清理不需要的快照版本
|
||||
2. **备份数据**: 定期备份仓库数据
|
||||
3. **访问控制**: 配置适当的用户权限
|
||||
4. **监控告警**: 监控仓库使用情况
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [Nexus 官方文档](https://help.sonatype.com/repomanager3)
|
||||
|
||||
|
||||
132
docs/index.md
132
docs/index.md
@@ -1,66 +1,66 @@
|
||||
# 欢迎来到个人知识库
|
||||
|
||||
这是一个基于 MkDocs Material 的个人技术文档和知识管理平台。
|
||||
|
||||
## 📚 功能特性
|
||||
|
||||
- 📝 **Markdown 支持**: 使用 Markdown 编写文档,简单易用
|
||||
- 🎨 **Material 主题**: 美观现代的 Material Design 界面
|
||||
- 🔍 **全文搜索**: 快速查找所需内容
|
||||
- 📱 **响应式设计**: 支持各种设备访问
|
||||
- 🌙 **深色模式**: 支持浅色/深色主题切换
|
||||
- 📊 **代码高亮**: 支持多种编程语言的语法高亮
|
||||
- 🔗 **导航系统**: 清晰的文档导航结构
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 编辑文档
|
||||
|
||||
1. 在 `docs/` 目录下创建或编辑 Markdown 文件
|
||||
2. 在 `mkdocs.yml` 中更新导航配置
|
||||
3. 保存后,MkDocs 会自动重新加载(开发模式)
|
||||
|
||||
### 添加新文档
|
||||
|
||||
1. 在 `docs/` 目录下创建新的 `.md` 文件
|
||||
2. 在 `mkdocs.yml` 的 `nav` 部分添加导航项
|
||||
3. 重启服务或等待自动重载
|
||||
|
||||
### 构建静态站点
|
||||
|
||||
```bash
|
||||
# 进入容器执行构建
|
||||
docker exec -it mkdocs mkdocs build
|
||||
|
||||
# 或使用 docker-compose
|
||||
docker-compose exec mkdocs mkdocs build
|
||||
```
|
||||
|
||||
## 📖 文档结构
|
||||
|
||||
```
|
||||
docs/
|
||||
├── index.md # 首页
|
||||
├── 开发指南/ # 开发相关文档
|
||||
├── DevOps平台/ # DevOps 工具使用指南
|
||||
├── 技术文档/ # 技术架构和 API 文档
|
||||
└── 学习笔记/ # 学习笔记和总结
|
||||
```
|
||||
|
||||
## 🔗 相关链接
|
||||
|
||||
- [MkDocs 官方文档](https://www.mkdocs.org/)
|
||||
- [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/)
|
||||
- [Markdown 语法指南](https://www.markdownguide.org/)
|
||||
|
||||
## 💡 使用技巧
|
||||
|
||||
1. **代码块**: 使用三个反引号包裹代码,并指定语言
|
||||
2. **表格**: 使用 Markdown 表格语法
|
||||
3. **图片**: 将图片放在 `docs/images/` 目录,使用相对路径引用
|
||||
4. **数学公式**: 支持 LaTeX 数学公式(需要启用相应插件)
|
||||
5. **流程图**: 支持 Mermaid 流程图(已配置)
|
||||
|
||||
---
|
||||
|
||||
**开始编写你的文档吧!** 📝
|
||||
# 欢迎来到个人知识库
|
||||
|
||||
这是一个基于 MkDocs Material 的个人技术文档和知识管理平台。
|
||||
|
||||
## 📚 功能特性
|
||||
|
||||
- 📝 **Markdown 支持**: 使用 Markdown 编写文档,简单易用
|
||||
- 🎨 **Material 主题**: 美观现代的 Material Design 界面
|
||||
- 🔍 **全文搜索**: 快速查找所需内容
|
||||
- 📱 **响应式设计**: 支持各种设备访问
|
||||
- 🌙 **深色模式**: 支持浅色/深色主题切换
|
||||
- 📊 **代码高亮**: 支持多种编程语言的语法高亮
|
||||
- 🔗 **导航系统**: 清晰的文档导航结构
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 编辑文档
|
||||
|
||||
1. 在 `docs/` 目录下创建或编辑 Markdown 文件
|
||||
2. 在 `mkdocs.yml` 中更新导航配置
|
||||
3. 保存后,MkDocs 会自动重新加载(开发模式)
|
||||
|
||||
### 添加新文档
|
||||
|
||||
1. 在 `docs/` 目录下创建新的 `.md` 文件
|
||||
2. 在 `mkdocs.yml` 的 `nav` 部分添加导航项
|
||||
3. 重启服务或等待自动重载
|
||||
|
||||
### 构建静态站点
|
||||
|
||||
```bash
|
||||
# 进入容器执行构建
|
||||
docker exec -it mkdocs mkdocs build
|
||||
|
||||
# 或使用 docker-compose
|
||||
docker-compose exec mkdocs mkdocs build
|
||||
```
|
||||
|
||||
## 📖 文档结构
|
||||
|
||||
```
|
||||
docs/
|
||||
├── index.md # 首页
|
||||
├── 开发指南/ # 开发相关文档
|
||||
├── DevOps平台/ # DevOps 工具使用指南
|
||||
├── 技术文档/ # 技术架构和 API 文档
|
||||
└── 学习笔记/ # 学习笔记和总结
|
||||
```
|
||||
|
||||
## 🔗 相关链接
|
||||
|
||||
- [MkDocs 官方文档](https://www.mkdocs.org/)
|
||||
- [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/)
|
||||
- [Markdown 语法指南](https://www.markdownguide.org/)
|
||||
|
||||
## 💡 使用技巧
|
||||
|
||||
1. **代码块**: 使用三个反引号包裹代码,并指定语言
|
||||
2. **表格**: 使用 Markdown 表格语法
|
||||
3. **图片**: 将图片放在 `docs/images/` 目录,使用相对路径引用
|
||||
4. **数学公式**: 支持 LaTeX 数学公式(需要启用相应插件)
|
||||
5. **流程图**: 支持 Mermaid 流程图(已配置)
|
||||
|
||||
---
|
||||
|
||||
**开始编写你的文档吧!** 📝
|
||||
|
||||
@@ -1,68 +1,68 @@
|
||||
# DevOps 学习笔记
|
||||
|
||||
## 概念
|
||||
|
||||
### CI/CD
|
||||
|
||||
- **CI (Continuous Integration)**: 持续集成
|
||||
- 自动构建
|
||||
- 自动测试
|
||||
- 代码质量检查
|
||||
|
||||
- **CD (Continuous Deployment)**: 持续部署
|
||||
- 自动部署
|
||||
- 环境管理
|
||||
- 回滚机制
|
||||
|
||||
## 工具链
|
||||
|
||||
### 版本控制
|
||||
|
||||
- **Git**: 分布式版本控制系统
|
||||
- **Gerrit**: 代码审查工具
|
||||
- **Gitea**: Git 服务
|
||||
|
||||
### CI/CD
|
||||
|
||||
- **Drone**: 基于容器的 CI/CD 平台
|
||||
- **Jenkins**: 流行的 CI/CD 工具
|
||||
- **GitLab CI**: GitLab 内置 CI/CD
|
||||
|
||||
### 容器化
|
||||
|
||||
- **Docker**: 容器化平台
|
||||
- **Docker Compose**: 多容器编排
|
||||
- **Kubernetes**: 容器编排平台
|
||||
|
||||
### 监控和日志
|
||||
|
||||
- **Grafana**: 监控可视化
|
||||
- **Loki**: 日志聚合
|
||||
- **Prometheus**: 监控和告警
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 代码管理
|
||||
|
||||
1. 使用分支策略(Git Flow)
|
||||
2. 代码审查(Code Review)
|
||||
3. 提交信息规范(Conventional Commits)
|
||||
|
||||
### 自动化
|
||||
|
||||
1. 自动化测试
|
||||
2. 自动化构建
|
||||
3. 自动化部署
|
||||
|
||||
### 监控
|
||||
|
||||
1. 应用监控
|
||||
2. 日志收集
|
||||
3. 告警机制
|
||||
|
||||
## 学习资源
|
||||
|
||||
- [DevOps 实践指南](https://www.devops-handbook.com/)
|
||||
- [Docker 官方文档](https://docs.docker.com/)
|
||||
- [Kubernetes 官方文档](https://kubernetes.io/docs/)
|
||||
|
||||
# DevOps 学习笔记
|
||||
|
||||
## 概念
|
||||
|
||||
### CI/CD
|
||||
|
||||
- **CI (Continuous Integration)**: 持续集成
|
||||
- 自动构建
|
||||
- 自动测试
|
||||
- 代码质量检查
|
||||
|
||||
- **CD (Continuous Deployment)**: 持续部署
|
||||
- 自动部署
|
||||
- 环境管理
|
||||
- 回滚机制
|
||||
|
||||
## 工具链
|
||||
|
||||
### 版本控制
|
||||
|
||||
- **Git**: 分布式版本控制系统
|
||||
- **Gerrit**: 代码审查工具
|
||||
- **Gitea**: Git 服务
|
||||
|
||||
### CI/CD
|
||||
|
||||
- **Drone**: 基于容器的 CI/CD 平台
|
||||
- **Jenkins**: 流行的 CI/CD 工具
|
||||
- **GitLab CI**: GitLab 内置 CI/CD
|
||||
|
||||
### 容器化
|
||||
|
||||
- **Docker**: 容器化平台
|
||||
- **Docker Compose**: 多容器编排
|
||||
- **Kubernetes**: 容器编排平台
|
||||
|
||||
### 监控和日志
|
||||
|
||||
- **Grafana**: 监控可视化
|
||||
- **Loki**: 日志聚合
|
||||
- **Prometheus**: 监控和告警
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 代码管理
|
||||
|
||||
1. 使用分支策略(Git Flow)
|
||||
2. 代码审查(Code Review)
|
||||
3. 提交信息规范(Conventional Commits)
|
||||
|
||||
### 自动化
|
||||
|
||||
1. 自动化测试
|
||||
2. 自动化构建
|
||||
3. 自动化部署
|
||||
|
||||
### 监控
|
||||
|
||||
1. 应用监控
|
||||
2. 日志收集
|
||||
3. 告警机制
|
||||
|
||||
## 学习资源
|
||||
|
||||
- [DevOps 实践指南](https://www.devops-handbook.com/)
|
||||
- [Docker 官方文档](https://docs.docker.com/)
|
||||
- [Kubernetes 官方文档](https://kubernetes.io/docs/)
|
||||
|
||||
|
||||
@@ -1,85 +1,85 @@
|
||||
# Java 学习笔记
|
||||
|
||||
## 基础语法
|
||||
|
||||
### 变量和数据类型
|
||||
|
||||
```java
|
||||
// 基本数据类型
|
||||
int age = 25;
|
||||
double price = 99.99;
|
||||
boolean isActive = true;
|
||||
String name = "Java";
|
||||
```
|
||||
|
||||
### 控制结构
|
||||
|
||||
```java
|
||||
// if-else
|
||||
if (age >= 18) {
|
||||
System.out.println("成年人");
|
||||
} else {
|
||||
System.out.println("未成年人");
|
||||
}
|
||||
|
||||
// for 循环
|
||||
for (int i = 0; i < 10; i++) {
|
||||
System.out.println(i);
|
||||
}
|
||||
```
|
||||
|
||||
## 面向对象
|
||||
|
||||
### 类和对象
|
||||
|
||||
```java
|
||||
public class Person {
|
||||
private String name;
|
||||
private int age;
|
||||
|
||||
public Person(String name, int age) {
|
||||
this.name = name;
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
public void introduce() {
|
||||
System.out.println("我是 " + name + ",今年 " + age + " 岁");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 集合框架
|
||||
|
||||
### List
|
||||
|
||||
```java
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("Java");
|
||||
list.add("Python");
|
||||
list.add("Go");
|
||||
```
|
||||
|
||||
### Map
|
||||
|
||||
```java
|
||||
Map<String, Integer> map = new HashMap<>();
|
||||
map.put("Java", 1);
|
||||
map.put("Python", 2);
|
||||
```
|
||||
|
||||
## 常用工具类
|
||||
|
||||
### String 操作
|
||||
|
||||
```java
|
||||
String str = "Hello World";
|
||||
str.length(); // 长度
|
||||
str.substring(0, 5); // 子串
|
||||
str.split(" "); // 分割
|
||||
```
|
||||
|
||||
## 学习资源
|
||||
|
||||
- [Oracle Java 教程](https://docs.oracle.com/javase/tutorial/)
|
||||
- [Java 官方文档](https://docs.oracle.com/en/java/)
|
||||
|
||||
# Java 学习笔记
|
||||
|
||||
## 基础语法
|
||||
|
||||
### 变量和数据类型
|
||||
|
||||
```java
|
||||
// 基本数据类型
|
||||
int age = 25;
|
||||
double price = 99.99;
|
||||
boolean isActive = true;
|
||||
String name = "Java";
|
||||
```
|
||||
|
||||
### 控制结构
|
||||
|
||||
```java
|
||||
// if-else
|
||||
if (age >= 18) {
|
||||
System.out.println("成年人");
|
||||
} else {
|
||||
System.out.println("未成年人");
|
||||
}
|
||||
|
||||
// for 循环
|
||||
for (int i = 0; i < 10; i++) {
|
||||
System.out.println(i);
|
||||
}
|
||||
```
|
||||
|
||||
## 面向对象
|
||||
|
||||
### 类和对象
|
||||
|
||||
```java
|
||||
public class Person {
|
||||
private String name;
|
||||
private int age;
|
||||
|
||||
public Person(String name, int age) {
|
||||
this.name = name;
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
public void introduce() {
|
||||
System.out.println("我是 " + name + ",今年 " + age + " 岁");
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 集合框架
|
||||
|
||||
### List
|
||||
|
||||
```java
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("Java");
|
||||
list.add("Python");
|
||||
list.add("Go");
|
||||
```
|
||||
|
||||
### Map
|
||||
|
||||
```java
|
||||
Map<String, Integer> map = new HashMap<>();
|
||||
map.put("Java", 1);
|
||||
map.put("Python", 2);
|
||||
```
|
||||
|
||||
## 常用工具类
|
||||
|
||||
### String 操作
|
||||
|
||||
```java
|
||||
String str = "Hello World";
|
||||
str.length(); // 长度
|
||||
str.substring(0, 5); // 子串
|
||||
str.split(" "); // 分割
|
||||
```
|
||||
|
||||
## 学习资源
|
||||
|
||||
- [Oracle Java 教程](https://docs.oracle.com/javase/tutorial/)
|
||||
- [Java 官方文档](https://docs.oracle.com/en/java/)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,424 +1,424 @@
|
||||
# gerrit上传代码详细指南
|
||||
|
||||
# **Gerrit 代码上传详细指南**
|
||||
|
||||
## **一、Gerrit 工作流程概述**
|
||||
|
||||
```
|
||||
开发者 → 本地开发 → 推送代码审查 → Gerrit 评审 → 评审通过 → 合并代码
|
||||
↑ ↓
|
||||
└─────────────── 需要修改 ← 评审不通过 ←───────────────┘
|
||||
```
|
||||
|
||||
## **二、环境准备**
|
||||
|
||||
### **1. 安装必要的工具**
|
||||
|
||||
```bash
|
||||
# 安装 Git
|
||||
sudo apt-get install git # Ubuntu/Debian
|
||||
brew install git # macOS
|
||||
|
||||
# 安装 commit-msg 钩子(关键步骤)
|
||||
curl -Lo .git/hooks/commit-msg http://YOUR_GERRIT:8080/tools/hooks/commit-msg
|
||||
chmod +x .git/hooks/commit-msg
|
||||
```
|
||||
|
||||
### **2. 配置 Git 用户信息**
|
||||
|
||||
```bash
|
||||
git config --global user.name "你的姓名"
|
||||
git config --global user.email "你的邮箱@company.com"
|
||||
git config --global core.autocrlf input # Windows 用户重要!
|
||||
git config --global core.safecrlf warn
|
||||
```
|
||||
|
||||
### **3. 配置 SSH 密钥**
|
||||
|
||||
```bash
|
||||
# 生成 SSH 密钥
|
||||
ssh-keygen -t ed25519 -C "your_email@company.com"
|
||||
|
||||
# 查看公钥
|
||||
cat ~/.ssh/id_ed25519.pub
|
||||
|
||||
# 将公钥添加到 Gerrit: Settings → SSH Keys
|
||||
```
|
||||
|
||||
## **三、日常开发流程**
|
||||
|
||||
### **1. 克隆项目**
|
||||
|
||||
```bash
|
||||
# 方式1:通过 SSH(推荐)
|
||||
git clone ssh://username@gerrit-server:29418/project-name
|
||||
|
||||
# 方式2:通过 HTTP
|
||||
git clone http://gerrit-server:8080/project-name
|
||||
```
|
||||
|
||||
### **2. 创建开发分支**
|
||||
|
||||
```bash
|
||||
# 从 master 创建功能分支
|
||||
git checkout master
|
||||
git pull origin master
|
||||
git checkout -b feature/your-feature-name
|
||||
|
||||
# 或者从特定版本创建
|
||||
git checkout -b feature/xxx release-1.0
|
||||
```
|
||||
|
||||
### **3. 进行开发**
|
||||
|
||||
```bash
|
||||
# 修改文件
|
||||
git add .
|
||||
git status # 查看状态
|
||||
|
||||
# 提交代码(commit-msg 钩子会自动添加 Change-Id)
|
||||
git commit -m "功能描述
|
||||
|
||||
详细描述:
|
||||
1. 做了什么修改
|
||||
2. 为什么修改
|
||||
3. 测试情况
|
||||
|
||||
Bug: BUG-12345 # 如果有 Bug 编号
|
||||
Feature: FEAT-6789 # 如果有需求编号
|
||||
|
||||
Change-Id: I自动生成"
|
||||
```
|
||||
|
||||
### **4. 推送代码审查**
|
||||
|
||||
```bash
|
||||
# 标准推送方式(创建/更新代码审查)
|
||||
git push origin HEAD:refs/for/目标分支
|
||||
|
||||
# 示例:
|
||||
git push origin HEAD:refs/for/master # 推送到 master 评审
|
||||
git push origin HEAD:refs/for/release-1.0 # 推送到 release 分支评审
|
||||
git push origin HEAD:refs/for/feature/xxx # 推送到功能分支评审
|
||||
```
|
||||
|
||||
## **四、推送参数详解**
|
||||
|
||||
### **1. 普通推送**
|
||||
|
||||
```bash
|
||||
# 创建新的代码审查
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 创建草稿代码审查
|
||||
git push origin HEAD:refs/drafts/master
|
||||
```
|
||||
|
||||
### **2. 推送并设置评审人**
|
||||
|
||||
```bash
|
||||
# 推送并添加 Reviewer
|
||||
git push origin HEAD:refs/for/master%r=reviewer1@company.com,r=reviewer2@company.com
|
||||
|
||||
# 推送并添加 CC
|
||||
git push origin HEAD:refs/for/master%cc=manager@company.com
|
||||
|
||||
# 推送并设置 Topic
|
||||
git push origin HEAD:refs/for/master%topic=feature/login
|
||||
```
|
||||
|
||||
### **3. 推送选项组合**
|
||||
|
||||
```bash
|
||||
# 完整示例
|
||||
git push origin HEAD:refs/for/master%\
|
||||
r=alice@company.com,\
|
||||
r=bob@company.com,\
|
||||
cc=manager@company.com,\
|
||||
topic=feature/login,\
|
||||
l=Code-Review+2,\
|
||||
l=Verified+1
|
||||
```
|
||||
|
||||
## **五、更新已有的代码审查**
|
||||
|
||||
### **1. 修改后更新**
|
||||
|
||||
```bash
|
||||
# 修改代码后
|
||||
git add .
|
||||
git commit --amend # 重要:必须使用 --amend 保留 Change-Id
|
||||
|
||||
# 重新推送(会自动更新原有代码审查)
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
|
||||
### **2. 基于评审意见修改**
|
||||
|
||||
```bash
|
||||
# 查看评审意见后修改
|
||||
git fetch origin refs/changes/XX/YYYY/Z && git checkout FETCH_HEAD
|
||||
# 或者
|
||||
git review -d 12345 # 如果安装了 git-review
|
||||
|
||||
# 修改代码
|
||||
git add .
|
||||
git commit --amend
|
||||
|
||||
# 重新推送
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
|
||||
### **3. 创建新的 Patch Set**
|
||||
|
||||
```bash
|
||||
# 每次 git commit --amend 后推送都会创建新的 Patch Set
|
||||
git log --oneline -1 # 确认 Change-Id 存在
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
|
||||
## **六、解决常见问题**
|
||||
|
||||
### **问题1:缺少 Change-Id**
|
||||
|
||||
```bash
|
||||
# 安装 commit-msg 钩子
|
||||
curl -Lo .git/hooks/commit-msg http://gerrit:8080/tools/hooks/commit-msg
|
||||
chmod +x .git/hooks/commit-msg
|
||||
|
||||
# 为现有提交添加 Change-Id
|
||||
git commit --amend --no-edit # 重新提交,钩子会自动添加
|
||||
|
||||
# 或者手动添加
|
||||
git commit --amend -m "原提交信息
|
||||
|
||||
Change-Id: I旧的ChangeId" # 从 Gerrit 界面复制
|
||||
```
|
||||
|
||||
### **问题2:权限拒绝**
|
||||
|
||||
```bash
|
||||
# 检查 SSH 配置
|
||||
ssh -p 29418 username@gerrit-server
|
||||
|
||||
# 检查公钥是否添加
|
||||
cat ~/.ssh/id_ed25519.pub
|
||||
|
||||
# 检查项目权限
|
||||
# 联系管理员或查看 Gerrit Web 界面
|
||||
```
|
||||
|
||||
### **问题3:冲突无法推送**
|
||||
|
||||
```bash
|
||||
# 拉取最新代码
|
||||
git fetch origin
|
||||
git rebase origin/master # 或者 git merge origin/master
|
||||
|
||||
# 解决冲突
|
||||
git mergetool # 或手动解决
|
||||
git add .
|
||||
git rebase --continue # 如果使用 rebase
|
||||
|
||||
# 重新推送
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
|
||||
### **问题4:错误的分支目标**
|
||||
|
||||
```bash
|
||||
# 查看当前分支
|
||||
git branch -a
|
||||
|
||||
# 查看远程分支
|
||||
git branch -r
|
||||
|
||||
# 推送到正确的分支
|
||||
git push origin HEAD:refs/for/正确的分支名
|
||||
```
|
||||
|
||||
## **七、高级操作**
|
||||
|
||||
### **1. 提交多个相关修改**
|
||||
|
||||
```bash
|
||||
# 创建多个提交
|
||||
git add file1
|
||||
git commit -m "修改1: 功能A"
|
||||
git add file2
|
||||
git commit -m "修改2: 功能B"
|
||||
|
||||
# 推送到同一个 Topic
|
||||
git push origin HEAD~2:refs/for/master%topic=feature/xxx
|
||||
```
|
||||
|
||||
### **2. 依赖链提交**
|
||||
|
||||
```bash
|
||||
# 第一个提交
|
||||
git commit -m "基础修改"
|
||||
|
||||
# 第二个提交依赖第一个
|
||||
git commit -m "依赖修改"
|
||||
|
||||
# 推送到 Gerrit 时保持依赖关系
|
||||
git push origin HEAD~1:refs/for/master
|
||||
git push origin HEAD:refs/for/master%depends=第一个提交的Change-Id
|
||||
```
|
||||
|
||||
### **3. 使用 git-review 工具**
|
||||
|
||||
```bash
|
||||
# 安装
|
||||
pip install git-review
|
||||
|
||||
# 初始化
|
||||
git review -s
|
||||
|
||||
# 提交代码审查
|
||||
git review
|
||||
|
||||
# 下载代码审查
|
||||
git review -d 12345 # Change-Number
|
||||
```
|
||||
|
||||
## **八、Gerrit Web 界面操作**
|
||||
|
||||
### **1. 查看代码审查**
|
||||
|
||||
- 访问:`http://gerrit:8080`
|
||||
- 登录 → Dashboard → 查看你的代码审查
|
||||
- 点击 Change-Number 进入详情
|
||||
|
||||
### **2. 评审操作**
|
||||
|
||||
- **+1 / -1**:代码风格、建议性意见
|
||||
- **+2 / -2**:代码评审通过/拒绝(需要权限)
|
||||
- **Submit**:合并代码(需要权限)
|
||||
- **Abandon**:放弃代码审查
|
||||
- **Rebase**:重新基于最新代码
|
||||
- **Cherry Pick**:应用到其他分支
|
||||
|
||||
### **3. 查看差异**
|
||||
|
||||
- **Side-by-Side**:并排对比
|
||||
- **Unified Diff**:统一差异
|
||||
- **Patch Set**:切换不同版本
|
||||
|
||||
## **九、最佳实践**
|
||||
|
||||
### **1. 提交信息规范**
|
||||
|
||||
```
|
||||
一句话摘要(50字以内)
|
||||
|
||||
详细描述:
|
||||
• 做了什么修改
|
||||
• 为什么修改
|
||||
• 如何测试
|
||||
• 可能的影响
|
||||
|
||||
Bug: BUG-12345
|
||||
Feature: FEAT-6789
|
||||
Test: 通过单元测试/集成测试
|
||||
|
||||
Change-Id: I自动生成
|
||||
```
|
||||
|
||||
### **2. 代码审查前自查**
|
||||
|
||||
```bash
|
||||
# 1. 运行代码检查
|
||||
git diff --check # 检查空白字符
|
||||
|
||||
# 2. 运行测试
|
||||
npm test # 或 mvn test, pytest 等
|
||||
|
||||
# 3. 检查提交信息
|
||||
git log --oneline -1
|
||||
|
||||
# 4. 确保 Change-Id 存在
|
||||
git log -1 | grep Change-Id
|
||||
```
|
||||
|
||||
### **3. 每日工作流程**
|
||||
|
||||
```bash
|
||||
# 早上
|
||||
git fetch origin
|
||||
git rebase origin/master # 更新本地代码
|
||||
|
||||
# 开发中
|
||||
git add .
|
||||
git commit -m "..."
|
||||
|
||||
# 推送前
|
||||
git pull --rebase origin master # 再次更新
|
||||
解决冲突(如果有)
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 查看 Gerrit 反馈
|
||||
# 根据评审意见修改
|
||||
```
|
||||
|
||||
## **十、常用命令速查**
|
||||
|
||||
```bash
|
||||
# 初始化
|
||||
git clone ssh://user@gerrit:29418/project
|
||||
scp -p -P 29418 user@gerrit:hooks/commit-msg .git/hooks/
|
||||
|
||||
# 日常开发
|
||||
git checkout -b feature/xxx
|
||||
git add .
|
||||
git commit -m "..."
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 更新
|
||||
git commit --amend
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 查看
|
||||
git log --oneline -5
|
||||
git status
|
||||
git diff
|
||||
|
||||
# 解决冲突
|
||||
git fetch origin
|
||||
git rebase origin/master
|
||||
解决冲突 → git add → git rebase --continue
|
||||
```
|
||||
|
||||
## **十一、故障排除**
|
||||
|
||||
| 问题 | 解决方案 |
|
||||
| ------------- | ----------------- |
|
||||
| 403 Forbidden | 检查 SSH 密钥/HTTP 密码 |
|
||||
| 缺少 Change-Id | 安装 commit-msg 钩子 |
|
||||
| 分支不存在 | 先创建分支或确认分支名 |
|
||||
| 冲突无法推送 | rebase 解决冲突 |
|
||||
| 权限不足 | 联系管理员添加权限 |
|
||||
| 推送被拒绝 | 检查目标分支是否正确 |
|
||||
|
||||
## **十二、快速参考卡片**
|
||||
|
||||
```
|
||||
✅ 正确流程:
|
||||
1. git clone
|
||||
2. 安装 commit-msg 钩子
|
||||
3. git checkout -b feature/xxx
|
||||
4. 开发并提交
|
||||
5. git push origin HEAD:refs/for/目标分支
|
||||
|
||||
✅ 更新流程:
|
||||
1. git commit --amend # 必须!
|
||||
2. git push origin HEAD:refs/for/目标分支
|
||||
|
||||
✅ 关键要点:
|
||||
• 每次提交都必须有 Change-Id
|
||||
• 更新必须用 --amend
|
||||
• 只能推送到 refs/for/
|
||||
• 在 Gerrit Web 界面查看结果
|
||||
```
|
||||
|
||||
需要我详细解释哪个部分吗?
|
||||
# gerrit上传代码详细指南
|
||||
|
||||
# **Gerrit 代码上传详细指南**
|
||||
|
||||
## **一、Gerrit 工作流程概述**
|
||||
|
||||
```
|
||||
开发者 → 本地开发 → 推送代码审查 → Gerrit 评审 → 评审通过 → 合并代码
|
||||
↑ ↓
|
||||
└─────────────── 需要修改 ← 评审不通过 ←───────────────┘
|
||||
```
|
||||
|
||||
## **二、环境准备**
|
||||
|
||||
### **1. 安装必要的工具**
|
||||
|
||||
```bash
|
||||
# 安装 Git
|
||||
sudo apt-get install git # Ubuntu/Debian
|
||||
brew install git # macOS
|
||||
|
||||
# 安装 commit-msg 钩子(关键步骤)
|
||||
curl -Lo .git/hooks/commit-msg http://YOUR_GERRIT:8080/tools/hooks/commit-msg
|
||||
chmod +x .git/hooks/commit-msg
|
||||
```
|
||||
|
||||
### **2. 配置 Git 用户信息**
|
||||
|
||||
```bash
|
||||
git config --global user.name "你的姓名"
|
||||
git config --global user.email "你的邮箱@company.com"
|
||||
git config --global core.autocrlf input # Windows 用户重要!
|
||||
git config --global core.safecrlf warn
|
||||
```
|
||||
|
||||
### **3. 配置 SSH 密钥**
|
||||
|
||||
```bash
|
||||
# 生成 SSH 密钥
|
||||
ssh-keygen -t ed25519 -C "your_email@company.com"
|
||||
|
||||
# 查看公钥
|
||||
cat ~/.ssh/id_ed25519.pub
|
||||
|
||||
# 将公钥添加到 Gerrit: Settings → SSH Keys
|
||||
```
|
||||
|
||||
## **三、日常开发流程**
|
||||
|
||||
### **1. 克隆项目**
|
||||
|
||||
```bash
|
||||
# 方式1:通过 SSH(推荐)
|
||||
git clone ssh://username@gerrit-server:29418/project-name
|
||||
|
||||
# 方式2:通过 HTTP
|
||||
git clone http://gerrit-server:8080/project-name
|
||||
```
|
||||
|
||||
### **2. 创建开发分支**
|
||||
|
||||
```bash
|
||||
# 从 master 创建功能分支
|
||||
git checkout master
|
||||
git pull origin master
|
||||
git checkout -b feature/your-feature-name
|
||||
|
||||
# 或者从特定版本创建
|
||||
git checkout -b feature/xxx release-1.0
|
||||
```
|
||||
|
||||
### **3. 进行开发**
|
||||
|
||||
```bash
|
||||
# 修改文件
|
||||
git add .
|
||||
git status # 查看状态
|
||||
|
||||
# 提交代码(commit-msg 钩子会自动添加 Change-Id)
|
||||
git commit -m "功能描述
|
||||
|
||||
详细描述:
|
||||
1. 做了什么修改
|
||||
2. 为什么修改
|
||||
3. 测试情况
|
||||
|
||||
Bug: BUG-12345 # 如果有 Bug 编号
|
||||
Feature: FEAT-6789 # 如果有需求编号
|
||||
|
||||
Change-Id: I自动生成"
|
||||
```
|
||||
|
||||
### **4. 推送代码审查**
|
||||
|
||||
```bash
|
||||
# 标准推送方式(创建/更新代码审查)
|
||||
git push origin HEAD:refs/for/目标分支
|
||||
|
||||
# 示例:
|
||||
git push origin HEAD:refs/for/master # 推送到 master 评审
|
||||
git push origin HEAD:refs/for/release-1.0 # 推送到 release 分支评审
|
||||
git push origin HEAD:refs/for/feature/xxx # 推送到功能分支评审
|
||||
```
|
||||
|
||||
## **四、推送参数详解**
|
||||
|
||||
### **1. 普通推送**
|
||||
|
||||
```bash
|
||||
# 创建新的代码审查
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 创建草稿代码审查
|
||||
git push origin HEAD:refs/drafts/master
|
||||
```
|
||||
|
||||
### **2. 推送并设置评审人**
|
||||
|
||||
```bash
|
||||
# 推送并添加 Reviewer
|
||||
git push origin HEAD:refs/for/master%r=reviewer1@company.com,r=reviewer2@company.com
|
||||
|
||||
# 推送并添加 CC
|
||||
git push origin HEAD:refs/for/master%cc=manager@company.com
|
||||
|
||||
# 推送并设置 Topic
|
||||
git push origin HEAD:refs/for/master%topic=feature/login
|
||||
```
|
||||
|
||||
### **3. 推送选项组合**
|
||||
|
||||
```bash
|
||||
# 完整示例
|
||||
git push origin HEAD:refs/for/master%\
|
||||
r=alice@company.com,\
|
||||
r=bob@company.com,\
|
||||
cc=manager@company.com,\
|
||||
topic=feature/login,\
|
||||
l=Code-Review+2,\
|
||||
l=Verified+1
|
||||
```
|
||||
|
||||
## **五、更新已有的代码审查**
|
||||
|
||||
### **1. 修改后更新**
|
||||
|
||||
```bash
|
||||
# 修改代码后
|
||||
git add .
|
||||
git commit --amend # 重要:必须使用 --amend 保留 Change-Id
|
||||
|
||||
# 重新推送(会自动更新原有代码审查)
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
|
||||
### **2. 基于评审意见修改**
|
||||
|
||||
```bash
|
||||
# 查看评审意见后修改
|
||||
git fetch origin refs/changes/XX/YYYY/Z && git checkout FETCH_HEAD
|
||||
# 或者
|
||||
git review -d 12345 # 如果安装了 git-review
|
||||
|
||||
# 修改代码
|
||||
git add .
|
||||
git commit --amend
|
||||
|
||||
# 重新推送
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
|
||||
### **3. 创建新的 Patch Set**
|
||||
|
||||
```bash
|
||||
# 每次 git commit --amend 后推送都会创建新的 Patch Set
|
||||
git log --oneline -1 # 确认 Change-Id 存在
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
|
||||
## **六、解决常见问题**
|
||||
|
||||
### **问题1:缺少 Change-Id**
|
||||
|
||||
```bash
|
||||
# 安装 commit-msg 钩子
|
||||
curl -Lo .git/hooks/commit-msg http://gerrit:8080/tools/hooks/commit-msg
|
||||
chmod +x .git/hooks/commit-msg
|
||||
|
||||
# 为现有提交添加 Change-Id
|
||||
git commit --amend --no-edit # 重新提交,钩子会自动添加
|
||||
|
||||
# 或者手动添加
|
||||
git commit --amend -m "原提交信息
|
||||
|
||||
Change-Id: I旧的ChangeId" # 从 Gerrit 界面复制
|
||||
```
|
||||
|
||||
### **问题2:权限拒绝**
|
||||
|
||||
```bash
|
||||
# 检查 SSH 配置
|
||||
ssh -p 29418 username@gerrit-server
|
||||
|
||||
# 检查公钥是否添加
|
||||
cat ~/.ssh/id_ed25519.pub
|
||||
|
||||
# 检查项目权限
|
||||
# 联系管理员或查看 Gerrit Web 界面
|
||||
```
|
||||
|
||||
### **问题3:冲突无法推送**
|
||||
|
||||
```bash
|
||||
# 拉取最新代码
|
||||
git fetch origin
|
||||
git rebase origin/master # 或者 git merge origin/master
|
||||
|
||||
# 解决冲突
|
||||
git mergetool # 或手动解决
|
||||
git add .
|
||||
git rebase --continue # 如果使用 rebase
|
||||
|
||||
# 重新推送
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
|
||||
### **问题4:错误的分支目标**
|
||||
|
||||
```bash
|
||||
# 查看当前分支
|
||||
git branch -a
|
||||
|
||||
# 查看远程分支
|
||||
git branch -r
|
||||
|
||||
# 推送到正确的分支
|
||||
git push origin HEAD:refs/for/正确的分支名
|
||||
```
|
||||
|
||||
## **七、高级操作**
|
||||
|
||||
### **1. 提交多个相关修改**
|
||||
|
||||
```bash
|
||||
# 创建多个提交
|
||||
git add file1
|
||||
git commit -m "修改1: 功能A"
|
||||
git add file2
|
||||
git commit -m "修改2: 功能B"
|
||||
|
||||
# 推送到同一个 Topic
|
||||
git push origin HEAD~2:refs/for/master%topic=feature/xxx
|
||||
```
|
||||
|
||||
### **2. 依赖链提交**
|
||||
|
||||
```bash
|
||||
# 第一个提交
|
||||
git commit -m "基础修改"
|
||||
|
||||
# 第二个提交依赖第一个
|
||||
git commit -m "依赖修改"
|
||||
|
||||
# 推送到 Gerrit 时保持依赖关系
|
||||
git push origin HEAD~1:refs/for/master
|
||||
git push origin HEAD:refs/for/master%depends=第一个提交的Change-Id
|
||||
```
|
||||
|
||||
### **3. 使用 git-review 工具**
|
||||
|
||||
```bash
|
||||
# 安装
|
||||
pip install git-review
|
||||
|
||||
# 初始化
|
||||
git review -s
|
||||
|
||||
# 提交代码审查
|
||||
git review
|
||||
|
||||
# 下载代码审查
|
||||
git review -d 12345 # Change-Number
|
||||
```
|
||||
|
||||
## **八、Gerrit Web 界面操作**
|
||||
|
||||
### **1. 查看代码审查**
|
||||
|
||||
- 访问:`http://gerrit:8080`
|
||||
- 登录 → Dashboard → 查看你的代码审查
|
||||
- 点击 Change-Number 进入详情
|
||||
|
||||
### **2. 评审操作**
|
||||
|
||||
- **+1 / -1**:代码风格、建议性意见
|
||||
- **+2 / -2**:代码评审通过/拒绝(需要权限)
|
||||
- **Submit**:合并代码(需要权限)
|
||||
- **Abandon**:放弃代码审查
|
||||
- **Rebase**:重新基于最新代码
|
||||
- **Cherry Pick**:应用到其他分支
|
||||
|
||||
### **3. 查看差异**
|
||||
|
||||
- **Side-by-Side**:并排对比
|
||||
- **Unified Diff**:统一差异
|
||||
- **Patch Set**:切换不同版本
|
||||
|
||||
## **九、最佳实践**
|
||||
|
||||
### **1. 提交信息规范**
|
||||
|
||||
```
|
||||
一句话摘要(50字以内)
|
||||
|
||||
详细描述:
|
||||
• 做了什么修改
|
||||
• 为什么修改
|
||||
• 如何测试
|
||||
• 可能的影响
|
||||
|
||||
Bug: BUG-12345
|
||||
Feature: FEAT-6789
|
||||
Test: 通过单元测试/集成测试
|
||||
|
||||
Change-Id: I自动生成
|
||||
```
|
||||
|
||||
### **2. 代码审查前自查**
|
||||
|
||||
```bash
|
||||
# 1. 运行代码检查
|
||||
git diff --check # 检查空白字符
|
||||
|
||||
# 2. 运行测试
|
||||
npm test # 或 mvn test, pytest 等
|
||||
|
||||
# 3. 检查提交信息
|
||||
git log --oneline -1
|
||||
|
||||
# 4. 确保 Change-Id 存在
|
||||
git log -1 | grep Change-Id
|
||||
```
|
||||
|
||||
### **3. 每日工作流程**
|
||||
|
||||
```bash
|
||||
# 早上
|
||||
git fetch origin
|
||||
git rebase origin/master # 更新本地代码
|
||||
|
||||
# 开发中
|
||||
git add .
|
||||
git commit -m "..."
|
||||
|
||||
# 推送前
|
||||
git pull --rebase origin master # 再次更新
|
||||
解决冲突(如果有)
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 查看 Gerrit 反馈
|
||||
# 根据评审意见修改
|
||||
```
|
||||
|
||||
## **十、常用命令速查**
|
||||
|
||||
```bash
|
||||
# 初始化
|
||||
git clone ssh://user@gerrit:29418/project
|
||||
scp -p -P 29418 user@gerrit:hooks/commit-msg .git/hooks/
|
||||
|
||||
# 日常开发
|
||||
git checkout -b feature/xxx
|
||||
git add .
|
||||
git commit -m "..."
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 更新
|
||||
git commit --amend
|
||||
git push origin HEAD:refs/for/master
|
||||
|
||||
# 查看
|
||||
git log --oneline -5
|
||||
git status
|
||||
git diff
|
||||
|
||||
# 解决冲突
|
||||
git fetch origin
|
||||
git rebase origin/master
|
||||
解决冲突 → git add → git rebase --continue
|
||||
```
|
||||
|
||||
## **十一、故障排除**
|
||||
|
||||
| 问题 | 解决方案 |
|
||||
| ------------- | ----------------- |
|
||||
| 403 Forbidden | 检查 SSH 密钥/HTTP 密码 |
|
||||
| 缺少 Change-Id | 安装 commit-msg 钩子 |
|
||||
| 分支不存在 | 先创建分支或确认分支名 |
|
||||
| 冲突无法推送 | rebase 解决冲突 |
|
||||
| 权限不足 | 联系管理员添加权限 |
|
||||
| 推送被拒绝 | 检查目标分支是否正确 |
|
||||
|
||||
## **十二、快速参考卡片**
|
||||
|
||||
```
|
||||
✅ 正确流程:
|
||||
1. git clone
|
||||
2. 安装 commit-msg 钩子
|
||||
3. git checkout -b feature/xxx
|
||||
4. 开发并提交
|
||||
5. git push origin HEAD:refs/for/目标分支
|
||||
|
||||
✅ 更新流程:
|
||||
1. git commit --amend # 必须!
|
||||
2. git push origin HEAD:refs/for/目标分支
|
||||
|
||||
✅ 关键要点:
|
||||
• 每次提交都必须有 Change-Id
|
||||
• 更新必须用 --amend
|
||||
• 只能推送到 refs/for/
|
||||
• 在 Gerrit Web 界面查看结果
|
||||
```
|
||||
|
||||
需要我详细解释哪个部分吗?
|
||||
|
||||
128
docs/学习笔记/gerrit分支规范.md
Normal file
128
docs/学习笔记/gerrit分支规范.md
Normal file
@@ -0,0 +1,128 @@
|
||||
推荐标准分支模型: master/main主干分支 永远保持可编译、可运行 release-* 发布分支 只合并经过验证的Change hotfix-* 紧急修复
|
||||
|
||||
|
||||
您总结的Gerrit分支创建流程非常准确和实用!以下是对您提供内容的梳理和补充,使其更加清晰系统化。
|
||||
|
||||
## Gerrit 分支管理全流程
|
||||
|
||||
### 一、权限说明(重要前提)
|
||||
- **Owner/Maintainer**:有权限创建新分支
|
||||
- **Developer**:默认只能推送提交到现有分支,不能创建新分支
|
||||
- **权限配置路径**:Project → Access → Reference: refs/heads/*
|
||||
|
||||
### 二、分支创建详细步骤
|
||||
|
||||
#### 1. master/main分支(主干分支)
|
||||
```bash
|
||||
# 如果仓库为空,需要初始化master分支
|
||||
git clone ssh://user@gerrit-ip:29418/project-name
|
||||
cd project-name
|
||||
git checkout -b master
|
||||
# 首次推送master分支(不走Review流程)
|
||||
git push origin master
|
||||
```
|
||||
|
||||
#### 2. release-*分支(发布分支)
|
||||
```bash
|
||||
# 1. 更新master分支
|
||||
git checkout master
|
||||
git pull
|
||||
|
||||
# 2. 创建本地release分支
|
||||
git checkout -b release-1.0
|
||||
|
||||
# 3. 推送到Gerrit创建远程分支
|
||||
git push origin release-1.0
|
||||
# 注意:这里直接push,不是refs/for/
|
||||
```
|
||||
|
||||
#### 3. hotfix-*分支(紧急修复分支)
|
||||
```bash
|
||||
# 从release分支创建
|
||||
git checkout release-1.0
|
||||
git pull
|
||||
git checkout -b hotfix-crash-123
|
||||
git push origin hotfix-crash-123
|
||||
|
||||
# 从master分支创建(如果未建立release分支)
|
||||
git checkout master
|
||||
git pull
|
||||
git checkout -b hotfix-issue-456
|
||||
git push origin hotfix-issue-456
|
||||
```
|
||||
|
||||
### 三、不同分支的提交方式差异
|
||||
|
||||
| 分支类型 | 推送命令 | 是否走Review | 说明 |
|
||||
|---------|---------|-------------|------|
|
||||
| 创建新分支 | `git push origin 分支名` | ❌ 否 | 直接创建分支 |
|
||||
| master分支提交 | `git push origin HEAD:refs/for/master` | ✅ 是 | 常规开发流程 |
|
||||
| release分支提交 | `git push origin HEAD:refs/for/release-1.0` | ✅ 是 | 修复bug流程 |
|
||||
| hotfix分支提交 | `git push origin HEAD:refs/for/hotfix-*` | ✅ 是 | 紧急修复流程 |
|
||||
|
||||
### 四、分支合并策略
|
||||
|
||||
#### hotfix修复后的合并流程:
|
||||
```bash
|
||||
# 1. 修复完成后,合并到release分支
|
||||
git checkout release-1.0
|
||||
git merge --no-ff hotfix-crash-123
|
||||
git push origin HEAD:refs/for/release-1.0
|
||||
|
||||
# 2. cherry-pick到master
|
||||
git checkout master
|
||||
git cherry-pick <hotfix-commit-id>
|
||||
git push origin HEAD:refs/for/master
|
||||
```
|
||||
|
||||
### 五、最佳实践建议
|
||||
|
||||
1. **分支命名规范**:
|
||||
- feature/xxx(功能分支,从master创建)
|
||||
- release/x.y.z(发布分支)
|
||||
- hotfix/xxx(紧急修复)
|
||||
- bugfix/xxx(普通bug修复)
|
||||
|
||||
2. **权限管理**:
|
||||
```bash
|
||||
# 为开发者授予特定分支创建权限(Gerrit Web界面)
|
||||
# Access → Reference: refs/heads/feature/*
|
||||
# 添加 Push + Create Reference 权限给特定用户组
|
||||
```
|
||||
|
||||
3. **CI/CD集成**:
|
||||
- release-* 分支:触发正式环境构建
|
||||
- hotfix-* 分支:紧急修复通道,快速验证
|
||||
- master分支:每日/持续集成
|
||||
|
||||
4. **分支保护**:
|
||||
- 保护master分支:必须通过Code Review
|
||||
- 保护release分支:限制直接push,需通过Review
|
||||
- 定期清理过期分支
|
||||
|
||||
### 六、常见问题排查
|
||||
|
||||
1. **权限拒绝错误**:
|
||||
```
|
||||
! [remote rejected] release-1.0 -> release-1.0 (prohibited by Gerrit)
|
||||
```
|
||||
解决方法:联系Owner/Maintainer授予分支创建权限
|
||||
|
||||
2. **分支已存在错误**:
|
||||
```bash
|
||||
# 先拉取远程分支列表
|
||||
git fetch origin
|
||||
git branch -r # 查看远程分支
|
||||
```
|
||||
|
||||
3. **使用Gerrit插件创建分支**(可选):
|
||||
```bash
|
||||
# 安装git-review插件
|
||||
pip install git-review
|
||||
|
||||
# 创建分支并推送到Gerrit
|
||||
git review -c -b release-1.0
|
||||
```
|
||||
|
||||
您的总结已经非常全面,这些补充主要是为了让操作流程更加清晰,便于团队协作和标准化操作。
|
||||
|
||||
276
docs/学习笔记/git同步远程分支总结.md
Normal file
276
docs/学习笔记/git同步远程分支总结.md
Normal file
@@ -0,0 +1,276 @@
|
||||
非常全面的同步远程分支指南!我来帮你整理几个最实用的方案,并提供更清晰的分类:
|
||||
|
||||
## 📋 **最常用的分支同步方案**
|
||||
|
||||
### **方案一:基础同步(最常用)**
|
||||
```bash
|
||||
# 1. 获取所有远程更新并清理已删除分支
|
||||
git fetch --all --prune
|
||||
|
||||
# 2. 查看所有分支
|
||||
git branch -a
|
||||
|
||||
# 3. 切换到特定分支并同步
|
||||
git checkout 分支名
|
||||
git pull origin 分支名
|
||||
```
|
||||
|
||||
### **方案二:一键同步所有分支到本地**
|
||||
```bash
|
||||
# 推荐的安全版本
|
||||
git fetch --all --prune
|
||||
for branch in $(git branch -r | grep -v '\->' | grep -v 'HEAD'); do
|
||||
local_branch=${branch#origin/}
|
||||
if ! git show-ref --quiet refs/heads/"$local_branch"; then
|
||||
echo "📦 创建分支: $local_branch"
|
||||
git branch --track "$local_branch" "$branch"
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
## 🔧 **实用脚本整理**
|
||||
|
||||
### **脚本1:智能同步脚本 (sync-branches.sh)**
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# 智能同步所有远程分支
|
||||
|
||||
echo "🔄 开始同步分支..."
|
||||
|
||||
# 1. 获取所有远程更新
|
||||
git fetch --all --prune
|
||||
|
||||
# 2. 同步主要分支
|
||||
main_branch=""
|
||||
if git show-ref --verify --quiet refs/remotes/origin/main; then
|
||||
main_branch="main"
|
||||
elif git show-ref --verify --quiet refs/remotes/origin/master; then
|
||||
main_branch="master"
|
||||
fi
|
||||
|
||||
if [ -n "$main_branch" ]; then
|
||||
echo "📌 更新主分支: $main_branch"
|
||||
git checkout $main_branch 2>/dev/null || git checkout -b $main_branch origin/$main_branch
|
||||
git pull origin $main_branch
|
||||
fi
|
||||
|
||||
# 3. 创建本地不存在的远程分支
|
||||
echo "📦 同步其他分支..."
|
||||
git branch -r | grep -v '\->' | grep -v 'HEAD' | while read remote; do
|
||||
local_branch=${remote#origin/}
|
||||
|
||||
# 跳过已经存在的分支
|
||||
if git show-ref --verify --quiet refs/heads/"$local_branch"; then
|
||||
echo " ✓ 已存在: $local_branch"
|
||||
continue
|
||||
fi
|
||||
|
||||
# 创建跟踪分支
|
||||
echo " ➕ 创建: $local_branch"
|
||||
git branch --track "$local_branch" "$remote" 2>/dev/null
|
||||
done
|
||||
|
||||
# 4. 检查是否需要更新现有分支
|
||||
echo "🔄 检查本地分支更新..."
|
||||
current_branch=$(git branch --show-current)
|
||||
git branch --format='%(refname:short)' | while read branch; do
|
||||
if [ "$branch" != "$current_branch" ]; then
|
||||
git checkout "$branch" >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
git pull origin "$branch" --ff-only >/dev/null 2>&1
|
||||
echo " ⬆️ 已更新: $branch"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# 5. 返回原分支
|
||||
git checkout "$current_branch" >/dev/null 2>&1
|
||||
|
||||
echo "✅ 同步完成!"
|
||||
echo "📊 分支统计:"
|
||||
git branch -a | grep -c "remotes/origin" | xargs echo "远程分支数: "
|
||||
git branch | wc -l | xargs echo "本地分支数: "
|
||||
```
|
||||
|
||||
### **脚本2:快速切换和同步 (git-sync)**
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# 快速切换到指定分支并同步
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "用法: git-sync 分支名"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BRANCH=$1
|
||||
|
||||
echo "🔄 切换到分支: $BRANCH"
|
||||
|
||||
# 检查分支是否存在
|
||||
if git show-ref --verify --quiet refs/heads/"$BRANCH"; then
|
||||
# 本地分支存在
|
||||
git checkout "$BRANCH"
|
||||
git pull origin "$BRANCH"
|
||||
elif git show-ref --verify --quiet refs/remotes/origin/"$BRANCH"; then
|
||||
# 远程分支存在,创建本地跟踪分支
|
||||
git checkout -b "$BRANCH" origin/"$BRANCH"
|
||||
else
|
||||
echo "❌ 错误: 分支 $BRANCH 不存在"
|
||||
echo "可用的远程分支:"
|
||||
git branch -r | grep -v '\->' | sed 's/origin\///' | sort | uniq
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 完成!当前分支: $(git branch --show-current)"
|
||||
```
|
||||
|
||||
## ⚙️ **Git 配置别名(推荐)**
|
||||
|
||||
添加到 `~/.gitconfig` 的 `[alias]` 部分:
|
||||
|
||||
```ini
|
||||
[alias]
|
||||
# 同步所有分支
|
||||
sync-all = "!f() { \
|
||||
echo '🔄 获取远程更新...'; \
|
||||
git fetch --all --prune; \
|
||||
echo '📦 创建本地分支...'; \
|
||||
git branch -r | grep -v '\\->' | grep -v 'HEAD' | while read remote; do \
|
||||
local=${remote#origin/}; \
|
||||
if ! git show-ref --quiet refs/heads/\"$local\"; then \
|
||||
echo \" ➕ $local\"; \
|
||||
git branch --track \"$local\" \"$remote\" 2>/dev/null; \
|
||||
fi; \
|
||||
done; \
|
||||
echo '✅ 同步完成!'; \
|
||||
}; f"
|
||||
|
||||
# 更新当前仓库所有分支
|
||||
update-all = "!f() { \
|
||||
current=$(git branch --show-current); \
|
||||
for branch in $(git branch --format='%(refname:short)'); do \
|
||||
if [ \"$branch\" != \"$current\" ]; then \
|
||||
git checkout \"$branch\" 2>/dev/null && git pull origin \"$branch\" 2>/dev/null; \
|
||||
fi; \
|
||||
done; \
|
||||
git checkout \"$current\"; \
|
||||
echo '✅ 所有分支已更新!'; \
|
||||
}; f"
|
||||
|
||||
# 查看分支树状图
|
||||
tree = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
|
||||
|
||||
# 清理已合并的分支
|
||||
clean-branches = "!f() { \
|
||||
git fetch --all --prune; \
|
||||
git branch --merged main | grep -v '^\\* main$' | xargs -n 1 git branch -d; \
|
||||
echo '🧹 已清理合并到main的分支'; \
|
||||
}; f"
|
||||
```
|
||||
|
||||
使用别名:
|
||||
```bash
|
||||
git sync-all # 同步所有远程分支到本地
|
||||
git update-all # 更新所有本地分支
|
||||
git tree # 查看分支树状图
|
||||
git clean-branches # 清理已合并的分支
|
||||
```
|
||||
|
||||
## 🎯 **针对不同场景的推荐方案**
|
||||
|
||||
### **场景1:新电脑初次同步**
|
||||
```bash
|
||||
# 1. 克隆仓库
|
||||
git clone ssh://renjianbo@101.43.95.130:29418/zhini_im
|
||||
|
||||
# 2. 进入目录并同步所有分支
|
||||
cd zhini_im
|
||||
git sync-all # 使用上面配置的别名
|
||||
```
|
||||
|
||||
### **场景2:日常更新**
|
||||
```bash
|
||||
# 推荐的工作流程
|
||||
git status # 1. 查看状态
|
||||
git stash # 2. 暂存未提交的修改(可选)
|
||||
git fetch --all --prune # 3. 获取最新状态
|
||||
git checkout main # 4. 切换到主分支
|
||||
git pull --rebase origin main # 5. 更新主分支
|
||||
git checkout 你的分支 # 6. 切回你的分支
|
||||
git rebase main # 7. 基于最新main重定基
|
||||
git stash pop # 8. 恢复暂存的修改
|
||||
```
|
||||
|
||||
### **场景3:清理分支**
|
||||
```bash
|
||||
# 查看哪些分支已经合并到main
|
||||
git branch --merged main
|
||||
|
||||
# 删除已合并的分支(除了当前分支和main)
|
||||
git branch --merged main | grep -v "main" | xargs git branch -d
|
||||
|
||||
# 强制删除未合并的分支
|
||||
git branch -D 分支名
|
||||
|
||||
# 删除远程分支(谨慎操作)
|
||||
git push origin --delete 分支名
|
||||
```
|
||||
|
||||
## 📊 **分支管理最佳实践**
|
||||
|
||||
### **分支命名规范**
|
||||
```
|
||||
feature/ # 新功能
|
||||
bugfix/ # 修复bug
|
||||
hotfix/ # 紧急修复
|
||||
release/ # 发布分支
|
||||
```
|
||||
|
||||
### **常用命令速查**
|
||||
```bash
|
||||
# 查看分支关系
|
||||
git log --graph --oneline --all
|
||||
|
||||
# 查看远程分支的最后提交
|
||||
git for-each-ref --sort=-committerdate refs/remotes/origin/ --format='%(refname:short) - %(committerdate:short)'
|
||||
|
||||
# 查看分支差异
|
||||
git diff main..你的分支 # 比较差异
|
||||
git log main..你的分支 # 查看提交记录差异
|
||||
|
||||
# 重命名分支
|
||||
git branch -m 旧名字 新名字 # 本地重命名
|
||||
git push origin :旧名字 # 删除远程旧分支
|
||||
git push origin 新名字 # 推送新分支
|
||||
git push origin -u 新名字 # 设置上游分支
|
||||
```
|
||||
|
||||
## 🚨 **注意事项**
|
||||
|
||||
1. **备份重要修改**:同步前先提交或暂存工作
|
||||
2. **小心 force push**:避免使用 `--force`,用 `--force-with-lease` 更安全
|
||||
3. **定期清理**:删除已合并的本地分支,保持仓库整洁
|
||||
4. **沟通协调**:多人协作时,删除远程分支前要确认
|
||||
|
||||
## 🎪 **一个命令完成所有同步**
|
||||
|
||||
终极简化版:
|
||||
```bash
|
||||
# 创建 ~/bin/git-full-sync 文件
|
||||
#!/bin/bash
|
||||
cd /path/to/your/project
|
||||
git stash
|
||||
git fetch --all --prune
|
||||
git checkout main && git pull origin main
|
||||
git sync-all # 使用别名
|
||||
git stash pop
|
||||
echo "✅ 全量同步完成!"
|
||||
|
||||
# 添加执行权限
|
||||
chmod +x ~/bin/git-full-sync
|
||||
|
||||
# 使用
|
||||
cd 你的项目
|
||||
git-full-sync
|
||||
```
|
||||
|
||||
这些方案覆盖了大部分使用场景,根据你的具体需求选择合适的方法即可。最常用的是方案一的基础同步,配合别名可以极大提高效率。
|
||||
14
docs/学习笔记/git设置用户名和邮箱.md
Normal file
14
docs/学习笔记/git设置用户名和邮箱.md
Normal file
@@ -0,0 +1,14 @@
|
||||
配置用户名和邮箱(如果还没配置)
|
||||
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"
|
||||
|
||||
查看用户名
|
||||
git config user.name
|
||||
|
||||
查看邮箱
|
||||
git config user.email
|
||||
|
||||
查看远程仓库地址
|
||||
git config remote.origin.url
|
||||
|
||||
设置远程仓库地址
|
||||
git remote set-url origin ssh://renjianbo@101.43.95.130:29419/zhini_im_android
|
||||
@@ -1,119 +1,119 @@
|
||||
# 前端学习笔记
|
||||
|
||||
## HTML
|
||||
|
||||
### 基本结构
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>页面标题</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>标题</h1>
|
||||
<p>段落内容</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
## CSS
|
||||
|
||||
### 样式定义
|
||||
|
||||
```css
|
||||
.container {
|
||||
width: 100%;
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.button {
|
||||
background-color: #007bff;
|
||||
color: white;
|
||||
padding: 10px 20px;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
```
|
||||
|
||||
## JavaScript
|
||||
|
||||
### 基础语法
|
||||
|
||||
```javascript
|
||||
// 变量
|
||||
let name = "JavaScript";
|
||||
const age = 25;
|
||||
|
||||
// 函数
|
||||
function greet(name) {
|
||||
return `Hello, ${name}!`;
|
||||
}
|
||||
|
||||
// 箭头函数
|
||||
const greet = (name) => `Hello, ${name}!`;
|
||||
|
||||
// 异步函数
|
||||
async function fetchData() {
|
||||
const response = await fetch('/api/data');
|
||||
const data = await response.json();
|
||||
return data;
|
||||
}
|
||||
```
|
||||
|
||||
## 框架和库
|
||||
|
||||
### React
|
||||
|
||||
```jsx
|
||||
import React, { useState } from 'react';
|
||||
|
||||
function App() {
|
||||
const [count, setCount] = useState(0);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<p>计数: {count}</p>
|
||||
<button onClick={() => setCount(count + 1)}>
|
||||
增加
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Vue
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<div>
|
||||
<p>计数: {{ count }}</p>
|
||||
<button @click="increment">增加</button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
count: 0
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
increment() {
|
||||
this.count++;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
```
|
||||
|
||||
## 学习资源
|
||||
|
||||
- [MDN Web 文档](https://developer.mozilla.org/)
|
||||
- [React 官方文档](https://react.dev/)
|
||||
- [Vue 官方文档](https://cn.vuejs.org/)
|
||||
|
||||
# 前端学习笔记
|
||||
|
||||
## HTML
|
||||
|
||||
### 基本结构
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>页面标题</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>标题</h1>
|
||||
<p>段落内容</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
## CSS
|
||||
|
||||
### 样式定义
|
||||
|
||||
```css
|
||||
.container {
|
||||
width: 100%;
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.button {
|
||||
background-color: #007bff;
|
||||
color: white;
|
||||
padding: 10px 20px;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
```
|
||||
|
||||
## JavaScript
|
||||
|
||||
### 基础语法
|
||||
|
||||
```javascript
|
||||
// 变量
|
||||
let name = "JavaScript";
|
||||
const age = 25;
|
||||
|
||||
// 函数
|
||||
function greet(name) {
|
||||
return `Hello, ${name}!`;
|
||||
}
|
||||
|
||||
// 箭头函数
|
||||
const greet = (name) => `Hello, ${name}!`;
|
||||
|
||||
// 异步函数
|
||||
async function fetchData() {
|
||||
const response = await fetch('/api/data');
|
||||
const data = await response.json();
|
||||
return data;
|
||||
}
|
||||
```
|
||||
|
||||
## 框架和库
|
||||
|
||||
### React
|
||||
|
||||
```jsx
|
||||
import React, { useState } from 'react';
|
||||
|
||||
function App() {
|
||||
const [count, setCount] = useState(0);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<p>计数: {count}</p>
|
||||
<button onClick={() => setCount(count + 1)}>
|
||||
增加
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
### Vue
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<div>
|
||||
<p>计数: {{ count }}</p>
|
||||
<button @click="increment">增加</button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
count: 0
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
increment() {
|
||||
this.count++;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
```
|
||||
|
||||
## 学习资源
|
||||
|
||||
- [MDN Web 文档](https://developer.mozilla.org/)
|
||||
- [React 官方文档](https://react.dev/)
|
||||
- [Vue 官方文档](https://cn.vuejs.org/)
|
||||
|
||||
|
||||
133
docs/学习笔记/生成并配置SSH密钥、克隆仓库.md
Normal file
133
docs/学习笔记/生成并配置SSH密钥、克隆仓库.md
Normal file
@@ -0,0 +1,133 @@
|
||||
你的操作指南非常详细和准确!我帮你重新整理了一个更清晰的流程,并修复了流程图的语法:
|
||||
|
||||
## 完整操作流程
|
||||
|
||||
### **第一步:生成SSH密钥(在新电脑上)**
|
||||
|
||||
```bash
|
||||
# 1. 生成SSH密钥(使用ed25519算法,更安全)
|
||||
ssh-keygen -t ed25519 -C "renjianbo@example.com"
|
||||
|
||||
# 按提示操作:
|
||||
# - 直接回车使用默认路径 (~/.ssh/id_ed25519)
|
||||
# - 可以设置密码(可选)
|
||||
# - 再次确认密码
|
||||
|
||||
# 2. 查看公钥并复制
|
||||
cat ~/.ssh/id_ed25519.pub
|
||||
```
|
||||
**输出示例:**
|
||||
```
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJL...你的公钥内容... renjianbo@example.com
|
||||
```
|
||||
|
||||
### **第二步:添加公钥到Gerrit账户**
|
||||
|
||||
1. 登录 Gerrit:`http://101.43.95.130:8080/`
|
||||
2. 点击右上角 **renjianbo** → **Settings** → **SSH Keys**
|
||||
3. 点击 **Add Key** 按钮
|
||||
4. 粘贴复制的公钥内容,保存
|
||||
|
||||
### **第三步:克隆项目**
|
||||
|
||||
#### **方式A:SSH协议(推荐)**
|
||||
```bash
|
||||
# 使用你的用户名 renjianbo
|
||||
git clone ssh://renjianbo@101.43.95.130:29418/zhini_im
|
||||
```
|
||||
|
||||
#### **方式B:HTTP协议(备用)**
|
||||
```bash
|
||||
git clone http://101.43.95.130:8080/zhini_im
|
||||
# 可能需要输入用户名密码
|
||||
```
|
||||
|
||||
### **第四步:验证和配置**
|
||||
|
||||
```bash
|
||||
# 1. 进入项目目录
|
||||
cd zhini_im
|
||||
|
||||
# 2. 查看远程仓库地址
|
||||
git remote -v
|
||||
# 应该显示类似:origin ssh://renjianbo@101.43.95.130:29418/zhini_im
|
||||
|
||||
# 3. 配置用户信息(重要!)
|
||||
git config user.name "renjianbo"
|
||||
git config user.email "renjianbo@example.com" # 使用你的Gerrit注册邮箱
|
||||
|
||||
# 4. 可选:验证SSH连接
|
||||
ssh -p 29418 renjianbo@101.43.95.130
|
||||
# 如果看到 Gerrit 欢迎信息,说明连接成功
|
||||
```
|
||||
|
||||
## **操作流程图**
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start[开始] --> GenKey[生成SSH密钥<br>ssh-keygen]
|
||||
GenKey --> CopyKey[复制公钥<br>cat ~/.ssh/id_ed25519.pub]
|
||||
CopyKey --> LoginGerrit[登录Gerrit网页]
|
||||
LoginGerrit --> AddKey[添加公钥到SSH Keys]
|
||||
|
||||
AddKey --> ChooseMethod{选择克隆方式}
|
||||
ChooseMethod --> SSH[SSH协议<br>git clone ssh://renjianbo@...]
|
||||
ChooseMethod --> HTTP[HTTP协议<br>git clone http://...]
|
||||
|
||||
SSH --> Verify[进入目录验证]
|
||||
HTTP --> Verify
|
||||
Verify --> Config[配置用户信息]
|
||||
Config --> Done[完成]
|
||||
```
|
||||
|
||||
## **常见问题解决**
|
||||
|
||||
### **1. SSH连接被拒绝**
|
||||
```bash
|
||||
# 测试SSH连接
|
||||
ssh -p 29418 -T renjianbo@101.43.95.130
|
||||
|
||||
# 如果提示"Permission denied",检查:
|
||||
# - 公钥是否正确添加到Gerrit
|
||||
# - 用户名是否正确(不是admin,是renjianbo)
|
||||
# - 是否有仓库访问权限
|
||||
```
|
||||
|
||||
### **2. 首次连接需要确认主机**
|
||||
```
|
||||
The authenticity of host '[101.43.95.130]:29418' can't be established.
|
||||
ECDSA key fingerprint is SHA256:xxx...
|
||||
Are you sure you want to continue connecting (yes/no/[fingerprint])?
|
||||
```
|
||||
**输入:** `yes`
|
||||
|
||||
### **3. 端口被阻挡**
|
||||
- 检查防火墙是否允许29418端口
|
||||
- 在公司网络可能需要配置代理
|
||||
|
||||
### **4. 克隆速度慢**
|
||||
```bash
|
||||
# 可以尝试浅克隆(只获取最新版本)
|
||||
git clone --depth 1 ssh://renjianbo@101.43.95.130:29418/zhini_im
|
||||
```
|
||||
|
||||
## **快捷脚本**
|
||||
创建一键克隆脚本 `clone_zhini_im.sh`:
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# 克隆智拟IM项目
|
||||
echo "正在克隆智拟IM项目..."
|
||||
git clone ssh://renjianbo@101.43.95.130:29418/zhini_im
|
||||
cd zhini_im
|
||||
git config user.name "renjianbo"
|
||||
git config user.email "renjianbo@example.com"
|
||||
echo "克隆完成!"
|
||||
```
|
||||
|
||||
执行:
|
||||
```bash
|
||||
chmod +x clone_zhini_im.sh
|
||||
./clone_zhini_im.sh
|
||||
```
|
||||
|
||||
按照这个流程操作,你应该能成功将项目拉到新电脑。如果遇到具体错误,可以把错误信息发给我,我会帮你诊断解决。
|
||||
@@ -1,104 +1,104 @@
|
||||
# 开发规范
|
||||
|
||||
## Markdown 编写规范
|
||||
|
||||
### 标题层级
|
||||
|
||||
- 使用 `#` 作为文档主标题(H1)
|
||||
- 使用 `##` 作为章节标题(H2)
|
||||
- 使用 `###` 作为小节标题(H3)
|
||||
- 避免跳过标题层级
|
||||
|
||||
### 代码块
|
||||
|
||||
使用三个反引号包裹代码,并指定语言:
|
||||
|
||||
```markdown
|
||||
```python
|
||||
def hello():
|
||||
print("Hello, World!")
|
||||
```
|
||||
|
||||
```
|
||||
### 链接
|
||||
|
||||
- 内部链接:使用相对路径
|
||||
- 外部链接:使用完整 URL
|
||||
|
||||
```markdown
|
||||
[内部文档](../其他文档.md)
|
||||
[外部链接](https://example.com)
|
||||
```
|
||||
|
||||
### 图片
|
||||
|
||||
将图片放在 `docs/images/` 目录,使用相对路径:
|
||||
|
||||
```markdown
|
||||

|
||||
```
|
||||
|
||||
### 表格
|
||||
|
||||
使用 Markdown 表格语法:
|
||||
|
||||
```markdown
|
||||
| 列1 | 列2 | 列3 |
|
||||
|-----|-----|-----|
|
||||
| 值1 | 值2 | 值3 |
|
||||
```
|
||||
|
||||
## 文档结构规范
|
||||
|
||||
### 文档头部
|
||||
|
||||
每个文档应包含:
|
||||
|
||||
- 标题(H1)
|
||||
- 简要描述
|
||||
- 目录(可选,用于长文档)
|
||||
|
||||
### 章节组织
|
||||
|
||||
- 使用清晰的章节标题
|
||||
- 保持逻辑顺序
|
||||
- 使用列表和表格增强可读性
|
||||
|
||||
## 命名规范
|
||||
|
||||
### 文件名
|
||||
|
||||
- 使用小写字母和连字符
|
||||
- 避免使用空格和特殊字符
|
||||
- 示例:`快速开始.md`、`api-文档.md`
|
||||
|
||||
### 目录名
|
||||
|
||||
- 使用中文或英文
|
||||
- 保持简洁明了
|
||||
- 示例:`开发指南/`、`dev-guide/`
|
||||
|
||||
## 内容规范
|
||||
|
||||
### 语言风格
|
||||
|
||||
- 使用简洁明了的语言
|
||||
- 避免冗长的句子
|
||||
- 使用列表和表格组织信息
|
||||
|
||||
### 代码示例
|
||||
|
||||
- 提供完整可运行的代码示例
|
||||
- 添加必要的注释
|
||||
- 说明代码的用途和注意事项
|
||||
|
||||
### 更新记录
|
||||
|
||||
重要文档建议添加更新记录:
|
||||
|
||||
```markdown
|
||||
## 更新记录
|
||||
|
||||
- 2024-01-01: 初始版本
|
||||
- 2024-01-15: 添加新功能说明
|
||||
```
|
||||
# 开发规范
|
||||
|
||||
## Markdown 编写规范
|
||||
|
||||
### 标题层级
|
||||
|
||||
- 使用 `#` 作为文档主标题(H1)
|
||||
- 使用 `##` 作为章节标题(H2)
|
||||
- 使用 `###` 作为小节标题(H3)
|
||||
- 避免跳过标题层级
|
||||
|
||||
### 代码块
|
||||
|
||||
使用三个反引号包裹代码,并指定语言:
|
||||
|
||||
```markdown
|
||||
```python
|
||||
def hello():
|
||||
print("Hello, World!")
|
||||
```
|
||||
|
||||
```
|
||||
### 链接
|
||||
|
||||
- 内部链接:使用相对路径
|
||||
- 外部链接:使用完整 URL
|
||||
|
||||
```markdown
|
||||
[内部文档](../其他文档.md)
|
||||
[外部链接](https://example.com)
|
||||
```
|
||||
|
||||
### 图片
|
||||
|
||||
将图片放在 `docs/images/` 目录,使用相对路径:
|
||||
|
||||
```markdown
|
||||

|
||||
```
|
||||
|
||||
### 表格
|
||||
|
||||
使用 Markdown 表格语法:
|
||||
|
||||
```markdown
|
||||
| 列1 | 列2 | 列3 |
|
||||
|-----|-----|-----|
|
||||
| 值1 | 值2 | 值3 |
|
||||
```
|
||||
|
||||
## 文档结构规范
|
||||
|
||||
### 文档头部
|
||||
|
||||
每个文档应包含:
|
||||
|
||||
- 标题(H1)
|
||||
- 简要描述
|
||||
- 目录(可选,用于长文档)
|
||||
|
||||
### 章节组织
|
||||
|
||||
- 使用清晰的章节标题
|
||||
- 保持逻辑顺序
|
||||
- 使用列表和表格增强可读性
|
||||
|
||||
## 命名规范
|
||||
|
||||
### 文件名
|
||||
|
||||
- 使用小写字母和连字符
|
||||
- 避免使用空格和特殊字符
|
||||
- 示例:`快速开始.md`、`api-文档.md`
|
||||
|
||||
### 目录名
|
||||
|
||||
- 使用中文或英文
|
||||
- 保持简洁明了
|
||||
- 示例:`开发指南/`、`dev-guide/`
|
||||
|
||||
## 内容规范
|
||||
|
||||
### 语言风格
|
||||
|
||||
- 使用简洁明了的语言
|
||||
- 避免冗长的句子
|
||||
- 使用列表和表格组织信息
|
||||
|
||||
### 代码示例
|
||||
|
||||
- 提供完整可运行的代码示例
|
||||
- 添加必要的注释
|
||||
- 说明代码的用途和注意事项
|
||||
|
||||
### 更新记录
|
||||
|
||||
重要文档建议添加更新记录:
|
||||
|
||||
```markdown
|
||||
## 更新记录
|
||||
|
||||
- 2024-01-01: 初始版本
|
||||
- 2024-01-15: 添加新功能说明
|
||||
```
|
||||
|
||||
@@ -1,56 +1,56 @@
|
||||
# 快速开始
|
||||
|
||||
## 环境要求
|
||||
|
||||
- Docker
|
||||
- Docker Compose
|
||||
|
||||
## 启动服务
|
||||
|
||||
```bash
|
||||
cd /home/renjianbo/devops/mkdocs
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **本地访问**: http://localhost:8000
|
||||
- **服务器访问**: http://101.43.95.130:8000
|
||||
|
||||
## 编辑文档
|
||||
|
||||
1. 编辑 `docs/` 目录下的 Markdown 文件
|
||||
2. 保存后,页面会自动刷新(开发模式)
|
||||
3. 在 `mkdocs.yml` 中配置导航结构
|
||||
|
||||
## 常用命令
|
||||
|
||||
### 启动服务
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 停止服务
|
||||
|
||||
```bash
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
### 构建静态站点
|
||||
|
||||
```bash
|
||||
docker-compose exec mkdocs mkdocs build
|
||||
```
|
||||
|
||||
### 进入容器
|
||||
|
||||
```bash
|
||||
docker exec -it mkdocs sh
|
||||
```
|
||||
# 快速开始
|
||||
|
||||
## 环境要求
|
||||
|
||||
- Docker
|
||||
- Docker Compose
|
||||
|
||||
## 启动服务
|
||||
|
||||
```bash
|
||||
cd /home/renjianbo/devops/mkdocs
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 访问地址
|
||||
|
||||
- **本地访问**: http://localhost:8000
|
||||
- **服务器访问**: http://101.43.95.130:8000
|
||||
|
||||
## 编辑文档
|
||||
|
||||
1. 编辑 `docs/` 目录下的 Markdown 文件
|
||||
2. 保存后,页面会自动刷新(开发模式)
|
||||
3. 在 `mkdocs.yml` 中配置导航结构
|
||||
|
||||
## 常用命令
|
||||
|
||||
### 启动服务
|
||||
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 停止服务
|
||||
|
||||
```bash
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
### 构建静态站点
|
||||
|
||||
```bash
|
||||
docker-compose exec mkdocs mkdocs build
|
||||
```
|
||||
|
||||
### 进入容器
|
||||
|
||||
```bash
|
||||
docker exec -it mkdocs sh
|
||||
```
|
||||
|
||||
@@ -1,45 +1,45 @@
|
||||
# 项目结构
|
||||
|
||||
## 目录说明
|
||||
|
||||
```
|
||||
mkdocs/
|
||||
├── docker-compose.yml # Docker Compose 配置文件
|
||||
├── mkdocs.yml # MkDocs 配置文件
|
||||
├── docs/ # 文档源文件目录
|
||||
│ ├── index.md # 首页
|
||||
│ ├── 开发指南/ # 开发相关文档
|
||||
│ ├── DevOps平台/ # DevOps 工具文档
|
||||
│ ├── 技术文档/ # 技术文档
|
||||
│ └── 学习笔记/ # 学习笔记
|
||||
└── site/ # 构建后的静态站点(可选)
|
||||
```
|
||||
|
||||
## 配置文件说明
|
||||
|
||||
### mkdocs.yml
|
||||
|
||||
MkDocs 的主配置文件,包含:
|
||||
|
||||
- 站点信息(名称、描述、作者等)
|
||||
- 主题配置
|
||||
- 插件配置
|
||||
- 导航结构
|
||||
- Markdown 扩展
|
||||
|
||||
### docker-compose.yml
|
||||
|
||||
Docker Compose 配置文件,定义:
|
||||
|
||||
- 使用的镜像
|
||||
- 端口映射
|
||||
- 数据卷挂载
|
||||
- 环境变量
|
||||
- 健康检查
|
||||
|
||||
## 文档组织建议
|
||||
|
||||
1. **按主题分类**: 将相关文档放在同一目录下
|
||||
2. **命名规范**: 使用有意义的文件名
|
||||
3. **导航清晰**: 在 `mkdocs.yml` 中维护清晰的导航结构
|
||||
4. **版本控制**: 建议使用 Git 管理文档
|
||||
# 项目结构
|
||||
|
||||
## 目录说明
|
||||
|
||||
```
|
||||
mkdocs/
|
||||
├── docker-compose.yml # Docker Compose 配置文件
|
||||
├── mkdocs.yml # MkDocs 配置文件
|
||||
├── docs/ # 文档源文件目录
|
||||
│ ├── index.md # 首页
|
||||
│ ├── 开发指南/ # 开发相关文档
|
||||
│ ├── DevOps平台/ # DevOps 工具文档
|
||||
│ ├── 技术文档/ # 技术文档
|
||||
│ └── 学习笔记/ # 学习笔记
|
||||
└── site/ # 构建后的静态站点(可选)
|
||||
```
|
||||
|
||||
## 配置文件说明
|
||||
|
||||
### mkdocs.yml
|
||||
|
||||
MkDocs 的主配置文件,包含:
|
||||
|
||||
- 站点信息(名称、描述、作者等)
|
||||
- 主题配置
|
||||
- 插件配置
|
||||
- 导航结构
|
||||
- Markdown 扩展
|
||||
|
||||
### docker-compose.yml
|
||||
|
||||
Docker Compose 配置文件,定义:
|
||||
|
||||
- 使用的镜像
|
||||
- 端口映射
|
||||
- 数据卷挂载
|
||||
- 环境变量
|
||||
- 健康检查
|
||||
|
||||
## 文档组织建议
|
||||
|
||||
1. **按主题分类**: 将相关文档放在同一目录下
|
||||
2. **命名规范**: 使用有意义的文件名
|
||||
3. **导航清晰**: 在 `mkdocs.yml` 中维护清晰的导航结构
|
||||
4. **版本控制**: 建议使用 Git 管理文档
|
||||
|
||||
@@ -1,78 +1,78 @@
|
||||
# API 文档
|
||||
|
||||
## Gerrit API
|
||||
|
||||
### REST API
|
||||
|
||||
Gerrit 提供 REST API 用于程序化访问。
|
||||
|
||||
**基础 URL**: `http://101.43.95.130:8082/a/`
|
||||
|
||||
### 获取变更信息
|
||||
|
||||
```bash
|
||||
curl http://101.43.95.130:8082/a/changes/12345
|
||||
```
|
||||
|
||||
### 获取项目列表
|
||||
|
||||
```bash
|
||||
curl http://101.43.95.130:8082/a/projects/
|
||||
```
|
||||
|
||||
## Gitea API
|
||||
|
||||
### REST API
|
||||
|
||||
Gitea 提供完整的 REST API。
|
||||
|
||||
**基础 URL**: `http://101.43.95.130:3000/api/v1/`
|
||||
|
||||
### 获取用户信息
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: token YOUR_TOKEN" \
|
||||
http://101.43.95.130:3000/api/v1/user
|
||||
```
|
||||
|
||||
### 创建仓库
|
||||
|
||||
```bash
|
||||
curl -X POST \
|
||||
-H "Authorization: token YOUR_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name":"my-repo"}' \
|
||||
http://101.43.95.130:3000/api/v1/user/repos
|
||||
```
|
||||
|
||||
## MinIO API
|
||||
|
||||
### S3 兼容 API
|
||||
|
||||
MinIO 完全兼容 Amazon S3 API。
|
||||
|
||||
**端点**: `http://101.43.95.130:9000`
|
||||
|
||||
### 使用 AWS CLI
|
||||
|
||||
```bash
|
||||
aws --endpoint-url http://101.43.95.130:9000 \
|
||||
s3 ls s3://my-bucket
|
||||
```
|
||||
|
||||
## Drone API
|
||||
|
||||
### REST API
|
||||
|
||||
Drone 提供 REST API 用于管理构建和仓库。
|
||||
|
||||
**基础 URL**: `http://101.43.95.130:3000/api/`
|
||||
|
||||
### 触发构建
|
||||
|
||||
```bash
|
||||
curl -X POST \
|
||||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||||
http://101.43.95.130:3000/api/repos/owner/name/builds
|
||||
```
|
||||
|
||||
# API 文档
|
||||
|
||||
## Gerrit API
|
||||
|
||||
### REST API
|
||||
|
||||
Gerrit 提供 REST API 用于程序化访问。
|
||||
|
||||
**基础 URL**: `http://101.43.95.130:8082/a/`
|
||||
|
||||
### 获取变更信息
|
||||
|
||||
```bash
|
||||
curl http://101.43.95.130:8082/a/changes/12345
|
||||
```
|
||||
|
||||
### 获取项目列表
|
||||
|
||||
```bash
|
||||
curl http://101.43.95.130:8082/a/projects/
|
||||
```
|
||||
|
||||
## Gitea API
|
||||
|
||||
### REST API
|
||||
|
||||
Gitea 提供完整的 REST API。
|
||||
|
||||
**基础 URL**: `http://101.43.95.130:3000/api/v1/`
|
||||
|
||||
### 获取用户信息
|
||||
|
||||
```bash
|
||||
curl -H "Authorization: token YOUR_TOKEN" \
|
||||
http://101.43.95.130:3000/api/v1/user
|
||||
```
|
||||
|
||||
### 创建仓库
|
||||
|
||||
```bash
|
||||
curl -X POST \
|
||||
-H "Authorization: token YOUR_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name":"my-repo"}' \
|
||||
http://101.43.95.130:3000/api/v1/user/repos
|
||||
```
|
||||
|
||||
## MinIO API
|
||||
|
||||
### S3 兼容 API
|
||||
|
||||
MinIO 完全兼容 Amazon S3 API。
|
||||
|
||||
**端点**: `http://101.43.95.130:9000`
|
||||
|
||||
### 使用 AWS CLI
|
||||
|
||||
```bash
|
||||
aws --endpoint-url http://101.43.95.130:9000 \
|
||||
s3 ls s3://my-bucket
|
||||
```
|
||||
|
||||
## Drone API
|
||||
|
||||
### REST API
|
||||
|
||||
Drone 提供 REST API 用于管理构建和仓库。
|
||||
|
||||
**基础 URL**: `http://101.43.95.130:3000/api/`
|
||||
|
||||
### 触发构建
|
||||
|
||||
```bash
|
||||
curl -X POST \
|
||||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||||
http://101.43.95.130:3000/api/repos/owner/name/builds
|
||||
```
|
||||
|
||||
|
||||
@@ -1,58 +1,58 @@
|
||||
# 架构设计
|
||||
|
||||
## 系统架构
|
||||
|
||||
### 整体架构
|
||||
|
||||
```
|
||||
┌─────────────┐
|
||||
│ 用户 │
|
||||
└──────┬──────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────┐
|
||||
│ DevOps 平台 │
|
||||
├─────────────────────────────────────┤
|
||||
│ Gerrit │ Gitea │ Drone CI │
|
||||
│ (代码审查)│ (Git仓库)│ (CI/CD) │
|
||||
├─────────────────────────────────────┤
|
||||
│ MinIO │ Nexus │ MkDocs │
|
||||
│ (对象存储)│ (Maven) │ (知识库) │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 服务说明
|
||||
|
||||
### 代码管理
|
||||
|
||||
- **Gerrit**: 代码审查和协作
|
||||
- **Gitea**: Git 仓库管理
|
||||
|
||||
### CI/CD
|
||||
|
||||
- **Drone CI**: 持续集成和部署
|
||||
|
||||
### 存储服务
|
||||
|
||||
- **MinIO**: 对象存储,用于构建产物和文件
|
||||
- **Nexus**: Maven 仓库,用于依赖管理
|
||||
|
||||
### 文档服务
|
||||
|
||||
- **MkDocs**: 个人知识库和文档管理
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **容器化**: Docker + Docker Compose
|
||||
- **版本控制**: Git
|
||||
- **CI/CD**: Drone
|
||||
- **存储**: MinIO
|
||||
- **文档**: MkDocs Material
|
||||
|
||||
## 部署架构
|
||||
|
||||
所有服务使用 Docker Compose 部署,便于管理和维护。
|
||||
|
||||
## 数据持久化
|
||||
|
||||
所有服务的数据都存储在 Docker 卷中,确保数据持久化。
|
||||
# 架构设计
|
||||
|
||||
## 系统架构
|
||||
|
||||
### 整体架构
|
||||
|
||||
```
|
||||
┌─────────────┐
|
||||
│ 用户 │
|
||||
└──────┬──────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────┐
|
||||
│ DevOps 平台 │
|
||||
├─────────────────────────────────────┤
|
||||
│ Gerrit │ Gitea │ Drone CI │
|
||||
│ (代码审查)│ (Git仓库)│ (CI/CD) │
|
||||
├─────────────────────────────────────┤
|
||||
│ MinIO │ Nexus │ MkDocs │
|
||||
│ (对象存储)│ (Maven) │ (知识库) │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 服务说明
|
||||
|
||||
### 代码管理
|
||||
|
||||
- **Gerrit**: 代码审查和协作
|
||||
- **Gitea**: Git 仓库管理
|
||||
|
||||
### CI/CD
|
||||
|
||||
- **Drone CI**: 持续集成和部署
|
||||
|
||||
### 存储服务
|
||||
|
||||
- **MinIO**: 对象存储,用于构建产物和文件
|
||||
- **Nexus**: Maven 仓库,用于依赖管理
|
||||
|
||||
### 文档服务
|
||||
|
||||
- **MkDocs**: 个人知识库和文档管理
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **容器化**: Docker + Docker Compose
|
||||
- **版本控制**: Git
|
||||
- **CI/CD**: Drone
|
||||
- **存储**: MinIO
|
||||
- **文档**: MkDocs Material
|
||||
|
||||
## 部署架构
|
||||
|
||||
所有服务使用 Docker Compose 部署,便于管理和维护。
|
||||
|
||||
## 数据持久化
|
||||
|
||||
所有服务的数据都存储在 Docker 卷中,确保数据持久化。
|
||||
|
||||
@@ -1,160 +1,160 @@
|
||||
# 部署文档
|
||||
|
||||
## 环境要求
|
||||
|
||||
- **操作系统**: Linux (CentOS 7+)
|
||||
- **Docker**: 20.10+
|
||||
- **Docker Compose**: 1.29+
|
||||
- **内存**: 建议 4GB+
|
||||
- **磁盘**: 建议 50GB+
|
||||
|
||||
## 部署步骤
|
||||
|
||||
### 1. 安装 Docker 和 Docker Compose
|
||||
|
||||
```bash
|
||||
# 安装 Docker
|
||||
sudo yum install -y docker
|
||||
sudo systemctl start docker
|
||||
sudo systemctl enable docker
|
||||
|
||||
# 安装 Docker Compose
|
||||
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
sudo chmod +x /usr/local/bin/docker-compose
|
||||
```
|
||||
|
||||
### 2. 克隆或创建项目目录
|
||||
|
||||
```bash
|
||||
mkdir -p /home/renjianbo/devops
|
||||
cd /home/renjianbo/devops
|
||||
```
|
||||
|
||||
### 3. 启动各个服务
|
||||
|
||||
#### Gerrit
|
||||
|
||||
```bash
|
||||
cd gerrit
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Gitea
|
||||
|
||||
```bash
|
||||
cd gitea
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### MinIO
|
||||
|
||||
```bash
|
||||
cd minio
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Nexus
|
||||
|
||||
```bash
|
||||
cd nexus
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Drone CI
|
||||
|
||||
```bash
|
||||
cd drone-ci
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### MkDocs
|
||||
|
||||
```bash
|
||||
cd mkdocs
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 4. 验证部署
|
||||
|
||||
```bash
|
||||
# 检查所有容器状态
|
||||
docker ps
|
||||
|
||||
# 检查端口监听
|
||||
netstat -tlnp | grep -E "8000|8082|3000|9000|8081"
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
|
||||
### 端口映射
|
||||
|
||||
- **Gerrit**: 8082 (HTTP), 29418 (SSH)
|
||||
- **Gitea**: 3000 (HTTP), 222 (SSH)
|
||||
- **MinIO**: 9000 (API), 9001 (Console)
|
||||
- **Nexus**: 8081 (HTTP)
|
||||
- **Drone CI**: 3000 (HTTP)
|
||||
- **MkDocs**: 8000 (HTTP)
|
||||
|
||||
### 数据持久化
|
||||
|
||||
所有服务的数据存储在 Docker 卷中,确保数据持久化。
|
||||
|
||||
## 备份和恢复
|
||||
|
||||
### 备份
|
||||
|
||||
```bash
|
||||
# 备份所有数据
|
||||
cd /home/renjianbo/devops
|
||||
./scripts/backup.sh
|
||||
```
|
||||
|
||||
### 恢复
|
||||
|
||||
```bash
|
||||
# 恢复数据
|
||||
cd /home/renjianbo/devops
|
||||
./scripts/restore.sh
|
||||
```
|
||||
|
||||
## 监控和维护
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
# 查看特定服务日志
|
||||
cd /home/renjianbo/devops/<服务名>
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
### 更新服务
|
||||
|
||||
```bash
|
||||
# 拉取最新镜像
|
||||
docker-compose pull
|
||||
|
||||
# 重启服务
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 端口冲突
|
||||
|
||||
如果端口被占用,修改 `docker-compose.yml` 中的端口映射。
|
||||
|
||||
### 权限问题
|
||||
|
||||
确保数据目录有正确的权限:
|
||||
|
||||
```bash
|
||||
sudo chown -R $USER:$USER /home/renjianbo/devops/*/data
|
||||
```
|
||||
|
||||
### 容器无法启动
|
||||
|
||||
查看容器日志:
|
||||
|
||||
```bash
|
||||
docker logs <容器名>
|
||||
```
|
||||
# 部署文档
|
||||
|
||||
## 环境要求
|
||||
|
||||
- **操作系统**: Linux (CentOS 7+)
|
||||
- **Docker**: 20.10+
|
||||
- **Docker Compose**: 1.29+
|
||||
- **内存**: 建议 4GB+
|
||||
- **磁盘**: 建议 50GB+
|
||||
|
||||
## 部署步骤
|
||||
|
||||
### 1. 安装 Docker 和 Docker Compose
|
||||
|
||||
```bash
|
||||
# 安装 Docker
|
||||
sudo yum install -y docker
|
||||
sudo systemctl start docker
|
||||
sudo systemctl enable docker
|
||||
|
||||
# 安装 Docker Compose
|
||||
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
sudo chmod +x /usr/local/bin/docker-compose
|
||||
```
|
||||
|
||||
### 2. 克隆或创建项目目录
|
||||
|
||||
```bash
|
||||
mkdir -p /home/renjianbo/devops
|
||||
cd /home/renjianbo/devops
|
||||
```
|
||||
|
||||
### 3. 启动各个服务
|
||||
|
||||
#### Gerrit
|
||||
|
||||
```bash
|
||||
cd gerrit
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Gitea
|
||||
|
||||
```bash
|
||||
cd gitea
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### MinIO
|
||||
|
||||
```bash
|
||||
cd minio
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Nexus
|
||||
|
||||
```bash
|
||||
cd nexus
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Drone CI
|
||||
|
||||
```bash
|
||||
cd drone-ci
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### MkDocs
|
||||
|
||||
```bash
|
||||
cd mkdocs
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 4. 验证部署
|
||||
|
||||
```bash
|
||||
# 检查所有容器状态
|
||||
docker ps
|
||||
|
||||
# 检查端口监听
|
||||
netstat -tlnp | grep -E "8000|8082|3000|9000|8081"
|
||||
```
|
||||
|
||||
## 配置说明
|
||||
|
||||
### 端口映射
|
||||
|
||||
- **Gerrit**: 8082 (HTTP), 29418 (SSH)
|
||||
- **Gitea**: 3000 (HTTP), 222 (SSH)
|
||||
- **MinIO**: 9000 (API), 9001 (Console)
|
||||
- **Nexus**: 8081 (HTTP)
|
||||
- **Drone CI**: 3000 (HTTP)
|
||||
- **MkDocs**: 8000 (HTTP)
|
||||
|
||||
### 数据持久化
|
||||
|
||||
所有服务的数据存储在 Docker 卷中,确保数据持久化。
|
||||
|
||||
## 备份和恢复
|
||||
|
||||
### 备份
|
||||
|
||||
```bash
|
||||
# 备份所有数据
|
||||
cd /home/renjianbo/devops
|
||||
./scripts/backup.sh
|
||||
```
|
||||
|
||||
### 恢复
|
||||
|
||||
```bash
|
||||
# 恢复数据
|
||||
cd /home/renjianbo/devops
|
||||
./scripts/restore.sh
|
||||
```
|
||||
|
||||
## 监控和维护
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
# 查看特定服务日志
|
||||
cd /home/renjianbo/devops/<服务名>
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
### 更新服务
|
||||
|
||||
```bash
|
||||
# 拉取最新镜像
|
||||
docker-compose pull
|
||||
|
||||
# 重启服务
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 端口冲突
|
||||
|
||||
如果端口被占用,修改 `docker-compose.yml` 中的端口映射。
|
||||
|
||||
### 权限问题
|
||||
|
||||
确保数据目录有正确的权限:
|
||||
|
||||
```bash
|
||||
sudo chown -R $USER:$USER /home/renjianbo/devops/*/data
|
||||
```
|
||||
|
||||
### 容器无法启动
|
||||
|
||||
查看容器日志:
|
||||
|
||||
```bash
|
||||
docker logs <容器名>
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user