github 自动化编译、部署、发布实例教程

name: Release AgileBoot

on:
  push:
    tags:
      - 'V*.*.*' #当推送的标签符合 vX.Y.Z 格式时触发
    

jobs:
  build-and-release:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0  # 获取完整的提交历史

      - name: Set up JDK 11
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'

      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '20'

      - name: Install pnpm
        run: npm install -g pnpm

      - name: Build Backend
        working-directory: AgileBoot-Back-End-main
        run: mvn clean package

      - name: Build Frontend
        working-directory: AgileBoot-Front-End-main
        run: pnpm install && pnpm build

      - name: version
        id: version
        run: |
          tag=${GITHUB_REF/refs\/tags\//}
          version=${tag#v}
          major=${version%%.*}
          echo "tag=${tag}" >> $GITHUB_OUTPUT
          echo "version=${version}" >> $GITHUB_OUTPUT
          echo "major=${major}" >> $GITHUB_OUTPUT

      - name: Generate Release Note
        id: generate_release_note
        run: |
          TAG_NAME=$(echo ${{ github.ref_name }} | sed 's/^v//')
          PREVIOUS_TAG=$(git tag --sort=-v:refname | sed -n '2p')
          COMMIT_RANGE="${PREVIOUS_TAG}..${{ github.ref }}"

          echo "Generating release note for tag $TAG_NAME"
          echo "Comparing commits between $COMMIT_RANGE"

          RELEASE_NOTE=$(git log --pretty=format:"- %s (%h)" $COMMIT_RANGE)
          echo "release_note<<EOF" >> $GITHUB_ENV
          echo "$RELEASE_NOTE" >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV

      - name: Create Release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: v${{ github.ref }}
          release_name: V${{ github.ref }}
          body: ${{ env.release_note }}
          draft: false
          prerelease: false

注意触发条件,区别大小写,注意Tag的使用

上述代码是一段GitHub Actions的工作流配置,它用于自动化发布一个项目的版本。以下是代码的解释:

  • 触发条件:当推送的标签符合vX.Y.Z格式时(例如v1.0.0),该工作流将被触发。这是通过on: push: tags: - 'V*.*.*'来实现的。
  • 作业名称build-and-release,它将在ubuntu-latest的环境中运行。
  • 步骤
    1. Checkout code:使用actions/checkout@v3动作来检出代码库,并获取完整的提交历史。
    2. Set up JDK 11:使用actions/setup-java@v3来设置JDK 11的环境。
    3. Set up Node.js:使用actions/setup-node@v3来安装Node.js版本20。
    4. Install pnpm:运行命令安装pnpm包管理器。
    5. Build Backend:在AgileBoot-Back-End-main目录中运行Maven命令来构建后端。
    6. Build Frontend:在AgileBoot-Front-End-main目录中使用pnpm安装依赖并构建前端。
    7. version:解析推送标签以获取版本信息,并将其输出。
    8. Generate Release Note:生成发布说明,包含从上一个标签到当前标签之间的提交日志。
    9. Create Release:使用actions/create-release@v1动作在GitHub上创建一个新的版本发布,使用生成的发布说明作为内容。

该代码的目的是在推送特定格式的标签时,自动构建项目并在GitHub上发布新版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值