GitLab CI使用artifacts跨作业传参时出现reports应为哈希类型报错
问题原因
- 直接触发报错的原因是
artifacts:reports的配置格式错误。GitLab CI要求该字段为哈希(键值对)结构,你当前配置使用了-开头的列表格式,不符合语法要求。 - 额外存在文件名不匹配问题:你在script中将变量写入了
deploy-prod.env文件,但dotenv配置中指向的是不存在的infra.env,即使修复语法问题也无法正常传递变量。
修正后的配置片段
before-script: script: - terraform --version - export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - export TF_VAR_API_KEY=${TF_VAR_API_KEY} - export GIT_TOKEN=${GIT_TOKEN} prepare-infra-code: stage: build script: - cd iac/ - terraform init -force-copy -backend-config="address=https://gitlab.com/api/v4/projects/XXX/terraform/state/main" -backend-config="lock_address=https://gitlab.com/api/v4/projects/XX/terraform/state/main/lock" -backend-config="unlock_address=https://gitlab.com/api/v4/projects/XXX/terraform/state/main/lock" -backend-config="username=XXX" -backend-config="password=$GIT_TOKEN" -backend-config="lock_method=POST" -backend-config="unlock_method=DELETE" -backend-config="retry_wait_min=5" - terraform plan ... deploy-prod: stage: deploy script: - cd iac/ - terraform init -force-copy -backend-config="address=https://gitlab.com/api/v4/projects/XXX/terraform/state/main" -backend-config="lock_address=https://gitlab.com/api/v4/projects/XXX/terraform/state/main/lock" -backend-config="unlock_address=https://gitlab.com/api/v4/projects/XXX/terraform/state/main/lock" -backend-config="username=XXX" -backend-config="password=$GIT_TOKEN" -backend-config="lock_method=POST" -backend-config="unlock_method=DELETE" -backend-config="retry_wait_min=5" - terraform apply --auto-approve - URL=$(terraform output api_url | cut -c2- | sed 's/.$//') - S3=$(terraform output bucket_name | cut -c2- | sed 's/.$//') - echo "REACT_APP_PORTFOLIO_API=$URL/portfolio" >> deploy-prod.env - echo "REACT_APP_TRANSACTION_API=$URL/transaction" >> deploy-prod.env - echo "FRONTEND_BUCKET=$S3" >> deploy-prod.env artifacts: reports: dotenv: deploy-prod.env
内容的提问来源于stack exchange,提问作者9rnt
相关产品推荐
相关产品推荐

