json - 如何使用 gitlab-ci.yml 在 gitlab 中更新 JSON 文件的内容?
问题描述
我正在为特定版本的浏览器构建 docker 映像并将其推送到 AWS ecr。运行 docker push 命令后,我想status = deployed
在 gitlab 中更新 JSON 文件。在 push 命令之后,更改状态的命令被 gitlab 跳过。该命令在我的本地机器上运行,但在 gitlab 中被跳过
下面是 gitlab-ci.yml 文件中的脚本
publish-firefox:
image:
name: amazon/aws-cli:2.2.38
entrypoint: [""]
services:
- docker:dind
before_script:
- amazon-linux-extras install -y docker
- aws --version
- docker --version
- yum install jq -y
script:
- cd /builds/firefox-dockerfile
- aws ecr get-login-password | docker login --username AWS --password-stdin $DOCKER_REGISTRY_DEV
- >
jq -c '.[]' firefox-versions.json | while read i; do
STATUS=$(echo $i | jq -r .STATUS)
FIREFOX_VERSION=$(echo $i | jq -r .FIREFOX_VERSION)
GECKODRIVER_VERSION=$(echo $i | jq -r .GECKODRIVER_VERSION)
if [[ "$STATUS" != "deployed" ]]
then
docker build -t $DOCKER_REGISTRY_DEV/$APP_NAME:"$FIREFOX_VERSION" --build-arg FIREFOX_VERSION="$FIREFOX_VERSION" --build-arg GECKODRIVER_VERSION="$GECKODRIVER_VERSION" .
docker push $DOCKER_REGISTRY_DEV/$APP_NAME:"$FIREFOX_VERSION"
tmp=$(mktemp)
cat firefox-versions.json | jq --arg a "$STATUS" '.[].STATUS = "deployed"' firefox-versions.json >"$tmp" && mv "$tmp" firefox-versions.json
else
if [[ "$STATUS" = "deployed" ]]; then
echo 'Firefox-'"$FIREFOX_VERSION"' is already created and pushed to ECR'
fi
fi
done
JSON 文件 = firefox-versions.json
[
{
"FIREFOX_VERSION": "79.0b9",
"GECKODRIVER_VERSION": "0.29.1",
"STATUS": "deployed"
},
{
"FIREFOX_VERSION": "88.0b8",
"GECKODRIVER_VERSION": "0.29.1",
"STATUS": ""
}
]
谁能帮我这个?
解决方案
问题已解决:在cat firefox-versions.json | jq --arg a "$STATUS" '.[].STATUS = "deployed"' firefox-versions.json >"$tmp" && mv "$tmp" firefox-versions.json
命令之后,我添加了 git token 及其将 json 文件提交并推送到 GitLab 的命令
推荐阅读
- c - 以编程方式确定变量的值是在编译时还是在运行时计算的
- java - 使 Spring SAML SP 与 8080 以外的其他端口一起工作
- angular - 从 Angular 9 更新到 Angular 10 后生成错误:“无法绑定到 'selectedValue' 中的错误,因为它不是 'tbody' 的已知属性”
- git - Git日志(--follow)无法显示重命名之外的历史
- html - CSS中视频右下角的覆盖div
- c# - Telerik RadGrid 修复了导出到 Word 时的字体大小
- reactjs - 从 React 表中的函数获取列值
- microsoft-graph-api - 使用安全警报 (Microsoft Graph API) 中的 Delta 查询跟踪事件更改
- angular - 如何在 Angular 中使用订阅对嵌套服务方法进行单元测试
- node.js - 将文件对象保存到本地文件系统:NodeJS EJS