我正在尝试创建一个 Makefile,从 AWS Secrets Manager 恢复凭证,并将其传递给 Skaffold,但是当我恢复密码并尝试将其发送到函数时,它失败了,因为它正在被评估。
当我尝试使用
PG_USER=$(PG_USER) \ PG_PASSWORD=$(PG_PASSWORD) \
将其作为变量传递给 skaffold 时,这种情况再次发生。
我尝试用引号和双引号修复它,并添加 $$ 正如其他答案所说,但最终没有任何效果。不知道如何解决它,或者我可以在哪里提高我在这方面的技能,我觉得我只能在这些情况下学习,但我很匆忙并且不喜欢它。
生成文件
production-release:
$(eval creds := $(shell aws --profile $(AWS_PROFILE) secretsmanager get-secret-value --secret-id $(RDS_SECRET_ID) --query SecretString --output json))
$(eval user := $(shell echo $(creds) | jq -r .username))
$(eval password := $(shell echo $(creds) | jq -r .password))
@$(MAKE) .skaffold-build PROFILE=production PG_USER=$(user) PG_PASSWORD=$(password)
输出:
/bin/bash: line 1: GPhADd-6Y: No such file or directory
整个密码是
O}Kyfg|42t$~*!.w_f<GPhADd-6Y
makefile
的变量不应在配方中定义。
如果您不想总是获取密码,并且仅在目标为
production-release
时才获取密码,那么您可以在基于目标的条件内进行。
引用字符串也是一个好主意:
ifeq "$(MAKECMDGOALS)" "production-release"
creds := $(shell aws --profile $(AWS_PROFILE) secretsmanager get-secret-value --secret-id $(RDS_SECRET_ID) --query SecretString --output json)
user := $(shell echo $(creds) | jq -r .username)
password := $(shell echo $(creds) | jq -r .password)
endif
production-release:
@$(MAKE) .skaffold-build PROFILE=production PG_USER="$(user)" PG_PASSWORD="$(password)"