Статьи

Как использовать страницы GitHub в качестве хранилища Helm Charts

Итак, вы хотите опубликовать созданную вами диаграмму Хелма и перенести источник на Github, и по какой-то причине вы не хотите или не можете опубликовать их в списке курируемых диаграмм Хелма ?

Следуйте этому короткому руководству, чтобы автоматизировать публикацию диаграмм Helm на ваших страницах Github, размещенных в репозитории Helm; мы будем использовать в качестве примера диаграмму руля Terracotta (enterprise) Helm, которая находится в стадии разработки ( диаграмма Helm OSS уже доступна в Helm Hub )

Перво-наперво: подготовьте таблицу Хелма к публикации

Вам не нужно, но настоятельно рекомендуется следовать рекомендациям хит-парадов .

Как только это будет сделано и вы сможете успешно запустить helm lint :

$ helm lint terracotta/
==> Linting terracotta/
Lint OK 1 chart(s) linted, no failures

И вы также можете установить свою схему рулевого управления из источника:

$ helm install terracotta/

Тогда вы готовы поделиться своей диаграммой Helm со всем миром, распространяя ее с помощью репозитория Helm

Размещение репозитория Helm на страницах Github

Ну, а если вы не хотите или не можете включить свою диаграмму Helm в список курируемых диаграмм Helm , разве вы не можете использовать специальное программное обеспечение для размещения диаграмм Helm?

Конечно, вы можете, и у вас на самом деле есть несколько вариантов: ChartMuseum — это репозиторий Helm с открытым исходным кодом, но, возможно, вы уже работали в своей организации Artifactory и его репозитории Helm , или Nexus 3 и его плагин Helm, или, возможно, у вас уже есть подписка с Quay .io .

На самом деле, пока вы можете

  • запустить helm package . (упаковать диаграмму в тарболл), а затем
  • запустить helm repo index . (сгенерируйте index.yaml, кстати, вам не нужно устанавливать Tiller или даже не нужно запускать кластер Kubernetes, клиент может выполнить эти команды локально), и вы можете
  • поместите эти файлы на сервер статической веб-страницы, такой как Apache 2 или Ngninx,

ты в порядке !

Тем не менее, если ваша диаграмма helm уже есть на Github , и у вас уже есть поставщик Continuous Integration (ваш собственный экземпляр Jenkins или бесплатные конвейеры Microsoft Azure), то у вас есть всего один сценарий для автоматизации публикации вашего репозитория Helm для всеобщего обозрения. Github страниц!

Использование Azure Pipelines

После того, как вы настроили конвейеры Azure, чтобы «наблюдать» за своим хранилищем Github для применения задач, описанных в azure-pipelines.yaml, вам просто нужно иметь этот файл azure-pipelines.yaml правильно!

Настройте новый конвейер сборки в конвейерах Azure, используя правильный файл определения задания azure-pipelines.yaml.

Вот некоторые пояснения к этому файлу (я позволю читателю адаптироваться к Jenkins или любому другому CI, который может запускать контейнеры Docker); Особая благодарность моему коллеге Александру, который помог мне запустить эту интеграцию:

YAML

1
2
pool:
  vmImage: 'ubuntu-latest'

Мы будем использовать «рабочий» на основе Ubuntu; Все идет нормально.

YAML

1
2
3
4
5
6
7
steps:
- task: YodLabs.VariableTasks.SetVariablesWithCredentials.SetVariablesWithCredentials@0
  displayName: 'Github auth'
  inputs:
    ConnectionName: gh-push-tc-org
    userNameVarName: U
    passwordVarName: P

Первый шаг — это аутентификация на Github: это позволит роботу CI зафиксировать и перейти в ветку страниц Github; Конвейер Azure необходимо настроить в вашем Git-репозитории «Настройки», чтобы иметь доступ для записи. Предоставленные имя пользователя и пароль — просто прокладки.

Предоставьте доступ к конвейерам Azure или любому другому CI-хранилищу в хранилище Github.

YAML

