gitlab的ci/cd发布项目隐藏帐号密码(2)
- UID
- 1066743
|
gitlab的ci/cd发布项目隐藏帐号密码(2)
项目中使用环境变量
java版本
当docker启动SpringBoot打包的服务时,且一些参数需要从外界获取而非写死在properties文件里,通过以下两步完成此需求:
1.在配置文件中配置环境变量
spring.redis.host=${REDIS_HOST:127.0.0.1}
spring.redis.port=6379
spring.redis.timeout=30000
以上表是REDIS_HOST在系统环境变量中获取,如果获取不到默认值为127.0.0.1
代码中使用如下:
@Value("${host.port.url}")
private String host;
2.在启动docker容器时传入环境参数
docker run -d --name test2 {镜像名} -e REDIS_HOST=192.168.0.1
如果是使用的kubectl create方式则要麻烦一些,因为gitlab中设置的变量只能在gitlab.ci文件中使用${}方式识别到。并没找到一种直接能传导到k8s的yaml中的方式。
我这里找到了三种方式:
1、gitlabci中使用sed -i替换yaml中的文本信息
2、使用configmap作为中转(不推荐,configmap管理得不好其他人还是能够通过configmap获取到账号密码)
3、sed -i的高级版本使用envsubst
首先了解一下k8s中设置环境变量的方式如下:
例如
kubectl create -f https://k8s.io/docs/tasks/inject-data-application/envars.yaml
需要在yml中加入如下配置
env:
- name: DEMO_GREETING
value: "Hello from the environment"
例子如下:
apiVersion: v1
kind: Pod
metadata:
name: envar-demo
labels:
purpose: demonstrate-envars
spec:
containers:
- name: envar-demo-container
image: gcr.io/google-samples/node-hello:1.0
env:
- name: DEMO_GREETING
value: "Hello from the environment"
方式一 sed文本替换
service.yml如下:
apiVersion: v1
kind: Service
metadata:
name: presentation-gitlab-k8s-__CI_BUILD_REF_SLUG__
namespace: presentation-gitlab-k8s
labels:
app: __CI_BUILD_REF_SLUG__
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8000"
prometheus.io/scheme: "http"
prometheus.io/path: "/metrics"
spec:
type: ClusterIP
ports:
- name: http-metrics
port: 8000
protocol: TCP
selector:
app: __CI_BUILD_REF_SLUG__
使用代码如下:
- sed -i "s/__CI_BUILD_REF_SLUG__/${CI_ENVIRONMENT_SLUG}/" deployment.yaml ingress.yaml service.yaml |
|
|
|
|
|