WEBKT

团队协作提效:GitHub Actions 实现自动化代码审查,告别低效 Review

34 0 0 0

作为一名老码农,我深知代码审查(Code Review)是保证项目质量的关键环节。但传统的代码审查方式,耗时费力,效率低下,经常让团队成员苦不堪言。特别是当团队规模扩大,代码量激增时,这种问题会更加突出。如何让代码审查更高效、更智能?我的答案是:GitHub Actions!

今天,我就以一个团队协作的场景为例,手把手教你如何使用 GitHub Actions 搭建一套自动化代码审查流程,包括代码风格检查、单元测试和安全漏洞扫描,让你的团队告别低效 Review,提升协作效率。

一、场景设定:模拟团队协作开发

假设我们有一个名为 awesome-project 的 GitHub 仓库,团队成员 John 和 Jane 负责协同开发。John 提交了一个新的 Pull Request,我们需要确保他的代码符合规范,并通过所有测试,才能将其合并到主分支。

二、GitHub Actions 工作流设计

我们的目标是创建一个 GitHub Actions 工作流,实现以下功能:

  1. 代码风格检查:使用 ESLint 检查 JavaScript 代码风格。
  2. 单元测试:运行 Jest 单元测试。
  3. 安全漏洞扫描:使用 Snyk 扫描依赖项中的安全漏洞。
  4. 自动通知:根据审查结果自动发送通知。

三、配置 GitHub Actions 工作流

  1. 创建工作流文件:在你的 GitHub 仓库中,创建一个名为 .github/workflows/code-review.yml 的文件。这个文件将定义我们的工作流。

  2. 编写工作流 YAML 文件:将以下代码复制到 code-review.yml 文件中:

name: Code Review
on:
pull_request:
branches: [ main ]
jobs:
code-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- name: Install dependencies
run: npm install
- name: Run ESLint
run: npm run lint
- name: Run Jest tests
run: npm run test
- name: Run Snyk security scan
uses: snyk/actions/node@master
env:
SNYK_TOKEN: $\{\{ secrets.SNYK_TOKEN \}\}
with:
command: test
args: --severity-threshold=high
- name: Send Slack notification
if: always()
uses: slackapi/slack-github-action@v1.18.0
with:
slack-message-payload: |
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": ":: *Code Review Result* ::\nRepository: $\{\{ github.repository \}\} \nCommit: $\{\{ github.sha \}\} \nWorkflow: $\{\{ github.workflow \}\} \nEvent Name: $\{\{ github.event_name \}\} \nActor: $\{\{ github.actor \}\} \nJob Status: $\{\{ job.status \}\} \nMore info: $\{\{ github.server_url \}\} $\{\{ github.repository \}\} /actions/runs/$\{\{ github.run_id \}\}"
}
}
]
}
env:
SLACK_BOT_TOKEN: $\{\{ secrets.SLACK_BOT_TOKEN \}\}
  1. 解读 YAML 文件
  • name:工作流的名称,这里我们命名为 “Code Review”。
  • on:触发工作流的事件。这里我们指定为 pull_request,并且只针对 main 分支。
  • jobs:定义工作流中的任务。我们只有一个任务,名为 code-review
  • runs-on:指定运行任务的操作系统,这里我们使用 ubuntu-latest
  • steps:定义任务中的步骤。每个步骤都执行一个特定的操作。
    • actions/checkout@v3:检出代码。
    • actions/setup-node@v3:设置 Node.js 环境。
    • npm install:安装项目依赖。
    • npm run lint:运行 ESLint 代码风格检查。
    • npm run test:运行 Jest 单元测试。
    • snyk/actions/node@master:运行 Snyk 安全漏洞扫描。
    • slackapi/slack-github-action@v1.18.0: 发送 Slack 通知
  • env:定义环境变量。
    • SNYK_TOKEN:Snyk API Token,用于进行安全漏洞扫描。你需要将你的 Snyk Token 存储在 GitHub Secrets 中。
    • SLACK_BOT_TOKEN:Slack Bot Token,用于发送 Slack 通知。你需要将你的 Slack Bot Token 存储在 GitHub Secrets 中。
  • secrets:引用 GitHub Secrets 中存储的敏感信息。
  1. 配置 GitHub Secrets

    • SNYK_TOKEN:在 Snyk 官网注册账号并获取 API Token,然后在你的 GitHub 仓库的 Settings -> Secrets -> Actions 中,创建一个名为 SNYK_TOKEN 的 Secret,并将你的 Snyk API Token 填入。
    • SLACK_BOT_TOKEN:创建一个 Slack App,并添加 chat:write 权限。然后生成一个 Bot User OAuth Token,并在你的 GitHub 仓库的 Settings -> Secrets -> Actions 中,创建一个名为 SLACK_BOT_TOKEN 的 Secret,并将你的 Slack Bot Token 填入。
  2. 配置 ESLint 和 Jest

    • ESLint:如果你的项目还没有配置 ESLint,可以使用以下命令进行初始化:

      npm install eslint --save-dev
      npx eslint --init

      然后,在你的 package.json 文件中,添加一个名为 lint 的 script:

      "scripts": {
      "lint": "eslint ."
      }
    • Jest:如果你的项目还没有配置 Jest,可以使用以下命令进行安装:

      npm install jest --save-dev
      

      然后,在你的 package.json 文件中,添加一个名为 test 的 script:

      "scripts": {
      "test": "jest"
      }

