英文:
What is the correct way of using secrets in strategy-matrix pattern in GitHub Actions?
问题
我正在使用GitHub Actions来进行一个项目。我有一个使用案例,当需要部署到两个不同的环境时。由于域名的数量可能会增加,我想要以参数化的方式一次性部署到所有这些域名。
以下是我的工作中出现问题的部分:
jobs:
build:
strategy:
matrix:
domain: [['main', 'books-v1'], ['old-main', 'books-v2']]
上述部分工作得很好,但如果我需要从secrets中添加新的变量,工作流程就无法正常工作。请查看下面的片段:
jobs:
build:
strategy:
matrix:
domain: [['main', 'books-v1', ${{ secrets.URL_V1 }}], ['old-main', 'books-v2', ${{ secrets.URL_V2 }}]]
我已经查阅了GitHub Actions文档。我还在GitHub上搜索了现有的示例以查看是否存在类似的解决方案。到目前为止,我还没有找到类似的用例。
是否有办法让它像这样工作?有什么替代方法可以实现我的目标?
GitHub Actions的错误消息:
您的yaml语法在第XYZ行存在错误。
英文:
I am using GitHub Actions for one of the projects. I have a use case when I need to deploy to 2 different environments. As the number of domains may grow, I want to deploy to all of them at once parametrically.
Part of my job that fails:
jobs:
build:
strategy:
matrix:
domain: [['main', 'books-v1'], ['old-main', 'books-v2']]
The above part works perfectly but if I need to add new variants from the secrets, the workflow doesn't work. See the snippet below:
jobs:
build:
strategy:
matrix:
domain: [['main', 'books-v1', ${{ secrets.URL_V1 }}], ['old-main', 'books-v2', ${{ secrets.URL_V2 }}]]
I checked GitHub Actions docs. I also searched available examples on GitHub to see existing solutions. So far, I didn't find a similar use case.
Is there a way to make it work like that? What are alternatives to my approach that will work?
GitHub Actions failure message:
> You have an error in your yaml syntax on line XYZ
答案1
得分: 0
在YAML级别,将${{ secrets... }}
用单引号括起来可以修复语法错误。
但是,根据上下文可用性,secrets
上下文在stratey
下不被允许。允许的上下文包括:
jobs.<job_id>.strategy github, needs, vars, inputs
你可以使用vars
上下文来满足你的需求。
除此之外,使用https://rhysd.github.io/actionlint/ 对你的工作流进行linting会更快地识别潜在问题。
更新(由Dmytro Chasovskyi提供)
以下是使用vars
上下文的示例:
有一个名为DOMAINS
的变量,配置如下:
{
"v1": {
"url": "http://localhost:80/api/v1"
},
"v2": {
"url": "http://localhost:80/api/v2"
}
}
工作流程将如下所示:
jobs:
build:
strategy:
matrix:
domain: [['main', 'books-v1', '${{ vars.DOMAINS.v1.url }}'], ['old-main', 'books-v2', '${{ vars.DOMAINS.v2.url }}']]
英文:
At the YAML level, single quotes around ${{ secrets... }}
should fix the syntax error.
But, according to the Context availability, the secrets
context is not allowed under stratey
. The allowed contexts are:
jobs.<job_id>.strategy github, needs, vars, inputs
You can make use of the vars
context for your use case.
Apart from that, linting your workflow with https://rhysd.github.io/actionlint/ would be much faster to identify potential issues.
UPDATE (by Dmytro Chasovskyi)
Here is an example with the vars
context:
With a variable DOMAINS
having this config:
{
"v1": {
"url": "http://localhost:80/api/v1"
},
"v2": {
"url": "http://localhost:80/api/v2"
}
}
the workflow will be:
jobs:
build:
strategy:
matrix:
domain: [['main', 'books-v1', '${{ vars.DOMAINS.v1.url }}'], ['old-main', 'books-v2', '${{ vars.DOMAINS.v2.url }}']]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论