继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Github Actions开发入门教程

RISEBY
关注TA
已关注
手记 476
粉丝 70
获赞 317
概述

本文详细介绍了如何进行Github Actions开发,从环境搭建到工作流程的定义,再到实际案例的应用,帮助开发者提升开发效率和代码质量。文中涵盖了自动化构建、测试、部署等环节,并提供了丰富的示例配置文件供读者参考和实践。通过学习Github Actions开发,你可以更好地理解和利用这一强大的自动化工具。

Github Actions 开发入门教程
Github Actions 简介

Github Actions 是什么

GitHub Actions 是 GitHub 提供的一项自动化服务,允许用户在仓库中定义和编写自动化脚本,以执行各种任务。这些任务包括但不限于代码的构建、测试、部署等,贯穿软件开发的全生命周期。

Github Actions 的作用和优势

使用 GitHub Actions 可以极大提升开发效率,自动化原本需要手动执行的任务,减少人为错误,提高代码质量。它支持多种触发器,包括推送代码、合并请求、定时触发等,可以灵活地适应不同的开发流程。

  • 自动化构建和测试:触发构建和测试流程,确保每次代码提交都经过严格的测试。
  • 持续集成/持续交付 (CI/CD):确保代码变更顺利集成到主分支,并自动部署到测试或生产环境。
  • 环境管理:通过容器化环境来保持一致的开发和生产环境。
Github Actions 开发环境搭建

注册 Github 账号

首先,你需要在 GitHub 上注册一个账号,如果你已经有一个账号,可以跳过此步骤。

创建新的仓库用于开发

在 GitHub 上,点击右上角的“+”号,选择“New repository”。填写仓库的名称、描述等信息,选择是否公开或私有,是否初始化仓库,最后点击“Create repository”。

准备开发环境

确保你的本地开发环境已安装了必要的工具和库。例如,对于一个Python项目,你需要确保已经安装了Python和pip。

python --version
pip --version

如果未安装,可以参考官方文档进行安装。

Github Actions 工作流程详解

事件触发

GitHub Actions 的触发机制主要是通过事件触发。事件可以是代码推送、创建或合并拉取请求、发布标签等,也可以是在特定时间点触发脚本执行。事件的触发机制为自动化工作流提供了灵活性和可扩展性。

工作流文件的编写 (.yml 文件)

工作流定义由.yml文件指定,这些文件通常命名为*.yml*.yaml。示例工作流文件如下:

name: Build and Test

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.8'
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run tests
      run: |
        python -m pytest

此文件定义了一个名为Build and Test的工作流,该工作流将在每次推送和拉取请求时运行。它在最新的Ubuntu机器上执行以下步骤:检出代码,设置Python环境,安装依赖项,运行测试。

Github Actions 常用操作案例

自动化构建和测试

为了自动化构建和测试流程,你可以在.yml 文件中定义构建和测试任务。例如,对于一个Python项目,可以使用GitHub Actions来自动化Python项目的构建和测试。

以下是一个简单的.yml 文件示例,用于自动化构建和测试Python项目:

name: Python package

on: [push, pull_request]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.7", "3.8", "3.9"]

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install tox-travis
    - name: Test with tox
      run: |
        tox

此配置文件定义了一个在推送和拉取请求时运行的工作流。它使用了矩阵策略来支持不同的Python版本。在每个构建步骤中,它会检出代码,设置Python环境,安装依赖项,然后运行测试。

部署应用到服务器

在GitHub Actions中,可以使用各种服务和工具来部署应用程序。例如,可以使用scp命令将应用程序部署到远程服务器。

以下是一个示例配置文件,用于将应用程序部署到远程Linux服务器:

name: Deploy to Production

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Deploy to Production
      env:
        SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
        SERVER_USER: ${{ secrets.SERVER_USER }}
        SERVER_IP: ${{ secrets.SERVER_IP }}
      run: |
        echo "$SSH_PRIVATE_KEY" > id_rsa
        chmod 600 id_rsa
        ssh-keyscan -t rsa $SERVER_IP >> ~/.ssh/known_hosts
        sshpass -p $SERVER_PASSWORD ssh -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "mkdir -p /var/www/html/my-app"
        scp -o StrictHostKeyChecking=no -i id_rsa -r . $SERVER_USER@$SERVER_IP:/var/www/html/my-app
        sshpass -p $SERVER_PASSWORD ssh $SERVER_USER@$SERVER_IP "cd /var/www/html/my-app && sudo python3 setup.py install"

此配置文件定义了一个将应用程序部署到生产环境的工作流。它在推送代码到主分支时触发。在部署步骤中,它会检出代码,然后使用SSH密钥和密码将代码复制到远程服务器,并在服务器上运行安装命令。

定时触发的脚本任务

你还可以设置定时触发的脚本任务。例如,你可以每天凌晨执行清理日志文件的任务。以下是一个示例配置文件,用于执行定时清理任务:

