linux - 运行导出环境的 Makefile 有问题
问题描述
我创建了一个从固定路径Makefile
导出一个,例如:kubeconfig
myproj
- .kube //folder
config //file which contain the config
- Makefile. //same level as .kube folder
现在,当我从终端运行时,它可以工作,我的意思是如果我运行kubectl get ns
我得到结果,这意味着它配置成功!
export KUBECONFIG=/Users/i33333/projects/app-test/v-app/.kube/config
我创建了一个 makefile 目标,如下所示
kube-cfg:
export KUBECONFIG=$(PWD)/.kube/config
执行我在终端中看到的目标时
export KUBECONFIG=/Users/i33333/projects/app-test/v-app/.kube/config
这与手动操作完全相同,但是当我运行时kubectl get ns
我收到错误:
error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable
我不明白为什么当我从 makefile 运行它时它不起作用, 而当我从终端手动运行它时它起作用?任何想法我都尝试改变并使用 $(CURRDIR) 这无济于事
更新
我已经尝试过像建议的那样不起作用
KUBECONFIG=$(PWD)/.kube/config
kube-cfg:
export $(KUBECONFIG)
更新2
如果我这样做
KUBECONFIG := $(PWD)/kube/config.yaml
tgt1:
@export KUBECONFIG=$(KUBECONFIG) && kubectl get ns
我在运行 makefile 时能够看到 nstgt1:
,但是如果现在我想从终端运行它,kubectl get ns
我会收到相同的错误 `error: no configuration has been provided, 请尝试设置 KUBERNETES_MASTER 环境变量,我想从 makefile 配置它
解决方案
问题是makefile recipe 创建了新的环境,在完成recipe 后被销毁。
如果你想在调用 make 后使用 kubernetes 工具,在你的场景中更合适的工具是使用source
命令。它适用于您当前的环境中作为参数传递的脚本中所做的所有更改:
$ source setupenv.sh
$ kubectl get ns # should be no problem
$ make someting # even using kubectl inside make shouldn't be a problem
但是,如果您想在 make 脚本中使用 kubectl,请创建如下内容:
recipe :
source setupenv.sh && kubectl get ns
# or
recipe2 :
export KUBECONFIG=$(PWD)/.kube/config && kubectl get ns
更新:
我认为配置文件是一个脚本。所以你应该准备shell脚本设置环境,例如setupenv.sh
:
#!/bin/bash
export KUBECONFIG=$(PWD)/.kube/config
推荐阅读
- laravel - Laravel nova 如何创建具有多个输入字段的自定义字段
- bash - git 列出本地文件夹中包含的所有 repos 的所有活动分支
- javascript - 为什么在以下示例中,第一个文本行的第一行在 HTML5 画布中不可见?
- javascript - Javascript 滑块有效,但它是硬编码的
- javascript - 在输入输入后如何从字符串中提取最后一个字符?
- laravel - 使用 Google oauth 登录时如何获取用户的组织 ID?
- javascript - D3:在工具提示内显示折线图时出现问题
- c# - 使用 for 和 while 的 C# Sharp Grade 程序
- docker - 我应该在 docker swarm 中使用 HTTPS 吗?
- python - python 3中Windows上的离线语音识别