Вы можете достичь этого несколькими способами. Ниже приведены некоторые из них.
1.ConfigMap
Самый эффективный и лучший способ добиться этого, например, один из добавленных комментариев. Вы можете сделать что-то подобное с одной картой конфигурации.
Пример ConfigMap может выглядеть примерно так
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.definitionName }}-{{ .Values.envName }}-configmap
namespace: {{ .Values.Namespace }}
data:
API_URL: '{{ pluck .Values.envName .Values.API_URL | first }}'
Пример файла значений в диаграммах рулевого управления будет выглядеть следующим образом
API_URL:
dev: dev.mycompany.io
staging: staging.mycompany.io
test: test.mycompany.io
prod: mycompany.io
И перед запуском установки helm или обновления helm добавьте шаг в Azure devOps для запуска команды bash в вашем конвейере CI / CD, но убедитесь, что у вас установлен инструмент yq для этого. Или вы можете использовать любой инструмент, чтобы сделать то же самое.
yq w -i values.yaml envName dev
Весь этот процесс заменяет ваш файл конфигурации с API_URL
на dev.mycompany.io
, как я дал dev
в yq
инструмент.
Но если вас смущает использование инструмента yq или чего-то еще, вы можете иметь несколько файлов значений для каждой среды отдельно и внести изменения в шаг установки helm в своем развертывании.
helm install ./path --values ./dev-values.yaml
Но ваш файл конфигурации должен выглядеть что-то вроде этого, если у вас есть несколько файлов значений и оперируете, какие значения выбрать из helm install
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.definitionName }}-{{ .Values.envName }}-configmap
namespace: {{ .Values.Namespace }}
data:
API_URL: '{{ .Values.API_URL }}'
Ну, это один из способов сделать вещи.
2. Управление Dockerfile
Вы также можете сделать это с помощью dockerfile, что-то вроде этого шага в вашем dockerfile заменит значение файла.
RUN sed -i "s/env/dev.mycompany.io/" /app/config.js
Но так как URL уникален для каждого env, вы можете принимать значения, используя ARG
ARG url
RUN sed -i "s/env/${url}" /app/config.js
И во время сборки вы должны иметь задачу для docker построить и при этом передать значение url
в качестве аргумента, вы можете видеть, что столбец аргументов в вашей задаче добавляет это --build-arg url=dev.mycompany.io
Это еще один способ добавить значения в ваш файл config.js
, но это также добавляет четыре (на основе четырех envs) docker сборок. И поэтому ваши агенты будут заняты созданием четырех разных изображений для каждого git коммита и помещением в очередь других сборок. Если вы чувствуете, что команда не работает в Dockerfile надстройкой RUN cat /app/config.js
в вашем docker файл, и вы можете отлаживать, что происходит, и проверить, если значения обновляются по мере изменения.
1051 * Опять это спорно, который хорошо и плохо, но я лично предпочитаю первый из-за количества коммитов, которые я делаю за час, но если URL-адрес не меняется, вам не нужно менять свою кодовую базу, вам просто нужно обновить сборку docker в вашем конвейере. Так что своего рода дискуссионным. 1053 * Есть и другие способы сделать это, а также. Но эти два проще всего достичь.
Надеюсь, это полезно.