-
[Git] GitHub과 연동할 때 인증 정보 포함시키는 방법programing/etc 2020. 6. 3. 13:36
안녕하세요, Einere입니다.
(광고 차단 기능을 꺼주시면 감사하겠습니다.)
최근에 GitHub Actions과 gh-pages를 이용하여 PR이 merge 되면 자동으로 배포까지 하도록 CD를 구성하려고 했습니다.
이 과정에서 겪었던 에러와 삽질들을 공유하고자 합니다..ㅎㅎ
gh-pages
gh-pages는 GitHub Pages로 정적 웹페이지를 배포할 수 있게 해주는 라이브러리이자 CLI입니다.
보통 로컬 환경에서는 단순하게
gh-pages -d build
명령어를 통해 쉽게 배포할 수 있습니다.GitHub Actions
GitHub Actions는 Travis CI, CircleCI와 같은 CI/CD 툴입니다.
마켓에서 미리 만들어진 workflow를 적용할 수 도 있고, 자신만의 workflow를 만들 수도 있습니다.
더군다나 많이 어렵지도 않아서, 간단한 로직이라면 쉽게 작성할 수 있습니다.
워크플로우 작성하기
GitHub Actions를 이용해
CICD.yml
workflow를 작성했습니다.# This is a basic workflow to help you get started with Actions name: CICD # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the master branch on: pull_request: branches: [ master ] types: [ closed ] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build_and_deploy: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 # Runs a set of commands using the runners shell - name: Install and deploy env: MY_EMAIL: kjwsx23@gmail.com MY_NAME: Einere run: | git config --global user.email $MY_EMAIL git config --global user.name $MY_NAME yarn install yarn deploy
CICD라는 이름을 가진 워크플로우는 master 브랜치로 보내진 PR이 닫히면 트리거되도록 되어있습니다. 여기서 조금 아쉬운 점은, PR이 merged 됐을 때를 명시할 수 없다는 것입니다. GitHub Actions의 webhook events의 pull-request섹션을 보면, Activity types에 merged가 없는 것을 확인할 수 있습니다.
GitHub Community의 글에서는 PR.closed 이벤트 보다는 push 이벤트를 사용하는 것을 권장하기도 합니다. 이 경우엔 여러 가지 filter pattern을 같이 사용하여 무분별한 트리거를 방지하고 하네요.
배포 확인하기
어찌됬건, CICD 워크플로우를 작성한 후, PR을 만들고 머지를 했습니다. 그리고 Actions의 결과를 봤는데..
음 gh-pages와 관련해서 에러가 발생했네요.
구글링 해보니, gh-pages 레포지토리의 이슈에 해당 관련 이슈가 있습니다. 내용은 대충 Window OS 환경에서 인증(credentials) 정보가 부족한 것으로 보입니다. 해당 이슈에도 Username관련 에러 메시지가 출력되었으므로, 저도 인증 정보를 잘 주면 해결될 것 같네요.
Git에 인증 정보 전달하기
워크플로우 수정하기
제가 작성한 워크플로우의 커맨드들은 새롭게 마련된 ubuntu 환경에서 실행되므로, 제 GitHub 관련 계정 정보가 없는 것은 당연합니다.
정보를 쥐어주기 위해,
git remote set-url
명령어를 이용해서 아이디(네임)와 비밀번호를 세팅해줍니다. (자세한 정보는 URI를 참고해주세요.)CICD.yml
을 다음과 같이 수정합니다.... run: | git config --global user.email $MY_EMAIL git config --global user.name $MY_NAME git remote set-url origin https://$MY_NAME:${{ secrets.MY_PASSWORD }}@github.com/Einere/homepage.git yarn install yarn deploy
위 코드에서
$MY_EMAIL
과MY_NAME
은 환경변수로 선언했습니다. 하지만 비밀번호는 GitHub에 유출되면 안 되므로 GitHub Secrets을 사용합니다.GitHub Secrets 생성하기
GitHub 저장소의 Setting - Secrets에 들어가시면 새로운 시크릿을 만들 수 있습니다.
만약 value에 특수문자(특히 @)가 들어있다면 URI의 특성 상, 잘못된 비밀번호와 호스트로 파싱 합니다. 이를 방지하기 위해, 특수문자는 URL encoding 값을 사용해야 합니다.
테스트하기
그럼 이제 배포가 잘 되는지 확인해볼까요?
정상적으로 잘 작동합니다.
'programing > etc' 카테고리의 다른 글
[GitHub] 2FA와 authentication error (0) 2021.06.27 부스트 캠프 멤버십 특강 - 코드리뷰 (0) 2021.02.13 [Kubernetes] API Convention (0) 2020.03.18 [kubernetes] 쿠버네티스 - 쿠버네티스 오브젝트 이해하기 (0) 2020.02.17 [개발환경] 개발 환경에 뭘 써야 할까? (0) 2019.12.16 댓글