Github Action 教程
介绍
什么是Github Action
GitHub Actions 是 GitHub 提供的一项持续集成服务,可用于自动化软件开发工作流程。它允许您在代码仓库中配置自定义的工作流程,以响应不同的事件,例如代码提交、拉取请求等。通过 GitHub Actions,您可以自动构建、测试和部署您的代码,从而提高开发效率。
Github Action的优势
- 集成性: GitHub Actions 与 GitHub 代码仓库无缝集成,无需额外设置,即可轻松启用持续集成和持续部署。
- 灵活性: 支持多种编程语言和工具,可以根据项目需求自定义工作流程。
- 可视化: 提供直观的工作流程可视化界面,方便管理和监控整个流程。
- 社区支持: GitHub Actions 社区庞大,可共享和复用其他开发者的工作流程,加速开发过程。
以上是Github Action的介绍和优势。
开始使用
创建workflow文件
要创建一个Github Action的workflow文件,你需要在你的代码仓库中创建一个名为.github/workflows
的文件夹。然后在该文件夹中创建一个YAML文件,用于定义你的workflow。
以下是一个示例workflow文件的基本结构:
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
在这个示例中,workflow文件定义了一个名为CI的workflow,它在代码推送(push)或拉取请求(pull request)时触发。它包含一个名为build的job,该job在ubuntu-latest环境上运行,并包含一系列步骤来检出代码、设置Node.js、安装依赖并运行测试。
定义workflow步骤
在workflow文件中,你可以定义一个或多个job,并在每个job中定义一系列步骤。每个步骤可以是一个内置的action,也可以是你自己定义的脚本命令。
以下是一个示例workflow文件中定义步骤的部分:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
在这个示例中,build job包含了四个步骤,分别是使用actions/checkout
action来检出代码、使用actions/setup-node
action来设置Node.js环境、运行npm install
来安装依赖以及运行npm test
来执行测试。
以上是关于Github Action的基本使用,你可以根据自己的项目需求来定义更复杂的workflow文件,以实现自动化的CI/CD流程。
高级功能
使用action
在Github中,可以使用现有的action来自动化工作流程。通过在workflow文件中引用action,可以轻松地实现各种操作,如构建、测试、部署等。
下面是一个使用action的示例:
name: 使用action示例
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: 运行测试
uses: actions/setup-node@v1
with:
node-version: '12.x'
- run: npm install
- run: npm test
在上面的示例中,我们定义了一个名为“使用action示例”的workflow,当有代码推送时触发。在jobs中,我们使用了actions/checkout和actions/setup-node来进行代码检出和运行测试。
自定义action
除了使用现有的action,还可以根据自己的需求来自定义action。自定义action可以是一个Docker容器、JavaScript函数或者任何可执行文件。
下面是一个自定义action的示例:
name: 自定义action示例
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: 运行自定义action
uses: ./path/to/your-custom-action
在上面的示例中,我们定义了一个名为“自定义action示例”的workflow,当有代码推送时触发。在jobs中,我们使用了自定义的action来执行特定的操作。
以上是关于Github Action高级功能中使用action和自定义action的详细内容。
构建 Java 项目
安装 Java
安装 Java 是在 Github Action 中构建 Java 项目的第一步。您可以使用以下步骤安装 Java:
-
访问Oracle 官方网站下载适用于您操作系统的 JDK 安装程序。
-
打开安装程序并按照提示进行安装。
-
配置环境变量,将 Java 安装路径添加到系统的 PATH 变量中。
-
打开命令行工具,输入以下命令验证 Java 安装是否成功:
java -version
如果安装成功,将显示 Java 的版本信息。
配置 Maven
Maven 是 Java 项目的构建工具,您可以按照以下步骤配置 Maven:
-
访问Maven 官方网站下载最新的 Maven 压缩包。
-
解压下载的 Maven 压缩包到您选择的安装目录。
-
配置环境变量,将 Maven 的 bin 目录添加到系统的 PATH 变量中。
-
打开命令行工具,输入以下命令验证 Maven 安装是否成功:
mvn -version
如果安装成功,将显示 Maven 的版本信息。
通过完成以上步骤,您已成功设置了 Github Action 构建 Java 项目所需的环境。
创建工作流程
编写 YAML 文件
在 Github Action 中,我们可以通过编写 YAML 文件来定义工作流程。YAML 文件包含了工作流程的配置信息,包括触发条件、执行步骤等。
以下是一个简单的 Java 项目构建的 YAML 文件示例:
name: Java Build
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Build with Maven
run: mvn -B package --file pom.xml
在上面的示例中,我们定义了一个名为"Java Build"的工作流程,它会在代码推送(push)或者拉取请求(pull request)到 main 分支时触发。工作流程包含一个名为"build"的 job,在 ubuntu-latest 环境下执行。在执行步骤中,我们首先通过actions/checkout@v2
action 来获取代码,然后使用actions/setup-java@v1
action 来设置 JDK 11 环境,最后使用 Maven 来构建项目。
触发条件
在 YAML 文件中,我们可以定义工作流程的触发条件,包括触发事件和触发条件。常见的触发事件包括 push(推送代码)、pull_request(拉取请求)、schedule(定时触发)等。触发条件可以指定特定的分支、标签等。
在上面的 YAML 文件示例中,我们定义了当代码推送到 main 分支或者有针对 main 分支的拉取请求时触发工作流程。
这样,我们就可以通过编写 YAML 文件来创建 Github Action 的工作流程,并定义触发条件,以实现自动化构建 Java 项目的目的。
设置依赖
在 Github Action 中构建 Java 项目之前,需要设置项目的依赖。可以通过在项目根目录下创建一个.yml
文件来定义工作流程。以下是一个示例的工作流程文件,用于设置 Java 项目的依赖:
name: Java Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Build with Maven
run: mvn -B package --file pom.xml
在这个示例中,我们定义了一个名为Java Build
的工作流程,它会在每次push
事件发生时触发。在build
任务中,我们首先使用actions/checkout@v2
action 来检出代码,然后使用actions/setup-java@v1
action 来设置 JDK 11 环境,最后使用 Maven 来构建项目。
执行构建任务
一旦设置了项目的依赖,就可以执行构建任务来构建 Java 项目。在 Github Action 中,可以使用各种工作流程和 action 来执行构建任务。以下是一个示例的工作流程文件,用于执行 Java 项目的构建任务:
name: Java Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Build with Maven
run: mvn -B package --file pom.xml
在这个示例中,我们定义了一个名为Java Build
的工作流程,它会在每次push
事件发生时触发。在build
任务中,我们首先使用actions/checkout@v2
action 来检出代码,然后使用actions/setup-java@v1
action 来设置 JDK 11 环境,最后使用 Maven 来构建项目。
以上是关于在 Github Action 中构建 Java 项目的设置依赖和执行构建任务的详细内容。
测试与部署
运行单元测试
在使用 Github Action 构建 Java 项目时,可以通过配置工作流来自动运行单元测试。下面是一个示例的工作流配置文件 github/workflows/build.yml
:
name: Java CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Run unit tests
run: mvn test
在上面的示例中,我们定义了一个名为 build
的作业,其中包含了运行单元测试的步骤。当代码推送或者 pull request 时,该工作流会自动触发,执行 Maven 构建并运行单元测试。
部署到服务器
一旦单元测试通过,可以考虑将 Java 项目部署到服务器。这可以通过在工作流中添加部署步骤来实现。以下是一个简单的示例:
name: Java CI/CD
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Deploy to server
run: |
scp target/myapp.jar user@server:/path/to/deployment/
在上面的示例中,我们定义了一个名为 deploy
的作业,其中包含了构建和部署到服务器的步骤。当代码推送到 main
分支时,该工作流会自动触发,执行 Maven 构建并将构建好的 JAR 文件部署到服务器上。
这样,通过配置 Github Action,可以实现自动化地构建 Java 项目并运行单元测试,以及在单元测试通过后将项目部署到服务器。