GitHub自动代码评审
实现:使用 GitHub Actions 实现每次提交代码都会进行一次代码评审,并将评审日志存入指定的仓库,同时微信也会实现同步提醒
以下为 GitHub Actions 的代码
name: Build and Run CodeReview By Remote Jar
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
with:
fetch-depth: 2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
distribution: 'adopt'
java-version: '11'
- name: Create libs directory
run: mkdir -p ./libs
- name: Download code-review-sdk JAR
run: wget -O ./libs/code-review-sdk-1.0.jar https://github.com/hinaLove1/Code-Review-Log/releases/download/v1.0/code-review-sdk-1.0.jar
# 这里是执行写好的jar包,里面包括git diff的评审等内容
- name: Get repository name
id: repo-name
run: echo "REPO_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
- name: Get branch name
id: branch-name
run: echo "BRANCH_NAME=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV
- name: Get commit author
id: commit-author
run: echo "COMMIT_AUTHOR=$(git log -1 --pretty=format:'%an <%ae>')" >> $GITHUB_ENV
- name: Get commit message
id: commit-message
run: echo "COMMIT_MESSAGE=$(git log -1 --pretty=format:'%s')" >> $GITHUB_ENV
- name: Print repository, branch name, commit author, and commit message
run: |
echo "Repository name is ${{ env.REPO_NAME }}"
echo "Branch name is ${{ env.BRANCH_NAME }}"
echo "Commit author is ${{ env.COMMIT_AUTHOR }}"
echo "Commit message is ${{ env.COMMIT_MESSAGE }}"
- name: Run Code Review
run: java -jar ./libs/code-review-sdk-1.0.jar
env:
# Github 配置;GITHUB_REVIEW_LOG_URI、GITHUB_TOKEN
GITHUB_REVIEW_LOG_URI: ${{ secrets.CODE_REVIEW_LOG_URI }}
GITHUB_TOKEN: ${{ secrets.CODE_TOKEN }}
COMMIT_PROJECT: ${{ env.REPO_NAME }}
COMMIT_BRANCH: ${{ env.BRANCH_NAME }}
COMMIT_AUTHOR: ${{ env.COMMIT_AUTHOR }}
COMMIT_MESSAGE: ${{ env.COMMIT_MESSAGE }}
# 微信配置 「https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index」
WEIXIN_APPID: ${{ secrets.WEIXIN_APPID }}
WEIXIN_SECRET: ${{ secrets.WEIXIN_SECRET }}
WEIXIN_TOUSER: ${{ secrets.WEIXIN_TOUSER }}
WEIXIN_TEMPLATE_ID: ${{ secrets.WEIXIN_TEMPLATE_ID }}
# Gemini API 配置
API_KEY: ${{ secrets.API_KEY }}
具体使用可见我的log仓库https://github.com/hinaLove1/Code-Review-Log
“骨架”模板
一个最基础的 Actions 脚本由 3 个核心部分组成:触发时机 (on) + 运行环境 (runs-on) + 执行步骤 (steps)。
# 1. 这个工作流叫什么名字(显示在 GitHub 网页上)
name: My First Workflow
# 2. 什么时候触发这个工作流?(这里指:当有人向 main 分支 push 代码时)
on:
push:
branches:
- main
# 3. 具体要做哪些工作?
jobs:
build-job: # 给这个任务起个名字,叫 build-job
runs-on: ubuntu-latest # 分配一台最新的 Ubuntu 虚拟机给你跑代码
steps: # 具体的执行步骤
- name: 检出代码 # 步骤1的名字
uses: actions/checkout@v4 # 核心:把你的代码下载到这台虚拟机里
- name: 打印问候语 # 步骤2的名字
run: echo "Hello, GitHub Actions!" # 执行终端命令
核心语法详解
1. on (触发器:什么时候运行?)
这是最常用、也最灵活的部分。你可以定义多种触发条件:
推送到特定分支:
on:
push:
branches: [ "main", "dev" ] # push 到 main 或 dev 时触发提交 Pull Request 时触发:
on:
pull_request:
branches: [ "main" ]手动触发(调试时强烈推荐!):
on:
workflow_dispatch: # 加上这行,GitHub 网页上会出现一个 "Run workflow" 的按钮,可以随时手动点定时任务(类似 Cron):
on:
schedule:
- cron: '0 2 * * *' # 每天 UTC 时间凌晨 2 点执行
2. jobs (任务块)
一个 workflow 里可以包含一个或多个 job。默认情况下,如果有多个 job,它们是“同时并发”运行的。
jobs:
test-code:
runs-on: ubuntu-latest
steps: [ ... ]
deploy-code:
runs-on: ubuntu-latest
steps: [ ... ]
3. runs-on (运行环境)
GitHub 会免费为你提供一台干净的虚拟机。常用的环境有:
ubuntu-latest (最常用,Linux 环境,启动快)
windows-latest
macos-latest
4. steps (步骤清单)
steps 是一个数组,按顺序依次执行。每个 step 主要有两种写法:uses 和 run。
uses (使用现成的插件/动作):
就像搭积木,你可以直接用别人写好的脚本。
必用的一个插件是 actions/checkout@v4,因为虚拟机刚启动时是空的,你需要用它把你的仓库代码拉取(Clone)到虚拟机里。steps:
- uses: actions/checkout@v4 # 拉取代码
- uses: actions/setup-java@v3 # 安装 Java 环境
with:
java-version: '17'
distribution: 'temurin'run (执行 Shell 命令):
就跟你自己在电脑终端(PowerShell/CMD/Bash)里敲命令一样。steps:
- name: 编译项目
run: mvn clean package # 执行 maven 打包
- name: 运行多行命令
run: | # 加一个竖线 | 表示下面有多行命令
echo "第一行"
ls -la
echo "第二行"
进阶实用语法
当你开始做真实项目时,一定会用到下面这三个特性:
1. 任务依赖 (needs)
前面说过 job 默认是并发执行的。但如果我想“先测试,测试通过了再部署”,怎么办?用 needs。
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: echo "跑单元测试..."
deploy:
needs: test # 声明:必须等 test 这个 job 成功跑完,我才开始跑
runs-on: ubuntu-latest
steps:
- run: echo "正在部署..."
2. 环境变量 (env)
你可以定义变量方便全局使用。
env:
SERVER_IP: "192.168.1.100"
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "服务器IP是 $SERVER_IP"
3. 密码与密钥管理 (secrets) 【极其重要!】
绝对不要在 YAML 文件里明文写服务器密码或 Token!
你应该:
去 GitHub 网页的仓库设置 -> Settings -> Secrets and variables -> Actions。
新建一个 Secret,名字叫 MY_PASSWORD,填入真实密码。
在 YAML 中使用 ${{ secrets.变量名 }} 来读取。
steps:
- name: 登录服务器
run: echo "我的密码是 ${{ secrets.MY_PASSWORD }}" # GitHub 会自动将日志里的密码打码成 ***
四、 IDEA 用户的建议
只需要在项目里新建这个文件:
.github/workflows/ci.yml
填入以下内容并 Push:
name: Java CI Build
on:
push:
branches: [ "main", "master" ]
workflow_dispatch: # 允许手动触发
jobs:
build:
runs-on: ubuntu-latest
steps:
# 1. 把代码拉到虚拟机里
- name: Checkout Code
uses: actions/checkout@v4
# 2. 给虚拟机安装 JDK 17
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: maven # 自动缓存 maven 依赖,下次跑得更快
# 3. 执行 Maven 编译和打包
- name: Build with Maven
run: mvn clean package -DskipTests









