GitHub Actions로 자동 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

좋은 웹페이지 즐겨찾기