name: Daily Log Cleanup

on:
  schedule:
    - cron: '0 0 * * *'  # 每天0点执行

jobs:
  cleanup:
    runs-on: ubuntu-latest

    steps:
    - name: Log Cleanup
      run: |
        find /var/log -name "*.log" -type f -mtime +7 -delete

此配置文件定义了一个定时执行的工作流。它使用Cron表达式来设置执行时间。在清理步骤中,它会查找并删除超过7天的日志文件。

Github Actions 的调试与常见问题解决

查看工作流执行日志

GitHub Actions允许你查看每个工作流的具体日志输出,以便更好地了解每个步骤的执行情况。你可以直接在GitHub仓库的Actions部分找到日志。每个任务都记录了详细的执行日志,包括每个步骤的输出,这些信息可以帮助诊断问题。

常见错误及解决办法

权限问题

某些步骤需要权限才能执行,例如部署到服务器。确保你有足够的权限访问所需的资源。如果没有权限,你可能需要调整脚本中的用户和密码信息,或者使用GitHub Secrets来安全地存储和访问敏感信息。

依赖安装失败

如果依赖安装失败,检查依赖版本是否正确,或者是否有依赖关系冲突。你可以在GitHub Actions中使用pip list或类似的命令查看已安装的依赖版本。例如:

- name: Install dependencies
  run: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt

环境不匹配

如果在GitHub Actions中使用了特定的环境(如特定版本的Python),确保你的本地开发环境和GitHub Actions的环境是匹配的。不匹配的环境可能会导致构建或测试失败。例如:

- name: Set up Python
  uses: actions/setup-python@v2
  with:
    python-version: '3.8'

脚本错误

如果脚本执行失败,检查脚本中的逻辑错误或语法错误。你可以在GitHub Actions的日志中查看详细的错误信息,这些信息通常会指出错误发生的位置和原因。

依赖路径问题

确保所有依赖路径都正确无误。路径错误可能会导致依赖文件无法被找到或加载。例如:

- name: Install dependencies
  run: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt

示例:解决依赖安装失败的问题

如果在GitHub Actions中遇到依赖安装失败的问题,可以按照以下步骤进行排查:

  1. 检查依赖版本

    - name: Install dependencies
     run: |
       python -m pip install --upgrade pip
       pip install -r requirements.txt
  2. 升级依赖

    - name: Upgrade dependencies
     run: |
       pip install --upgrade setuptools wheel
  3. 检查依赖安装日志

    - name: Check dependencies installation
     run: |
       pip list
  4. 使用缓存
    - name: Cache dependencies
     uses: actions/cache@v2
     with:
       path: ~/.pip
       key: ${{ runner.os }}-pip-${{ requirements.txt }}
       restore-keys: |
         ${{ runner.os }}-pip-
Github Actions 开发进阶

使用服务账号和密钥

为了安全访问敏感信息,可以使用GitHub Secrets来存储和访问机密数据。例如,在部署到远程服务器时,可以将SSH密钥和服务器密码作为GitHub Secrets存储。

  1. 设置GitHub Secrets

    • 在仓库设置中,找到“Secrets”部分,点击“Add a new secret”。
    • 输入密钥名(例如SSH_PRIVATE_KEY),然后粘贴相应的密钥值。例如:
      SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
    • 重复此操作以添加其他密钥。
      SERVER_USER: ${{ secrets.SERVER_USER }}
      SERVER_IP: ${{ secrets.SERVER_IP }}
      SERVER_PASSWORD: ${{ secrets.SERVER_PASSWORD }}
  2. 在工作流中使用GitHub Secrets
    env:
      SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
      SERVER_USER: ${{ secrets.SERVER_USER }}
      SERVER_IP: ${{ secrets.SERVER_IP }}
      SERVER_PASSWORD: ${{ secrets.SERVER_PASSWORD }}

复用和扩展工作流

GitHub Actions支持复用和扩展工作流,使得工作流定义更加灵活和可维护。例如,你可以定义一个通用的基础工作流,然后在其他工作流中复用它。

  1. 创建基础工作流

    name: Base Workflow
    
    on: [push, pull_request]
    
    jobs:
      base:
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v2
  2. 在其他工作流中复用基础工作流

    name: Custom Workflow
    
    on: [push, pull_request]
    
    jobs:
      custom:
        runs-on: ubuntu-latest
    
        steps:
        - uses: ./.github/workflows/base
        - name: Custom Step
          run: |
            echo "Custom step executed"

通过这种方式,你可以定义一个通用的基础工作流,然后在其他工作流中复用它。这有助于保持工作流定义的一致性和可维护性。

总结,GitHub Actions是一款强大的工具,可以帮助开发者自动化软件开发的各个环节,提升开发效率和代码质量。通过本文的介绍,你可以开始使用GitHub Actions来自动化构建、测试和部署流程。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP