我想创建一个 Makefile,它允许我在不同的环境中运行脚本,这取决于秘密 ENV_VAR 和公开的 ENV 环境变量:
export ENV_VAR=<secret_env_var>
setup:
python my_script.py
dev_setup: export ENV:=dev
dev_setup: setup
test_setup: export ENV:=test
test_setup: setup
我可以在单独的文件中包含秘密,添加包含用于开发环境的 ENV_VAR 的
include config_dev.env
文件。但对于测试环境,我应该使用另一个秘密 ENV_VAR 将行更改为 include config_test.env
。
我看不到将指令
include
定义到命令步骤中的可能性,以及如何使用 export ENV
环境变量来完成它。
或者应该如何以正确的方式完成?
我尝试了这个,注释/取消注释第一行代码
include config_dev.env
#include config_test.env
export ENV_VAR=<secret_env_var>
setup:
python my_script.py
dev_setup: export ENV:=dev
dev_setup: setup
test_setup: export ENV:=test
test_setup: setup
我不太明白保密如何附加到价值
ENV_VAR
虽然它是从 include
编辑的文件中设置的,但是制作时间选择
将 ENV
和 ENV_VAR
设置为它们的 dev
值或它们的 test
值
可以根据 make 目标是否为 dev_setup
或
test_setup
。显然它们是相互排斥的目标,我想
dev_setup
可以是默认值。
$ cat Makefile
target := $(MAKECMDGOALS)
ifeq (,$(target))
target := dev_setup
endif
ifeq (dev_setup,$(target))
include config_dev.env
export ENV := dev
else
ifeq (test_setup,$(target))
include config_test.env
export ENV := test
else
$(error Choose one target: dev_setup (default) or test_setup)
endif
endif
export ENV_VAR:=$(secret_env_var)
.PHONY: setup dev_setup test_setup
$(target): setup
@echo $(target) done
setup:
@python3 -c "import os;print('ENV =', os.getenv('ENV'));print('ENV_VAR =', os.getenv('ENV_VAR'))"
@echo Setup done.
$ cat config_dev.env
secret_env_var=dev_setup_secret
$ cat config_test.env
secret_env_var=test_setup_secret
$ make
ENV = dev
ENV_VAR = dev_setup_secret
Setup done.
dev_setup done
$ make dev_setup
ENV = dev
ENV_VAR = dev_setup_secret
Setup done.
dev_setup done
$ make test_setup
ENV = test
ENV_VAR = test_setup_secret
Setup done.
test_setup done
$ make test_setup dev_setup
Makefile:14: *** Choose one target: dev_setup (default) or test_setup. Stop.