mirror of
https://git.bjxgj.com/xgj/xgj-actions.git
synced 2025-10-14 06:33:37 +08:00
200 lines
5.4 KiB
Markdown
200 lines
5.4 KiB
Markdown
# Setup Build Environment Action
|
||
|
||
这是一个用于配置构建和部署环境的 GitHub Action,专门为 CI/CD 流水线设计。它能够自动安装和配置 Docker、kubectl 以及其他必要的构建工具。
|
||
|
||
## 🚀 特性
|
||
|
||
- ✅ 自动配置 Git 用户信息
|
||
- 🐳 安装 Docker CLI 和相关插件
|
||
- ☸️ 安装和配置 kubectl
|
||
- 🗄️ 智能缓存机制,提高构建速度
|
||
- 🌏 支持阿里云镜像源,提升国内访问速度
|
||
- 🔐 自动登录私有 Docker 仓库
|
||
- 📋 详细的日志输出和错误处理
|
||
- ⚡ 灵活的配置选项
|
||
|
||
## 📋 输入参数
|
||
|
||
| 参数名 | 描述 | 必填 | 默认值 |
|
||
| ------------------- | ------------------------------ | ---- | --------------------------- |
|
||
| `docker-registry` | Docker 私有仓库地址 | ❌ | `docker-registry.bjxgj.com` |
|
||
| `docker-username` | Docker 仓库用户名 | ❌ | `ci-action` |
|
||
| `docker-password` | Docker 仓库密码 | ✅ | - |
|
||
| `kube-config` | Base64 编码的 kubectl 配置文件 | ❌ | `''` |
|
||
| `cache-key` | 缓存键值 | ❌ | `setup-env` |
|
||
| `use-aliyun-mirror` | 是否使用阿里云镜像源 | ❌ | `true` |
|
||
| `git-user-name` | Git 用户名 | ❌ | `GiteaActions` |
|
||
| `git-user-email` | Git 用户邮箱 | ❌ | `actions@gitea.com` |
|
||
| `skip-kubectl` | 跳过 kubectl 安装和配置 | ❌ | `false` |
|
||
| `skip-docker-login` | 跳过 Docker 登录 | ❌ | `false` |
|
||
|
||
## 📤 输出参数
|
||
|
||
| 参数名 | 描述 |
|
||
| ----------------- | ------------------- |
|
||
| `cache-hit` | 缓存是否命中 |
|
||
| `kubectl-version` | 安装的 kubectl 版本 |
|
||
| `docker-version` | 安装的 Docker 版本 |
|
||
|
||
## 🏗️ 基本使用
|
||
|
||
### 最简配置
|
||
|
||
```yaml
|
||
- name: 配置构建环境
|
||
uses: actions/xgj/setup-env@v1
|
||
with:
|
||
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||
```
|
||
|
||
### 完整配置
|
||
|
||
```yaml
|
||
- name: 配置构建环境
|
||
uses: actions/xgj/setup-env@v1
|
||
with:
|
||
docker-registry: "your-registry.com"
|
||
docker-username: "your-username"
|
||
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||
kube-config: ${{ secrets.KUBE_CONFIG }}
|
||
cache-key: "my-project-env"
|
||
use-aliyun-mirror: "true"
|
||
git-user-name: "CI Bot"
|
||
git-user-email: "ci@yourcompany.com"
|
||
```
|
||
|
||
### 仅 Docker 环境
|
||
|
||
```yaml
|
||
- name: 配置 Docker 环境
|
||
uses: actions/xgj/setup-env@v1
|
||
with:
|
||
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||
skip-kubectl: "true"
|
||
```
|
||
|
||
### 仅 kubectl 环境
|
||
|
||
```yaml
|
||
- name: 配置 Kubernetes 环境
|
||
uses: actions/xgj/setup-env@v1
|
||
with:
|
||
kube-config: ${{ secrets.KUBE_CONFIG }}
|
||
skip-docker-login: "true"
|
||
```
|
||
|
||
## 📝 完整工作流示例
|
||
|
||
```yaml
|
||
name: Build and Deploy
|
||
on: [push]
|
||
|
||
jobs:
|
||
build:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: 检出代码
|
||
uses: actions/checkout@v4
|
||
|
||
- name: 配置构建环境
|
||
id: setup
|
||
uses: actions/xgj/setup-env@v1
|
||
with:
|
||
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||
kube-config: ${{ secrets.KUBE_CONFIG }}
|
||
cache-key: "build-${{ github.sha }}"
|
||
|
||
- name: 检查环境信息
|
||
run: |
|
||
echo "缓存命中: ${{ steps.setup.outputs.cache-hit }}"
|
||
echo "Docker 版本: ${{ steps.setup.outputs.docker-version }}"
|
||
echo "kubectl 版本: ${{ steps.setup.outputs.kubectl-version }}"
|
||
|
||
- name: 构建 Docker 镜像
|
||
run: |
|
||
docker build -t my-app:latest .
|
||
|
||
- name: 部署到 Kubernetes
|
||
run: |
|
||
kubectl apply -f k8s/
|
||
```
|
||
|
||
## 🔧 高级配置
|
||
|
||
### 自定义缓存策略
|
||
|
||
```yaml
|
||
- name: 配置环境(自定义缓存)
|
||
uses: actions/xgj/setup-env@v1
|
||
with:
|
||
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||
cache-key: 'env-${{ matrix.os }}-${{ hashFiles("Dockerfile") }}'
|
||
```
|
||
|
||
### 多环境部署
|
||
|
||
```yaml
|
||
strategy:
|
||
matrix:
|
||
environment: [dev, staging, prod]
|
||
steps:
|
||
- name: 配置环境
|
||
uses: actions/xgj/setup-env@v1
|
||
with:
|
||
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||
kube-config: ${{ secrets[format('KUBE_CONFIG_{0}', matrix.environment)] }}
|
||
cache-key: "deploy-${{ matrix.environment }}"
|
||
```
|
||
|
||
## 🛠️ 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **Docker 登录失败**
|
||
|
||
- 检查 `docker-password` 是否正确设置
|
||
- 确认 Docker 仓库地址和用户名
|
||
|
||
2. **kubectl 连接失败**
|
||
|
||
- 验证 `kube-config` 是否正确的 Base64 编码
|
||
- 检查集群网络连接
|
||
|
||
3. **缓存未命中**
|
||
- 检查 `cache-key` 配置
|
||
- 确认文件哈希是否变化
|
||
|
||
### 调试模式
|
||
|
||
启用详细日志输出:
|
||
|
||
```yaml
|
||
- name: 配置环境(调试模式)
|
||
uses: actions/xgj/setup-env@v1
|
||
with:
|
||
docker-password: ${{ secrets.DOCKER_PASSWORD }}
|
||
env:
|
||
ACTIONS_STEP_DEBUG: true
|
||
```
|
||
|
||
## 📋 环境要求
|
||
|
||
- **操作系统**: Ubuntu 18.04+, Debian 10+
|
||
- **权限**: 需要 sudo 权限安装软件包
|
||
- **网络**: 需要访问外部软件包仓库
|
||
|
||
## 🔒 安全考虑
|
||
|
||
- 使用 GitHub Secrets 存储敏感信息
|
||
- 定期更新依赖版本
|
||
- 限制 kubectl 权限范围
|
||
- 使用最小权限原则
|
||
|
||
## 🤝 贡献
|
||
|
||
欢迎提交 Issue 和 Pull Request!
|
||
|
||
## 📄 许可证
|
||
|
||
MIT License
|