GitHub Actions - 在 Golang 代码中设置自定义操作的两个输出名称
GitHub Actions - Set two output names from custom action in Golang code
我在Golang中写了一个自定义动作,它有一个函数可以生成两个输出名称。
创建输出名称供以后在工作流中使用,因此我可以在一个作业(“计算版本”)中调用操作,捕获输出名称,然后在不同的作业(“构建”)中使用它
创建输出名称的动作中的 Go 函数是:
func SetTag(value string){
fmt.Printf(`::set-output name=repo_tag::%s`, value)
fmt.Printf(`::set-output name=ecr_tag::%s`, "v" + value)
}
使用上述输出的工作流程如下:
Version:
name: Calculate Version
runs-on: ubuntu-latest
outputs:
repo_version_env: ${{ steps.version.outputs.repo_tag }}
ecr_version_env: ${{ steps.version.outputs.ecr_tag }}
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Calculate version
id: version
uses: my_custom_action/version@v1
Build:
name: Build Image
runs-on: ubuntu-latest
steps:
- name: Build
run: |
echo ${{ needs.Version.outputs.ecr_version_env }}
echo ${{ needs.Version.outputs.repo_version_env }}
当我 运行 工作流时,echo 命令在动作构建输出中给我以下内容:
1 echo
2 echo v1.4.1::set-output name=ecr_tag::1.4.1
而不是:
1 echo v1.4.1
2 echo 1.4.1
我做错了什么?
如果有更好的方法来使用从操作输出的变量,在工作流中的不同作业之间,我也很乐意听到。
非常感谢。
对于我在这里测试的内容,问题是 go 函数将像这样打印数据:
::set-output name=repo_tag::1.4.1::set-output name=ecr_tag::v1.4.1%
问题似乎与你没有断线有关。
它应该通过将 Go 函数更新为:
来工作
func SetTag(value string){
fmt.Printf(`::set-output name=repo_tag::%s`, value)
fmt.Print("\n")
fmt.Printf(`::set-output name=ecr_tag::%s`, "v" + value)
fmt.Print("\n")
}
请注意,第二个 fmt.Print("\n")
将删除终端上的 %
符号。
如果你想查看我做的测试:
输出结果如你所愿:
我在Golang中写了一个自定义动作,它有一个函数可以生成两个输出名称。
创建输出名称供以后在工作流中使用,因此我可以在一个作业(“计算版本”)中调用操作,捕获输出名称,然后在不同的作业(“构建”)中使用它
创建输出名称的动作中的 Go 函数是:
func SetTag(value string){
fmt.Printf(`::set-output name=repo_tag::%s`, value)
fmt.Printf(`::set-output name=ecr_tag::%s`, "v" + value)
}
使用上述输出的工作流程如下:
Version:
name: Calculate Version
runs-on: ubuntu-latest
outputs:
repo_version_env: ${{ steps.version.outputs.repo_tag }}
ecr_version_env: ${{ steps.version.outputs.ecr_tag }}
steps:
- name: Check out code
uses: actions/checkout@v2
- name: Calculate version
id: version
uses: my_custom_action/version@v1
Build:
name: Build Image
runs-on: ubuntu-latest
steps:
- name: Build
run: |
echo ${{ needs.Version.outputs.ecr_version_env }}
echo ${{ needs.Version.outputs.repo_version_env }}
当我 运行 工作流时,echo 命令在动作构建输出中给我以下内容:
1 echo
2 echo v1.4.1::set-output name=ecr_tag::1.4.1
而不是:
1 echo v1.4.1
2 echo 1.4.1
我做错了什么?
如果有更好的方法来使用从操作输出的变量,在工作流中的不同作业之间,我也很乐意听到。
非常感谢。
对于我在这里测试的内容,问题是 go 函数将像这样打印数据:
::set-output name=repo_tag::1.4.1::set-output name=ecr_tag::v1.4.1%
问题似乎与你没有断线有关。
它应该通过将 Go 函数更新为:
来工作func SetTag(value string){
fmt.Printf(`::set-output name=repo_tag::%s`, value)
fmt.Print("\n")
fmt.Printf(`::set-output name=ecr_tag::%s`, "v" + value)
fmt.Print("\n")
}
请注意,第二个 fmt.Print("\n")
将删除终端上的 %
符号。
如果你想查看我做的测试:
输出结果如你所愿: