我有一个使用 Terraform 进行部署的 GitHub Actions 工作流程。
当 Terraform 完成后,我想获取 Terraform 输出并将其发送到工作流程中的下一个作业,以便可以提取和使用各个部分。具体来说,我的 Terraform 部署一个 Azure Function,然后输出函数应用名称。然后,它被用来告诉下一个作业在哪里部署函数代码。
但是,当我像这样重定向输出时terraform output:
- name: save tf output
run: terraform output -json > tfoutput.json
shell: bash
working-directory: terraform
Run Code Online (Sandbox Code Playgroud)
然后将其放入工作工件中
- name: Upload output file
uses: actions/upload-artifact@v2
with:
name: terraform-output
path: terraform/tfoutput.json
Run Code Online (Sandbox Code Playgroud)
内容结果文件如下所示:
[command]/home/runner/work/_temp/fb419afc-033e-4058-b5f3-c44b90cb0bd0/terraform-bin output -json
{
"functionappname": {
"sensitive": false,
"type": "string",
"value": "telemetry-function"
}
}
::debug::Terraform exited with code 0.
::debug::stdout: {%0A "functionappname": {%0A "sensitive": false,%0A "type": "string",%0A "value": "telemetry-function"%0A }%0A}%0A
::debug::stderr:
::debug::exitcode: …Run Code Online (Sandbox Code Playgroud) 看到这个问题后,我不确定为什么DocDb实例的以下代码不起作用:
var userApps = _docs.CreateDocumentQuery(UriFactory.CreateDocumentCollectionUri(Constants.Databases.Applications.ID, Constants.Databases.Applications.Collections.USER_APPS),
new SqlQuerySpec(@"SELECT r.appId FROM ROOT r WHERE r.userId = @userId", (@"@userId", userId).ToSqlParameters()))
.ToList()
.Select(s => (string)s.appId);
var query = _docs.CreateDocumentQuery<Document>(UriFactory.CreateDocumentCollectionUri(Constants.Databases.Applications.ID, Constants.Databases.Applications.Collections.APP_DEFINITIONS),
new SqlQuerySpec(@"SELECT r.id, r.appName FROM ROOT r WHERE r.appId IN (@userApps)", (@"@userApps", userApps.ToArray()).ToSqlParameters()),
new FeedOptions { EnableCrossPartitionQuery = true })
.AsDocumentQuery();
Run Code Online (Sandbox Code Playgroud)
当我执行此操作时,尽管我知道数据应该返回我一个结果集,但每次它都返回为空。
.Select()将我输入的字符串返回string.Join到以逗号分隔的列表中。
例如:
var userApps = string.Join(@",", _docs.CreateDocumentQuery(UriFactory.CreateDocumentCollectionUri(Constants.Databases.Applications.ID, Constants.Databases.Applications.Collections.USER_APPS),
new SqlQuerySpec(@"SELECT r.appId FROM ROOT r WHERE r.userId = @userId", (@"@userId", userId).ToSqlParameters())) …Run Code Online (Sandbox Code Playgroud)