1. 首页 > Linux教程 > 正文

Linux教程FG626-工具链扩展系列-CI/CD工具-GitHub Actions

本文档风哥主要介绍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

GitHub Actions的核心概念:

  • 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,提高构建效率
  • 免费使用:提供一定的免费使用额度
风哥提示:GitHub Actions是一个功能强大的CI/CD工具,与GitHub代码仓库紧密集成,建议根据项目的需求和规模选择合适的工作流配置。

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的执行状态,确保其稳定运行
生产环境建议:GitHub Actions的配置需要考虑项目的规模和复杂度,建议选择合适的Runner类型,并根据实际情况进行配置和优化。学习交流加群风哥QQ113257174

Part03-生产环境项目实施方案

3.1 GitHub Actions配置

3.1.1 创建GitHub Actions工作流

# 1. 创建工作流文件目录
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

# 1. 在GitHub项目中添加自托管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

# 1. 创建复杂的工作流文件
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

# 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 集成云服务

# 1. 创建云服务工作流文件
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

风哥提示:GitHub Actions的集成需要考虑系统的复杂度和需求,建议根据实际情况选择合适的集成方案,并确保GitHub Actions的稳定性和可靠性。更多学习教程公众号风哥教程itpux_com

Part04-生产案例与实战讲解

4.1 GitHub Actions基础配置

某企业通过配置GitHub Actions,实现了对Java项目的自动化构建和测试。

# 1. 部署架构
# 前端: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项目的自动化构建、测试和部署。

# 1. 部署架构
# 前端: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。

# 1. 部署架构
# 前端: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

生产环境建议:GitHub Actions的配置需要考虑项目的规模和复杂度,建议根据实际情况选择合适的配置方案,并确保GitHub Actions的稳定性和可靠性。from Linux:www.itpux.com

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的可观测性
风哥提示:GitHub Actions是一个功能强大的CI/CD工具,与GitHub代码仓库紧密集成,建议关注GitHub Actions的最新发展趋势,及时更新和优化GitHub Actions配置,提高开发效率和代码质量。

持续改进:GitHub Actions的使用是一个持续优化的过程,需要根据项目的变化和需求的变化不断调整和改进。建议建立GitHub Actions评估机制,定期评估GitHub Actions的使用效果,确保GitHub Actions能够满足项目的需求。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息