CircleCI 2.1:parameters中声明的变量报未知变量错误排查
问题排查:CircleCI Job参数提示“Unknown variable(s)”错误
问题描述
在Job下定义了如下配置,但通过Web UI运行时,所有在parameters下定义的变量均提示“Unknown variable(s)”错误:
terraform_import_resources: docker: - image: myecrrepo/ansibleterraformpython3:tf0.12.18-1 parameters: aws_ssoadmin_permission_set: type: string default: "AWSAdministratorAccess" aws_ssoadmin_permission_set_params: type: string default: "arn:aws:sso:::permissionSet/xxxxxx,arn:aws:sso:::instance/ssoins-xxxx" aws_ssoadmin_account_assignment: type: string default: "AWSAdministratorAccess" aws_ssoadmin_account_assignment_params: type: string default: "xxxxxx" steps: - checkout - attach_workspace: at: ~/ - add_ssh_keys: *add_ssh_keys_infra_modules - run: *infra_modules_checkout - run: name: Run Terraform import command: | . ~/.env ansible --version terraform --version TAG_NAMES=`git log -1 --pretty=%B | perl -nle 'print $1 if /\((.*)\)/'` echo $TAG_NAMES terraform import aws_ssoadmin_permission_set.<< pipeline.parameters.aws_ssoadmin_permission_set>> << pipeline.parameters.aws_ssoadmin_permission_set_params >> terraform import aws_ssoadmin_account_assignment.<< pipeline.parameters.aws_ssoadmin_account_assignment >> << pipeline.parameters.aws_ssoadmin_account_assignment_params >>
问题原因与解决方法
问题出在参数引用语法错误:你用了pipeline.parameters.xxx的写法,但这是引用全局管道参数的语法,而当前定义的是Job级别的参数,Job内部引用自身参数的正确语法是<< parameters.xxx >>,不需要加pipeline.前缀。
修正后的Run步骤代码
- run: name: Run Terraform import command: | . ~/.env ansible --version terraform --version TAG_NAMES=`git log -1 --pretty=%B | perl -nle 'print $1 if /\((.*)\)/'` echo $TAG_NAMES terraform import aws_ssoadmin_permission_set.<< parameters.aws_ssoadmin_permission_set >> << parameters.aws_ssoadmin_permission_set_params >> terraform import aws_ssoadmin_account_assignment.<< parameters.aws_ssoadmin_account_assignment >> << parameters.aws_ssoadmin_account_assignment_params >>
额外说明
- 如果是在Workflow中调用这个Job时,需要从全局管道参数传递值到Job参数,才会用到
pipeline.parameters,比如:workflows: my_workflow: jobs: - terraform_import_resources: aws_ssoadmin_permission_set: << pipeline.parameters.global_permission_set >> - 但Job内部直接引用自己定义的参数,必须使用
parameters.参数名的格式。
内容的提问来源于stack exchange,提问作者Devang Sanghani
相关产品推荐
相关产品推荐

