Jenkins 如何使用环境变量从application.properties读取数据库端口
我对Spring Boot和application.properties非常陌生。我的问题是,我需要非常灵活地使用我的数据库端口,因为我有两个不同的数据库。因此,我想从环境变量中读取端口。我尝试了以下方法:Jenkins 如何使用环境变量从application.properties读取数据库端口,jenkins,kubernetes,environment-variables,port,environment,Jenkins,Kubernetes,Environment Variables,Port,Environment,我对Spring Boot和application.properties非常陌生。我的问题是,我需要非常灵活地使用我的数据库端口,因为我有两个不同的数据库。因此,我想从环境变量中读取端口。我尝试了以下方法: spring.data.mongodb.uri = mongodb://project1:${db-password}@abc:12345/project 如果我的数据库具有端口12345,则此代码工作正常。但是,如果我现在尝试从环境变量读取端口,就会出现问题。 我试过这个: sprin
spring.data.mongodb.uri = mongodb://project1:${db-password}@abc:12345/project
如果我的数据库具有端口12345,则此代码工作正常。但是,如果我现在尝试从环境变量读取端口,就会出现问题。
我试过这个:
spring.data.mongodb.uri = mongodb://project1:${db-password}@abc:${port}/project
问题如下:我使用的是k8和Jenkins。在我的k8中,环境变量“port”被赋予了我的程序,这对“db password”很好,但对端口不起作用。我的詹金斯说:
连接字符串包含无效的主机“abd:${port}”。端口“${port}”无效,它必须是介于0和65535之间的整数
那么现在我的问题是:
如何将端口作为环境变量读取而不出现此错误
提前谢谢你 要将环境变量注入POD,可以执行以下操作: 配置映射 您可以创建
ConfigMap
,并将您的POD配置为使用它
所需步骤:
- 创建
ConfigMap
- 使用ConfigMap更新/创建部署
- 测试一下
ConfigMap
来存储变量:
apiVersion: v1
kind: ConfigMap
metadata:
name: example-config
data:
port: "12345"
要应用它并能够使用它,请调用以下命令:
$kubectl create-例如configmap.yaml
上面的ConfigMap
将创建值为12345
的环境变量port
检查是否成功创建了ConfigMap
:
$kubectl获取配置映射
输出应如下所示:
NAME数据时代
示例配置121M
要获取详细信息,可以使用以下命令进行检查:
$kubectl描述配置图示例配置
输出:
Name: example-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
port:
----
12345
Events: <none>
负责使用ConfigMap
的配置:
envFrom:
- configMapRef:
name: example-config
之后,您需要使用以下命令运行部署:
$kubectl create-f configmap test.yaml
并检查它是否工作:
$kubectl获得吊舱
输出:
NAME READY STATUS RESTARTS AGE
nginx-deployment-84d6f58895-b4zvz 1/1 Running 0 23m
nginx-deployment-84d6f58895-dp4c7 1/1 Running 0 23m
测试一下
要测试环境变量是否正常工作,您需要进入pod内部并亲自检查
要执行此操作,请调用命令:
$kubectl exec-it NAME_OF_POD--/bin/bash
请提供_POD的变量名_,并根据您的情况提供相应的变量名
成功进入容器运行后:
$echo$端口
它应该表明:
root@nginx-部署-84d6f58895-b4zvz:/#echo$端口
12345
现在,您可以在pod中使用环境变量 执行到shell中,首先确认有您要查找的env变量。您只能使用环境提供的变量。因为
db\u密码
有效,我们可以假设它是提供的。按照@oleg butuzov的说法,如果您可以将shell放入容器中,则可以枚举所有环境变量(env
),并查看是否设置了${port}
。凭直觉(猜测),如果${db_password}
有效,您是否尝试过${db_port}`?您是否查看了此链接:?是的,已经设置了env变量,我检查了itifenv['port']
存在,请检查您的代码,例如$port}
(这是您的示例)。
NAME READY STATUS RESTARTS AGE
nginx-deployment-84d6f58895-b4zvz 1/1 Running 0 23m
nginx-deployment-84d6f58895-dp4c7 1/1 Running 0 23m