01
02
03
04
05
06
07
08
09
10
- task: Docker@0
  displayName: 'Generate helm package'
  inputs:
    containerRegistryType: 'Container Registry'
    action: 'Run an image'
    imageName: 'alpine/helm'
    volumes: |
      $(build.sourcesDirectory)/kubernetes/helm/terracotta:/apps
    containerCommand: 'package .'
    detached: false

На этом шаге мы запускаем в контейнере Docker команду: helm package . в нашем каталоге диаграмм (смонтированном через том), чтобы создать тарбол, который будет содержать нашу диаграмму Хелма.

Мы могли бы загрузить helm cli и запустить команду непосредственно как команду bash; но было легче использовать контейнер, оснащенный шлемом. (Спасибо Александру за идею)

YAML

1
- task: Docker@0<br />  displayName: 'Download existing index.yaml'<br />  inputs:<br />    containerRegistryType: 'Container Registry'<br />    action: 'Run an image'<br />    imageName: 'alpine:latest'<br />    volumes: |<br />      $(build.sourcesDirectory)/kubernetes/helm/terracotta:/apps<br />    containerCommand: 'wget -P /apps/ https://softwareag.github.io/terracotta-cloud/index.yaml'<br />detached: false

На этом шаге мы запускаем в контейнере Docker команду: wget -P /apps/ https://softwareag.github.io/terracotta-cloud/index.yaml в каталоге наших диаграмм (монтируется через том), чтобы захватите последнюю версию индекса репозитория

С помощью этого индекса мы сможем на следующем шаге добавить к этому индексу новый график (например: если версия графика изменилась, мы хотим, чтобы наше репо ссылалось как на новую версию, так и на старые; если мы не применяйте этот шаг, репо будет содержать только самый последний график … так много для непрерывности)

YAML

01
02
03
04
05
06
07
08
09
10
- task: Docker@0
  displayName: 'Generate helm index.yaml'
  inputs:
    containerRegistryType: 'Container Registry'
    action: 'Run an image'
    imageName: 'alpine/helm'
    volumes: |
      $(build.sourcesDirectory)/kubernetes/helm/terracotta:/apps
    containerCommand: 'repo index <span class="pl-s">--merge index.yaml </span> .'
detached: false

На этом этапе мы запускаем в контейнере Docker команду: helm repo index . в нашем каталоге диаграмм (смонтированном через том), чтобы сгенерировать index.yaml, который будет ссылаться на tar-диаграмму Helm (и мы используем –merge, чтобы убедиться, что мы сохраним ссылки на предыдущие версии, в случае, если версия диаграммы) изменено)

YAML

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
- bash: |
    # setup Github Pages branch and repo to push to
    gh_url="https://$U:$P@github.com/SoftwareAG/terracotta-cloud.git"
    gh_branch=gh-pages
    gh_source="#${SYSTEM_PULLREQUEST_PULLREQUESTNUMBER}"
     
    # setup git username and email; auth was done in a previous task
    git config --local user.name "autogen"
    git config --local user.email "autogen-noreply@no-reply.softwareag.com"
    # only keep files that were generated previously : index.yaml and a .tgz archive
    mv $(build.sourcesDirectory)/kubernetes/helm/terracotta/*.* ./
    git status
    git checkout -f gh-pages
    git add index.yaml *.tgz
    git status
    git commit -m "Update repository with latest helm chart from ${gh_source} ${COMMIT}"
    git push $gh_url $gh_branch
displayName: 'Commit Helm Charts'

Наконец, пришло время зафиксировать изменения и перенести их на страницы Github.

Страницы были настроены для обслуживания ветви gh_pages под URL: https://softwareag.github.io/terracotta-cloud/ ; но вы можете использовать свой собственный домен DNS.

Обязательно настройте внешний вид вашего репозитория Helm с помощью README.md

Пример успешной сборки доступен на момент написания здесь .

Большое спасибо моему коллеге Акому

Опубликовано на Java Code Geeks с разрешения Энтони Даханна, партнера нашей программы JCG. Смотрите оригинальную статью здесь: Как использовать страницы GitHub в качестве хранилища Helm Charts

Мнения, высказанные участниками Java Code Geeks, являются их собственными.