文章

如何使用 GitHub Actions 构建 DataX 包并发布到 GitHub Release?

如何使用 GitHub Actions 构建 DataX 包并发布到 GitHub Release?

起因是同事需要使用 DataX,但官方并未提供直接可用的预编译包,网上搜索一圈没有找到,所以我决定基于源码自行编译 DataX,并利用 GitHub Actions 实现自动化构建和发布。

本地编译环境准备

如果你需要本地编译,请确保您的编译环境满足以下要求:

  • Java 版本:使用 Java 8。
  • Maven 版本:使用 Maven 3.5。

注意:Maven 3.6 及以上版本会导致编译失败。

步骤一:Fork 官方仓库并下载源码

首先,前往 DataX 的官方 GitHub 仓库 https://github.com/alibaba/DataX.git,点击 “Fork” 将项目复制到您的账户下。然后,将 Fork 后的仓库克隆到本地:

1
2
git clone https://github.com/your-username/DataX.git
cd DataX

步骤二:添加 Maven Wrapper 支持

为了确保在任何环境下都能使用指定版本的 Maven,我们为项目添加 Maven Wrapper。执行以下命令:

1
mvn -Dmaven=3.5.4

这将在项目中生成 .mvn 目录和 mvnw 脚本,确保使用 Maven 3.5.4 进行构建。

步骤三:配置 GitHub Actions 实现自动化构建和发布

在项目根目录下,创建 .github/workflows 目录,并在其中添加 release.yml 文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
name: Build and Release DataX

on:
  push:
    branches:
      - master
  create:
    tags:
      - 'v*'

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 设置 JDK
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '8'

      - name: 构建 DataX
        run: |
          ./mvnw -U clean package assembly:assembly -Dmaven.test.skip=true

      - name: 创建发布 Artifact
        run: |
          tar -cvf datax.tar target/datax
          xz -9e datax.tar

      - name: 上传构建产物
        uses: actions/upload-artifact@v3
        with:
          name: datax-package
          path: datax.tar.xz

  release:
    needs: build
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/')
    steps:
      - name: 下载构建的 Artifact
        uses: actions/download-artifact@v3
        with:
          name: datax-package

      - name: 创建 GitHub Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.ref_name }}
          release_name: "Release ${{ github.ref_name }}"
          body: |
            此版本包含最新构建的 DataX 包。
          draft: false
          prerelease: false

      - name: 上传 Release 资产到 GitHub
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: datax.tar.xz
          asset_name: datax.tar.xz
          tag: ${{ github.ref_name }}

注意:选择 tar.xz 格式是因为 GitHub 对每个 Release 中的单个文件大小限制为 2 GiB,而 tar.gz 压缩后的文件约为 2.2G,超过限制。使用 tar.xz 压缩后,文件大小约为 1.64G,符合要求。

步骤四:创建标签并推送

在本地创建一个新的标签,并推送到远程仓库:

1
2
git tag v1.0.0
git push origin v1.0.0

推送标签后,GitHub Actions 将自动触发构建和发布流程。

等待构建完成并下载

大约半小时后,构建过程应已完成。前往 Fork 后的仓库的 Releases 页面,下载最新的构建包,如下图所示:

GitHub Releases

如果不想自行构建,可以直接下载我已构建好的包:https://github.com/harrisonwang/DataX/releases/download/v1.0.0/datax.tar.xz

本地编译(可选)

如果要本地进行编译,可以跳过配置 GitHub Actions 的步骤三,直接在本地执行:

1
./mvnw clean package -DskipTests

构建好的包位于本地 target/datax 目录。

通过上述步骤,你就实现了 DataX 的自动化构建和发布。

本文由作者按照 CC BY 4.0 进行授权