英文:
Parse metadata json from docker bake github action
问题
以下是您要翻译的部分:
"I need to grab the outputs from the metadata
output on the docker/bake action: https://github.com/docker/bake-action#outputs
Here's the bake action:
- name: Build all Dockerfiles images listed in docker-compose.yml
uses: docker/bake-action@v2.3.0
id: monorepo-build
env:
....
with:
push: true
files: docker-bake.hcl
set: |
*.args.environment=${{ steps.vars.outputs.env }}
*.args.site=${{ inputs.SITE }}
*.args.GH_PACKAGE_READ=${{ secrets.GH_TOKEN }}
Then immediately after I run:
- name: Test getting the metadata output from Bake step
run: |
touch metadata.json
echo "${{ steps.monorepo-build.outputs.metadata }}" > metadata.json
cat metadata.json | jq '.mykey'
So as you see I've tried to echo the metadata into a json file first and then parse that using jq
to get the top level key mykey
. I've also tried to parse directly by echoing "${{ steps.monorepo-build.outputs.metadata }}" | jq '.mykey'
I'm getting the error parse error: Invalid numeric literal at line 2, column 8
. Here's the JSON output from the file:
{
mykey: {
containerimage.buildinfo: {
frontend: dockerfile.v0,
attrs: {
...
sources: [{
...
}]
},
containerimage.descriptor: {
mediaType: ********
digest: **********
size: 856
},
containerimage.digest: *****************
image.name: ****************
}
}
I've noticed it doesn't have double quotes around the key/value pairs. When I add double quotes on in my local copy and run jq
it seems fine.
How can I sort this?"
英文:
I need to grab the outputs from the metadata
output on the docker/bake action: https://github.com/docker/bake-action#outputs
Here's the bake action:
- name: Build all Dockerfiles images listed in docker-compose.yml
uses: docker/bake-action@v2.3.0
id: monorepo-build
env:
....
with:
push: true
files: docker-bake.hcl
set: |
*.args.environment=${{ steps.vars.outputs.env }}
*.args.site=${{ inputs.SITE }}
*.args.GH_PACKAGE_READ=${{ secrets.GH_TOKEN }}
Then immediately after I run:
- name: Test getting the metadata output from Bake step
run: |
touch metadata.json
echo "${{ steps.monorepo-build.outputs.metadata }}" > metadata.json
cat metadata.json | jq '.mykey'
So as you see I've tried to echo the metadata into a json file first and then parse that using jq
to get the top level key mykey
. I've also tried to parse directly by echoing "${{ steps.monorepo-build.outputs.metadata }}" | jq '.mykey'
I'm getting the error parse error: Invalid numeric literal at line 2, column 8
. Here's the JSON output from the file:
{
mykey: {
containerimage.buildinfo: {
frontend: dockerfile.v0,
attrs: {
...
sources: [{
...
}]
},
containerimage.descriptor: {
mediaType: ********
digest: **********
size: 856
},
containerimage.digest: *****************
image.name: ****************
}
}
I've noticed it doesn't have double quotes around the key/value pairs. When I add double quotes on in my local copy and run jq
it seems fine.
How can I sort this?
答案1
得分: 2
代码部分不翻译,以下是翻译好的部分:
问题出在您的 echo
中的双引号 (""
),如下所示:
echo "${{ steps.monorepo-build.outputs.metadata }}"
将导致类似以下的结果:
echo "{
"mykey": {
"containerimage.buildinfo": {
"frontend": "dockerfile.v0,"
"attrs": {
所以修复方法要么使用单引号:
- name: 测试从 Bake 步骤获取元数据输出
run: |
touch metadata.json
echo '${{ steps.monorepo-build.outputs.metadata }}' > metadata.json
cat metadata.json | jq '.mykey'
要么使用 cat
:
- name: 测试从 Bake 步骤获取元数据输出
run: |
cat << EOF > metadata.json
${{ steps.monorepo-build.outputs.metadata }}
EOF
cat metadata.json | jq '.mykey'
或者,根据评论中 Azeem 提到的可能有不同的方法:
- name: 测试从 Bake 步骤获取元数据输出
run: |
jq '.myKey' <<< $METADATA > some-output.json
env:
METADATA: ${{ steps.monorepo-build.outputs.metadata }}
英文:
The issue is with the double quotes (""
) in your echo
, this:
echo "${{ steps.monorepo-build.outputs.metadata }}"
would lead to something like:
echo "{
"mykey": {
"containerimage.buildinfo": {
"frontend": "dockerfile.v0,"
"attrs": {
So the fix is to either use single quotes:
- name: Test getting the metadata output from Bake step
run: |
touch metadata.json
echo '${{ steps.monorepo-build.outputs.metadata }}' > metadata.json
cat metadata.json | jq '.mykey'
or use cat
:
- name: Test getting the metadata output from Bake step
run: |
cat << EOF > metadata.json
${{ steps.monorepo-build.outputs.metadata }}
EOF
cat metadata.json | jq '.mykey'
Or maybe a different approach as Azeem mentioned in the comments:
- name: Test getting the metadata output from Bake step
run: |
jq '.myKey' <<< $METADATA > some-output.json
env:
METADATA: ${{ steps.monorepo-build.outputs.metadata }}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论