本文档风哥主要介绍GitHub Actions,包括GitHub Actions的概念、特性、优势、架构设计、组件选择、配置、Workflow、集成等内容,参考Red Hat Enterprise Linux 10官方文档中的System administration章节,适合系统管理员和IT人员在生产环境中使用。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 GitHub Actions的概念
GitHub Actions是GitHub提供的持续集成和持续交付(CI/CD)服务,用于自动化构建、测试和部署软件项目。它与GitHub代码仓库紧密集成,能够在代码提交、PR创建等事件时自动触发工作流。学习交流加群风哥微信: itpux-com
- Workflow:定义整个CI/CD流程的工作流
- Job:工作流中的单个任务
- Step:任务中的单个步骤
- Action:可复用的步骤,封装了特定的功能
- Event:触发工作流的事件,如代码提交、PR创建等
- Runner:执行工作流的代理
1.2 GitHub Actions的特性
GitHub Actions的特性:
- 与GitHub集成:与GitHub代码仓库紧密集成
- 可扩展性:通过Actions市场获取和分享Actions
- 灵活性:支持自定义工作流,适应不同的构建和部署需求
- 并行执行:支持并行执行Job,提高构建效率
- 矩阵构建:支持矩阵构建,测试不同的环境
- 缓存:支持缓存依赖,提高构建速度
- 环境变量:支持设置环境变量
- Artifact:支持存储构建产物
1.3 GitHub Actions的优势
GitHub Actions的优势:
- 集成性:与GitHub代码仓库紧密集成,无需额外配置
- 易用性:配置简单,使用YAML文件定义工作流
- 可扩展性:通过Actions市场获取和分享Actions
- 灵活性:支持自定义工作流,适应不同的构建和部署需求
- 并行执行:支持并行执行Job,提高构建效率
- 免费使用:提供一定的免费使用额度
Part02-生产环境规划与建议
2.1 GitHub Actions架构设计
GitHub Actions架构设计要点:
– GitHub服务器:GitHub代码仓库和Actions配置管理
– GitHub Runner:执行Actions工作流的代理
– Workflow:定义构建、测试和部署流程
– Action:可复用的步骤,封装了特定的功能
– 存储:存储构建产物和缓存
# 部署模式
– GitHub托管Runner:使用GitHub提供的Runner
– 自托管Runner:使用自己的服务器作为Runner
– 混合模式:同时使用GitHub托管Runner和自托管Runner
# 高可用性设计
– 自托管Runner冗余:部署多个自托管Runner,实现高可用性
– 负载均衡:Runner自动负载均衡
– 数据备份:定期备份代码仓库数据
– 灾难恢复:制定灾难恢复计划
2.2 GitHub Actions组件选择
GitHub Actions组件选择要点:
– Workflow:定义整个CI/CD流程的工作流
– Job:工作流中的单个任务
– Step:任务中的单个步骤
– Action:可复用的步骤,封装了特定的功能
– Runner:执行工作流的代理
# Runner类型
– GitHub托管Runner:GitHub提供的Runner,支持多种操作系统
– 自托管Runner:自己部署的Runner,可以是物理机或虚拟机
# 常用Actions
– actions/checkout:检出代码仓库
– actions/setup-node:设置Node.js环境
– actions/setup-java:设置Java环境
– actions/setup-python:设置Python环境
– actions/upload-artifact:上传构建产物
– actions/download-artifact:下载构建产物
– actions/cache:缓存依赖
# 构建工具
– Maven:Java项目构建工具
– Gradle:Java项目构建工具
– Ant:Java项目构建工具
– npm:Node.js项目构建工具
– pip:Python项目构建工具
# 部署目标
– 本地服务器:部署到本地服务器
– 云服务器:部署到云服务器
– Kubernetes:部署到Kubernetes集群
– Docker:部署到Docker容器
– 云服务:部署到AWS、Azure、GCP等云服务
2.3 GitHub Actions最佳实践
GitHub Actions最佳实践:
- 合理规划Workflow:根据项目的需求定义合理的Workflow
- 使用缓存:缓存依赖,提高构建速度
- 使用Artifact:存储构建产物,方便后续部署
- 使用环境变量:使用环境变量管理敏感信息
- 并行执行:合理配置并行执行,提高构建效率
- 使用矩阵构建:测试不同的环境和版本
- 使用自托管Runner:对于大型项目或特殊需求,使用自托管Runner
- 监控Workflow:监控Workflow的执行状态,确保其稳定运行
Part03-生产环境项目实施方案
3.1 GitHub Actions配置
3.1.1 创建GitHub Actions工作流
mkdir -p .github/workflows
# 2. 创建工作流文件
cat > .github/workflows/main.yml << 'EOF'
name: CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Build with Maven
run: mvn clean package
- name: Test
run: mvn test
EOF
# 3. 提交工作流文件
git add .github/workflows/main.yml
git commit -m "Add GitHub Actions workflow"
git push
# 4. 查看工作流执行状态
# 浏览器访问GitHub项目 > Actions
3.1.2 配置自托管Runner
# 项目 > Settings > Actions > Runners > New self-hosted runner
# 选择操作系统和架构
# 复制安装命令
# 2. 在服务器上安装自托管Runner
# 下载Runner
curl -o actions-runner-linux-x64-2.287.1.tar.gz https://github.com/actions/runner/releases/download/v2.287.1/actions-runner-linux-x64-2.287.1.tar.gz
# 解压Runner
tar xzf actions-runner-linux-x64-2.287.1.tar.gz
# 配置Runner
cd actions-runner
./config.sh –url https://github.com/fgedu/example-project –token runner-token
# 安装Runner服务
sudo ./svc.sh install
# 启动Runner服务
sudo ./svc.sh start
# 验证Runner状态
sudo ./svc.sh status
3.2 GitHub Actions Workflow
3.2.1 定义复杂的Workflow
cat > .github/workflows/ci-cd.yml << 'EOF' name: CI/CD on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up JDK 11 uses: actions/setup-java@v2 with: java-version: '11' distribution: 'adopt' - name: Cache Maven packages uses: actions/cache@v2 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 - name: Build with Maven run: mvn clean package - name: Test run: mvn test - name: Upload artifact uses: actions/upload-artifact@v2 with: name: fgedu-app path: target/*.jar deploy: needs: build runs-on: ubuntu-latest if: github.ref == 'refs/heads/master' steps: - uses: actions/checkout@v2 - name: Download artifact uses: actions/download-artifact@v2 with: name: fgedu-app path: target - name: Deploy to production run: | # 部署脚本 echo "Deploying to production..." EOF # 2. 提交工作流文件 git add .github/workflows/ci-cd.yml git commit -m "Add CI/CD workflow" git push # 3. 查看工作流执行状态 # 浏览器访问GitHub项目 > Actions
3.3 GitHub Actions集成
3.3.1 集成Docker
cat > .github/workflows/docker.yml << 'EOF' name: Docker Build and Push on: push: branches: [ master ] tags: [ v* ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Login to DockerHub uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v2 with: context: . push: true tags: fgedu/fgedu-app:latest EOF # 2. 配置DockerHub凭据 # GitHub项目 > Settings > Secrets > New repository secret
# 添加DOCKERHUB_USERNAME和DOCKERHUB_TOKEN
# 3. 提交工作流文件
git add .github/workflows/docker.yml
git commit -m “Add Docker workflow”
git push
# 4. 查看工作流执行状态
# 浏览器访问GitHub项目 > Actions
3.3.2 集成云服务
cat > .github/workflows/aws.yml << 'EOF' name: Deploy to AWS on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: us-east-1 - name: Deploy to EC2 run: | # 部署脚本 echo "Deploying to EC2..." EOF # 2. 配置AWS凭据 # GitHub项目 > Settings > Secrets > New repository secret
# 添加AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY
# 3. 提交工作流文件
git add .github/workflows/aws.yml
git commit -m “Add AWS workflow”
git push
# 4. 查看工作流执行状态
# 浏览器访问GitHub项目 > Actions
Part04-生产案例与实战讲解
4.1 GitHub Actions基础配置
某企业通过配置GitHub Actions,实现了对Java项目的自动化构建和测试。
# 前端:GitHub Web界面
# 后端:GitHub服务器
# 构建节点:GitHub托管Runner
# 2. 实施步骤
# 步骤1:创建工作流文件
# 步骤2:配置工作流
# 步骤3:提交工作流文件
# 步骤4:查看工作流执行状态
# 步骤5:测试与验证
# 3. 应用效果
# 实现了对Java项目的自动化构建
# 实现了对Java项目的自动化测试
# 提高了开发效率
# 提高了代码质量
# 工作流文件
cat > .github/workflows/main.yml << 'EOF'
name: CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Build with Maven
run: mvn clean package
- name: Test
run: mvn test
EOF
4.2 GitHub Actions Workflow配置
某企业通过配置GitHub Actions Workflow,实现了对Java项目的自动化构建、测试和部署。
# 前端:GitHub Web界面
# 后端:GitHub服务器
# 构建节点:GitHub托管Runner
# 部署目标:Docker容器
# 2. 实施步骤
# 步骤1:创建工作流文件
# 步骤2:配置工作流
# 步骤3:配置DockerHub凭据
# 步骤4:提交工作流文件
# 步骤5:查看工作流执行状态
# 步骤6:测试与验证
# 3. 应用效果
# 实现了对Java项目的自动化构建
# 实现了对Java项目的自动化测试
# 实现了对Java项目的自动化部署到Docker容器
# 提高了开发效率
# 提高了代码质量
# 工作流文件
cat > .github/workflows/ci-cd.yml << 'EOF'
name: CI/CD
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Cache Maven packages
uses: actions/cache@v2
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build with Maven
run: mvn clean package
- name: Test
run: mvn test
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: fgedu-app
path: target/*.jar
deploy:
needs: build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v2
- name: Download artifact
uses: actions/download-artifact@v2
with:
name: fgedu-app
path: target
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: fgedu/fgedu-app:latest
EOF
4.3 GitHub Actions与云服务集成
某企业通过集成GitHub Actions与AWS云服务,实现了对Java项目的自动化构建、测试和部署到AWS EC2。
# 前端:GitHub Web界面
# 后端:GitHub服务器
# 构建节点:GitHub托管Runner
# 部署目标:AWS EC2
# 2. 实施步骤
# 步骤1:创建工作流文件
# 步骤2:配置工作流
# 步骤3:配置AWS凭据
# 步骤4:提交工作流文件
# 步骤5:查看工作流执行状态
# 步骤6:测试与验证
# 3. 应用效果
# 实现了对Java项目的自动化构建
# 实现了对Java项目的自动化测试
# 实现了对Java项目的自动化部署到AWS EC2
# 提高了开发效率
# 提高了代码质量
# 工作流文件
cat > .github/workflows/aws.yml << 'EOF'
name: Deploy to AWS
on:
push:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Build with Maven
run: mvn clean package
- name: Test
run: mvn test
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: fgedu-app
path: target/*.jar
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Download artifact
uses: actions/download-artifact@v2
with:
name: fgedu-app
path: target
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Deploy to EC2
run: |
# 部署脚本
echo "Deploying to EC2..."
# 使用SCP上传文件
scp -i ${{ secrets.AWS_SSH_KEY }} target/*.jar ec2-user@${{ secrets.EC2_INSTANCE_IP }}:/home/ec2-user/
# 使用SSH执行命令
ssh -i ${{ secrets.AWS_SSH_KEY }} ec2-user@${{ secrets.EC2_INSTANCE_IP }} "sudo systemctl restart fgedu-app"
EOF
Part05-风哥经验总结与分享
5.1 GitHub Actions使用经验
GitHub Actions使用经验:
- 合理规划Workflow:根据项目的需求定义合理的Workflow
- 使用缓存:缓存依赖,提高构建速度
- 使用Artifact:存储构建产物,方便后续部署
- 使用环境变量:使用环境变量管理敏感信息
- 并行执行:合理配置并行执行,提高构建效率
- 使用矩阵构建:测试不同的环境和版本
- 使用自托管Runner:对于大型项目或特殊需求,使用自托管Runner
- 监控Workflow:监控Workflow的执行状态,确保其稳定运行
5.2 GitHub Actions故障排查
GitHub Actions故障排查:
- 检查Workflow日志:查看Workflow的执行日志,了解故障原因
- 检查Runner状态:对于自托管Runner,检查其运行状态
- 检查环境变量:确保环境变量配置正确
- 检查网络连接:确保Runner与GitHub服务器的网络连接正常
- 检查权限:确保Runner有足够的权限执行任务
5.3 GitHub Actions的未来发展
GitHub Actions的未来发展趋势:
- 云原生:适应云原生环境的需求
- Kubernetes集成:与Kubernetes深度集成,支持更复杂的部署场景
- AI集成:利用AI技术提高CI/CD的智能化水平
- Workflow增强:增强Workflow的功能和灵活性
- 安全性:加强CI/CD的安全性
- 可观测性:提高CI/CD的可观测性
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
