【问题标题】:How to feed openshift an environment variable via jenkins config file?如何通过 jenkins 配置文件为 openshift 提供环境变量?
【发布时间】:2019-04-29 18:15:09
【问题描述】:

我正在尝试通过 jenkinsfile 更新 openshift 中的环境变量。我可以通过以下命令更新环境变量,但该命令的问题是我必须在 jenkinsfile 中输入所有变量,因此它不安全,并且 jenkinsfile 有时看起来很长而且很丑陋。

"命令"oc set env dc/prj -e te1=tes -e tes2=tes2 Ntes=ntes""

通常对于其他服务器,我习惯将所有环境变量添加到jenkins的配置文件中,并将配置文件直接传递给服务器。

只是想知道是否有人做过任何事情,我可以使用 jenkins 配置文件通过 jenkinsfile 将所有环境变量传递给 openshift 容器。

谢谢

【问题讨论】:

  • 是否必须通过 jenkins 配置文件进行配置,或者您想知道使用 openshift 模板的其他程序吗?如果是这样,我可以提供一些我们在项目中关注的信息。
  • 这不是强制性的,也希望看到您的不同方法。谢谢

标签: jenkins environment-variables openshift


【解决方案1】:

我更喜欢使用 Openshift 模板进行部署或更改。这种方式有助于对您的基础架构进行编码,基本上是用于版本控制的基础架构即代码,并有助于跨环境复制相同内容。

例如,考虑这个部署模板

$ cat deployment.yaml 
apiVersion: v1
items:
- apiVersion: v1
  kind: DeploymentConfig
  metadata:
    annotations:
      openshift.io/generated-by: OpenShiftNewApp
    creationTimestamp: null
    labels:
      app: "${APPLICATION_NAME}"
    name: "${APPLICATION_NAME}"
  spec:
    replicas: 1
    selector:
      app: "${APPLICATION_NAME}"
      deploymentconfig: "${APPLICATION_NAME}"
    strategy:
      resources: {}
      rollingParams:
        intervalSeconds: 1
        maxSurge: 25%
        maxUnavailable: 25%
        timeoutSeconds: 600
        updatePeriodSeconds: 1
      type: Rolling
    template:
      metadata:
        annotations:
          openshift.io/generated-by: OpenShiftNewApp
        creationTimestamp: null
        labels:
          app: "${APPLICATION_NAME}"
          deploymentconfig: "${APPLICATION_NAME}"
      spec:
        containers:
        - env:
           - name: param1
             value: value1
           - name: param2
             value: value2
          image: "${DOCKER_IMAGE}"
          imagePullPolicy: Always
          name: "${APPLICATION_NAME}"
          ports:
            - containerPort: PORT1
              protocol: TCP
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: ${HEALTHCHECK_PATH}
              port: ${LIVENESS_PORT} 
              scheme: HTTPS
            initialDelaySeconds: 300
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: ${HEALTHCHECK_PATH}
              port: ${READINESS_PORT}
              scheme: HTTPS
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          resources:
            limits:
              cpu: ${CPU_MAX}
              memory: ${MEMORY_MAX}
            requests:
              cpu: ${CPU_DEFAULT}
              memory: ${MEMORY_DEFAULT}
          terminationMessagePath: /dev/termination-log
        dnsPolicy: ClusterFirst
        restartPolicy: Always
        securityContext: {}
        terminationGracePeriodSeconds: 30
    test: false
    triggers:
    - type: ConfigChange
  status: {}
kind: List
metadata: {}

上面的模板有2个变量,部署配置是使用命令oc apply -f deployment.yaml创建的。

- name: param1
  value: value1
- name: param2
  value: value2

所以现在要更新 Openshift 中的环境变量,我建议在模板中添加新变量,如下所示:

- name: param1
  value: value1
- name: param2
  value: value2
- name: param3
  value: value3

使用相同的命令oc apply -f deployment.yaml更新新的环境变量,或者可以使用相同的命令来更新现有的参数。

Openshift 具有仅在配置发生更改时更新配置的智能。这样,不仅可以更新您的环境变量,还可以更新任何其他配置,例如 CPU、内存、副本、docker 映像等。

希望这会有所帮助!

【讨论】:

  • 我会试一试,但这听起来是正确的方法。我会将第一次部署后获得的 deployment.yaml 保存在 Jenkins 配置文件中,并在每次必须向部署添加新变量或任何其他更改时更新配置文件,然后使用上述命令进行部署。
【解决方案2】:

如果您想像以前一样从文件中使用该方法,您可以将其分为两个步骤:

  1. 从文件创建配置映射: oc create configmap my-config --from-file=path/to/bar
  2. 从 configmap 设置环境变量: oc set env --from=configmap/my-config dc/prj

【讨论】:

  • 我面临的问题是,每次我创建配置映射时,它都会创建作为文件名的键和作为文件中所有内容的值。如果我可以从 configmap yaml 的数据部分的 key=value 或直接从文件映射所有 key=value 来创建 key=value 对,那将是一个完美的解决方案。
  • 我正在尝试使用 yaml 文件的编辑副本更新配置映射,但只是在数据部分添加更多字段,以便我可以从 yaml 文件添加/编辑环境变量。如果有任何方法可以通过添加一个 yaml 文件来创建配置映射,该文件的数据字段将用作键值对,那么解决方案将是完美的。谢谢@PhilipGough
  • 再次尝试在这里重述我的问题。我正在尝试通过 cli 直接从 yaml 文件添加/更新项目(从 Web 控制台创建配置映射时)。
  • 不确定这对您来说有多可行,但可以尝试yq.readthedocs.io/en/latest 之类的方法来解析文件并添加 k=v --from-literal
  • 实际上您可以尝试使用“--from-env-file”标志来创建配置映射。它采用带有 KEY=value 之类的行的多行文件并创建 configmap。我认为它应该可以解决您的问题。
猜你喜欢
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
相关资源
最近更新 更多