首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

gitlab的ci/cd发布项目隐藏帐号密码(2)

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
返回列表