避免在 Makefile 中评估变量

问题描述 投票:0回答:1

我正在尝试创建一个 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

bash variables makefile
1个回答
0
投票

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)"
© www.soinside.com 2019 - 2024. All rights reserved.