Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins 如何使用环境变量从application.properties读取数据库端口_Jenkins_Kubernetes_Environment Variables_Port_Environment - Fatal编程技术网

Jenkins 如何使用环境变量从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 Boot和application.properties非常陌生。我的问题是,我需要非常灵活地使用我的数据库端口,因为我有两个不同的数据库。因此,我想从环境变量中读取端口。我尝试了以下方法:

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变量,我检查了itif
env['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