简介
在本指南中,您将了解创建和使用打包的组合操作所需的基本组件。 本指南的重点是打包操作所需的组件,因此很少讲操作代码的功能。 该操作将依次打印 "Hello World" 和 "Goodbye",如果您提供自定义名称,则将依次打印 "Hello [who-to-greet]" 和 "Goodbye"。 该操作还会将随机数映射到 random-number
输出变量,并运行名为 goodbye.sh
的脚本。
完成此项目后,您应了解如何构建自己的组合操作和在工作流程测试该操作。
警告:创建工作流程和操作时,应始终考虑代码是否会执行来自可能的攻击者的不信任输入。 某些上下文应被视为不受信任的输入,因为攻击者可能会插入自己的恶意内容。 有关详细信息,请参阅“GitHub Actions 的安全强化”。
先决条件
在开始之前,你将在 GitHub.com 上创建一个存储库。
-
在 GitHub.com 上创建一个公共存储库。 可以选择任何存储库名称,或使用以下
hello-world-composite-action
示例。 您可以在项目推送到 GitHub 之后添加这些文件。 有关详细信息,请参阅“创建新仓库”。 -
将仓库克隆到计算机。 有关详细信息,请参阅“克隆仓库”。
-
从您的终端,将目录更改为新仓库。
Shell cd hello-world-composite-action
cd hello-world-composite-action
-
在
hello-world-composite-action
存储库中,新建一个名为goodbye.sh
的文件,并添加以下示例代码:Bash echo "Goodbye"
echo "Goodbye"
-
在终端中,生成
goodbye.sh
可执行文件。Shell chmod +x goodbye.sh
chmod +x goodbye.sh
-
从终端签入
goodbye.sh
文件。Shell git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
创建操作元数据文件
-
在
hello-world-composite-action
存储库中,新建一个名为action.yml
的文件,并添加以下示例代码。 有关此语法的详细信息,请参阅“GitHub Actions 的元数据语法”。
action.yml
```yaml copy
name: 'Hello World'
description: 'Greet someone'
inputs:
who-to-greet: # id of input
description: 'Who to greet'
required: true
default: 'World'
outputs:
random-number:
description: "Random number"
value: ${{ steps.random-number-generator.outputs.random-number }}
runs:
using: "composite"
steps:
- run: echo Hello ${{ inputs.who-to-greet }}.
shell: bash
- id: random-number-generator
run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
shell: bash
- run: echo "${{ github.action_path }}" >> $GITHUB_PATH
shell: bash
- run: goodbye.sh
shell: bash
```
此文件定义 who-to-greet
输入,将随机生成的数字映射到 random-number
输出变量,将操作路径添加到运行器系统路径(以在执行期间查找 goodbye.sh
脚本),并运行 goodbye.sh
脚本。
有关管理输出的详细信息,请参阅“[AUTOTITLE](/actions/creating-actions/metadata-syntax-for-github-actions#outputs-for-composite-actions)”。
有关如何使用 `github.action_path` 的详细信息,请参阅“[AUTOTITLE](/actions/learn-github-actions/contexts#github-context)”。
-
从终端签入
action.yml
文件。Shell git add action.yml git commit -m "Add action" git push
git add action.yml git commit -m "Add action" git push
-
从终端添加标记。 本示例使用名为
v1
的标记。 有关详细信息,请参阅“关于自定义操作”。Shell git tag -a -m "Description of this release" v1 git push --follow-tags
git tag -a -m "Description of this release" v1 git push --follow-tags
在工作流程中测试您的操作
以下工作流代码使用你在“创建组合操作”中完成的 hello world 操作。
将工作流代码复制到另一个存储库中的 .github/workflows/main.yml
文件中,但将 actions/hello-world-composite-action@v1
替换为你创建的存储库和标记。 还可以将 who-to-greet
输入替换为你的名称。
.github/workflows/main.yml
on: [push] jobs: hello_world_job: runs-on: ubuntu-latest name: A job to say hello steps: - uses: actions/checkout@v4 - id: foo uses: actions/hello-world-composite-action@v1 with: who-to-greet: 'Mona the Octocat' - run: echo random-number ${{ steps.foo.outputs.random-number }} shell: bash
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- uses: actions/checkout@v4
- id: foo
uses: actions/hello-world-composite-action@v1
with:
who-to-greet: 'Mona the Octocat'
- run: echo random-number ${{ steps.foo.outputs.random-number }}
shell: bash
从存储库中,单击“操作”选项卡,然后选择最新的工作流运行。 输出应包括:"Hello Mona the Octocat"、"Goodbye" 脚本的结果以及随机数字。
GitHub.com
上的示例组合操作
可以在 GitHub.com 上找到许多组合操作示例。