概述
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@v4
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@v4
with:
name: output-log-file
要从同一工作流程运行中下载工件,您的下载作业应指定needs: upload-job-name
,以便它在上传作业完成之前不会启动。
有关工件的更多信息,请参阅“将工作流程数据存储为工件”。
下一步
要继续学习有关 GitHub Actions 的知识,请参阅“关于工作流程”。