GitHub 작업으로 자동 Helm 저장소 만들기

내 개인 차트를 보관할 Helm 저장소가 필요했지만 동시에 이를 위한 서버를 처리하고 유지 관리하고 싶지 않았습니다.

내 연구에서 나는 이 목적을 위해 git 저장소를 사용하는 것이 가능하고 아주 쉽다는 것을 발견했습니다. 엄청난! 그러나 나는 그것이 내 사용에 충분하지 않다고 생각합니다. 한 번은 모든 차트 변경에 대해 수동으로 리포지토리를 패키징하고 인덱싱할 필요가 없었기 때문에 확장하기로 결정했습니다.

최종 결과



마지막으로 다음과 같이 구성된 git 저장소가 변경될 때마다 자체 업데이트되는 Helm 저장소가 있어야 합니다.

├── master
│   ├── charts/
│   │   └── example/
│   └── sync_repo.sh
└── repo
    ├── example-0.1.0.tgz
    └── index.yaml


전체 예제는 myGitHub에서 볼 수 있습니다.

설정



이를 위해 새 git 저장소를 만들고 로컬로 복제한 다음 charts 디렉터리에 새 차트를 만듭니다.

mkdir charts
cd charts
helm create example


완료되고 커밋되면 실제 Helm 저장소를 저장할 고아 분기를 만듭니다. 왜 고아 지점인가? 저장소에 대한 모든 커밋에서 CircleCI는 Helm 저장소를 업데이트하기 위해 자체 커밋을 수행합니다.

이 단계는 선택 사항이지만 개발자가 리포지토리를 변경할 때마다 풀 리베이스하지 않아도 되며 마스터 브랜치의 기록을 깨끗하게 유지하는 추가 이점이 있습니다.
다음과 같이 repo라는 고아 분기를 만듭니다.

git checkout --orphan repo
git rm -rf . 
touch index.yaml
git add index.yaml
git commit -m 'Initial Commit'
git push -u origin repo


이제 master 분기로 돌아가자. 다음 단계는 CI가 커밋할 때마다 사용할 스크립트를 만드는 것입니다. 스크립트는 모든 차트를 패키징하고 index.yaml 파일을 다시 생성합니다.

선택한 텍스트 편집기를 사용하여 생성sync_repo.sh하고 다음을 추가합니다.

#!/bin/sh
mkdir -p repo
cd repo
helm package ../charts/*
helm repo index .


마지막으로 이 퍼즐의 마지막 조각을 추가하고 GitHub Actions를 이 프로세스에 통합합니다.

우리의 행동은 우리의 쉘 스크립트가 우리를 중단시킨 부분을 선택할 것입니다. 별도의 repo 분기를 복제하고 생성된 파일을 복사하여 최종적으로 변경 사항을 커밋하고 원본으로 푸시합니다.

이를 위해 .github/workflows/sync_repo.yml 에서 다음 작업을 생성합니다.

name: Sync Helm Repo
on:
  push:
    branches: [ master ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: 'master'
          path: 'master'
      - uses: actions/checkout@v2
        with:
          ref: 'repo'
          path: 'repo'   
      - uses: azure/setup-helm@v1
      - name: Sync Helm Repo
        run: cd master && sh sync_repo.sh
      - name: Move repo folder
        run: |
          mv master/repo/* repo/
          cd repo
          git config user.email "[email protected]"
          git config user.name "Idan Elhalwani"
          git add -A
          git diff --quiet && git diff --staged --quiet || git commit -m "Update repo [SKIP CI]" -m "${{ github.event.head_commit.message }}"
          git push


작업을 분해해 보겠습니다.

# Move our generated files from the master branch folder to the repo branch folder
mv master/repo/* repo/
cd repo
# Configure git for when we're ready to commit
git config user.email "[email protected]"
git config user.name "Idan Elhalwani"
# Add all new files and attempt to commit. If there is nothing new, the commit won't go through and nothing will be pushed
git add -A
git diff --quiet && git diff --staged --quiet || git commit -m "Update repo [SKIP CI]" -m "${{ github.event.head_commit.message }}"
git push


결론



이 시점에서 완전히 작동하고 자동으로 업데이트되는 Helm 저장소가 있습니다. 이를 사용하려면 repo 분기에 대한 원시 URL을 가져옵니다.

우리의 경우 다음과 같이 저장소를 추가합니다.

helm repo add example https://raw.githubusercontent.com/idane/helm-repo-example/repo

좋은 웹페이지 즐겨찾기