ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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와 관련해서 에러가 발생했네요.

    구글링 해보니, 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_EMAILMY_NAME은 환경변수로 선언했습니다. 하지만 비밀번호는 GitHub에 유출되면 안 되므로 GitHub Secrets을 사용합니다.

     

    GitHub Secrets 생성하기

    GitHub Settings - Secrets

    GitHub 저장소의 Setting - Secrets에 들어가시면 새로운 시크릿을 만들 수 있습니다.

    만약 value에 특수문자(특히 @)가 들어있다면 URI의 특성 상, 잘못된 비밀번호와 호스트로 파싱 합니다. 이를 방지하기 위해, 특수문자는 URL encoding 값을 사용해야 합니다.

     

    테스트하기

    그럼 이제 배포가 잘 되는지 확인해볼까요?

     

    gh-pages가 정상적으로 퍼블리시했다

    정상적으로 잘 작동합니다.

    댓글

Designed by black7375.