注意:GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。 可以在 GitHub public roadmap 上查看有关未来支持计划的更多信息。
概述
GitHub Actions 允许您自定义工作流程,以满足应用程序和团队的独特需求。 在本指南中,我们将讨论一些基本的自定义技术,例如使用变量、运行脚本以及在作业之间共享数据和构件。
在工作流程中使用变量
GitHub Actions 包含每个工作流程运行的默认环境变量。 如果您需要使用自定义环境变量,可以在 YAML 工作流程文件中设置这些变量。 此示例演示如何创建名为 POSTGRES_HOST
和 POSTGRES_PORT
的自定义变量。 然后,这些变量可供 node client.js
脚本使用。
jobs:
example-job:
runs-on: ubuntu-latest
steps:
- name: Connect to PostgreSQL
run: node client.js
env:
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
有关详细信息,请参阅“变量”。
添加脚本到工作流程
可以使用 GitHub Actions 工作流来运行脚本和 shell 命令,然后在指定的运行器上执行。 此示例演示如何使用 run
关键字在运行器上执行 npm install -g bats
命令。
jobs:
example-job:
runs-on: ubuntu-latest
steps:
- run: npm install -g bats
要使用工作流运行存储在存储库中的脚本,必须先将存储库签出到运行器。 完成此操作后,即可使用 run
关键字在运行器上运行脚本。 以下示例运行两个脚本,每个脚本在单独的作业步骤中运行。 脚本在运行器上的位置通过设置运行命令的默认工作目录加以指定。 有关详细信息,请参阅“设置作业的默认值”。
jobs:
example-job:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./scripts
steps:
- name: Check out the repository to the runner
uses: actions/checkout@v4
- name: Run a script
run: ./my-script.sh
- name: Run another script
run: ./my-other-script.sh
希望工作流作业运行的任何脚本,都必须是可执行脚本。 可以在工作流中执行此操作:方法一是将脚本作为参数(例如 run: bash script.sh
),传递给将运行脚本的解释器;方法二是让文件本身变成可执行文件。 可以通过在本地使用 git update-index --chmod=+x PATH/TO/YOUR/script.sh
命令来授予文件执行权限,然后将文件提交并推送到存储库。 另外,对于在 Linux 和 Mac 运行器上运行的工作流,可以在运行脚本之前添加一个命令,从而在工作流作业中授予文件执行权限:
jobs:
example-job:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./scripts
steps:
- name: Check out the repository to the runner
uses: actions/checkout@v4
- name: Make the script files executable
run: chmod +x my-script.sh my-other-script.sh
- name: Run the scripts
run: |
./my-script.sh
./my-other-script.sh
要详细了解 run
密钥,请参阅“GitHub Actions 的工作流语法”。
在作业之间共享数据
如果作业生成你要与同一工作流中的另一个作业共享的文件,或者你要保存这些文件供以后参考,则可以将它们作为工件存储在 GitHub 中。 构件是创建并测试代码时所创建的文件。 例如,构件可能包含二进制或包文件、测试结果、屏幕截图或日志文件。 构件与其创建时所在的工作流程运行相关,可被另一个作业使用。 运行中调用的所有操作和工作流都具有对该运行项目的写入权限。
例如,您可以创建一个文件,然后将其作为构件上传。
jobs:
example-job:
name: Save output
runs-on: ubuntu-latest
steps:
- shell: bash
run: |
expr 1 + 1 > output.log
- name: Upload output file
uses: actions/upload-artifact@v3
with:
name: output-log-file
path: output.log
若要从单独的工作流运行中下载工件,可以使用 actions/download-artifact
操作。 例如,可以下载名为 output-log-file
的工件。
jobs:
example-job:
runs-on: ubuntu-latest
steps:
- name: Download a single artifact
uses: actions/download-artifact@v3
with:
name: output-log-file
若要从同一工作流运行中下载工件,下载作业应指定 needs: upload-job-name
,使其在上传作业完成之前不会开始。
有关项目的详细信息,请参阅“将工作流程数据存储为构件”。
后续步骤
若要继续了解 GitHub Actions,请参阅“关于工作流程”。