Github Actions
本文最后更新于9 天前,其中的信息可能已经过时,如有错误请发送邮件到2125094989@qq.com

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!
你应该:

  1. 去 GitHub 网页的仓库设置 -> Settings -> Secrets and variables -> Actions


  2. 新建一个 Secret,名字叫 MY_PASSWORD,填入真实密码。


  3. 在 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
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