四、测试工作流

  1. 创建 Pull Request:John 创建一个新的 Pull Request,提交一些包含代码风格问题和潜在安全漏洞的代码。

  2. 观察工作流运行:GitHub Actions 会自动触发我们刚刚配置的工作流。你可以在 Pull Request 的 “Checks” 选项卡中,查看工作流的运行状态。

  3. 查看审查结果

    • 代码风格检查:如果 ESLint 发现代码风格问题,工作流会失败,并显示错误信息。John 需要根据错误信息修改代码。
    • 单元测试:如果单元测试失败,工作流也会失败,并显示错误信息。John 需要修复代码中的 bug。
    • 安全漏洞扫描:如果 Snyk 发现依赖项中的安全漏洞,工作流会发出警告,并提供修复建议。John 需要更新依赖项或采取其他安全措施。
    • Slack 通知:无论工作流成功或失败,都会发送 Slack 通知,告知团队成员审查结果。

五、优化工作流

  1. 缓存依赖项:为了加快工作流的运行速度,可以使用 actions/cache@v3 缓存 Node.js 依赖项。

    - name: Cache dependencies
    uses: actions/cache@v3
    with:
    path: ~/.npm
    key: $\{\{ runner.os \}\

-\{ hashFiles('/package-lock.json') }}
restore-keys:
${{ runner.os }
-\{ hashFiles('
/package-lock.json') }}
```

  1. 并行运行任务:如果你的工作流包含多个耗时的任务,可以考虑并行运行这些任务,以缩短整体运行时间。

    jobs:
    lint:
    runs-on: ubuntu-latest
    steps:
    ...
    test:
    runs-on: ubuntu-latest
    needs: lint
    steps:
    ...
    security:
    runs-on: ubuntu-latest
    needs: [lint, test]
    steps:
    ...
  2. 自定义通知内容:你可以根据自己的需求,自定义 Slack 通知的消息内容,使其包含更多有用的信息。

    - name: Send Slack notification
    if: always()
    uses: slackapi/slack-github-action@v1.18.0
    with:
    slack-message-payload: |
    {
    "blocks": [
    {
    "type": "section",
    "text": {
    "type": "mrkdwn",
    "text": ":: *Code Review Result* ::\nRepository: $\{\{ github.repository \}\} \nCommit: $\{\{ github.sha \}\} \nWorkflow: $\{\{ github.workflow \}\} \nEvent Name: $\{\{ github.event_name \}\} \nActor: $\{\{ github.actor \}\} \nJob Status: $\{\{ job.status \}\} \nMore info: $\{\{ github.server_url \}\} $\{\{ github.repository \}\} /actions/runs/$\{\{ github.run_id \}\} \nErrors: $\{\{ steps.eslint.outputs.errors \}\} \nWarnings: $\{\{ steps.eslint.outputs.warnings \}\}"
    }
    }
    ]
    }
    env:
    SLACK_BOT_TOKEN: $\{\{ secrets.SLACK_BOT_TOKEN \}\}

六、总结

通过 GitHub Actions,我们可以轻松地搭建一套自动化代码审查流程,提高团队协作效率,保证项目质量。希望这篇文章能够帮助你更好地理解和使用 GitHub Actions,让你的团队开发更加高效、智能!

一些额外的思考

  • 代码审查规则的制定:自动化代码审查只是辅助手段,更重要的是团队需要制定明确的代码审查规则,并严格执行。
  • 持续集成/持续部署 (CI/CD):GitHub Actions 不仅可以用于代码审查,还可以用于构建、测试和部署应用程序,实现完整的 CI/CD 流程。
  • 与其他工具的集成:GitHub Actions 可以与各种第三方工具集成,例如 SonarQube、Coveralls 等,进一步提升代码质量。

希望这些思考能帮助你更深入地理解 GitHub Actions 的价值,并将其应用到你的实际项目中。记住,技术只是工具,关键在于如何使用它来解决实际问题,提升团队效率,创造更大的价值!

最后,分享一些我常用的 GitHub Actions 相关的资源:

希望这些资源能帮助你更好地学习和使用 GitHub Actions!

老码农的自留地 GitHub Actions代码审查自动化

评论点评

打赏赞助
sponsor

感谢您的支持让我们更好的前行

分享

QRcode

https://www.webkt.com/article/9476