GitHub Actions를 이용한 CI/CD 파이프라인 구축 가이드
1. 작업개요
- (작업목표) 로컬에서 작성된 Hugo 소스를 Github 리포지토리로 push하고, Github Action을 통해 빌드하여, 그 결과물을 Cloudflare Pages에 업로드
- (활용자원) Windows 11 pro, Hugo extended, Git, Github.com, Cloudflare.com
2. Cloudflare Pages 설정
2.1. 관리자 MFA 설정
- Profile → Access Management → Authentication
- Security Key Authentication, Mobile App Authentication, Email Authentication 중 선택 진행
- Mobile App Authentication 선택후 복구코드 반드시 백업 유지
2.2. (타기관에 등록된 Domain의) NameServer 등록
- Domains → Resistrations → 등록할 Domain Name 넣고 추가
- 추가된 Domain을 클릭하고 Overview를 클릭하면 NameServer 변경할 수 있는 방법이 안내
- 이 안내에 따라 Domain 구입기관에 등록되어 있는 Name Server 변경
- Cloudflare Domains에 등록한 Domain 클릭한 후, Overview를 클릭하여 NameServer 변경으로 통제권을 얻게 되었는지 확인
- DNS → Records 에 필요한 DNS Record를 등록
2.3. 프로젝트 생성
- Build → Compute → Workers & Pages
- Create Application 버튼 클릭 → Looking to deploy Pages? Get started 클릭하여 본격 설치 프로세스 시작
- Import an existing Git repository와 Drag and drop your files 선택 옵션
- Create a name for your project → Upload your project assets(보여 줄 웹사이트 소스)
- Success! Your project is deployed to Region: Earth 메시지 확인 후 임시 할당 주소를 브라우저에서 열어 테스트
2.4. Pages의 Custom Domain 설정
- 생성된 Pages 프로젝트 클릭
- Custom Domains → Set up Custom Domain → 사용할 Domain Name 입력 한 후에는 설정 방법이 안내
- 이 안내에 따라 도메인 등록 메뉴 중 DNS → Records 에 CNAME 등록
- Build → Compute → Workers & Pages → Custom Domains 에서 활성화 확인
- SSL/TLS → Edge Certificates → Status 값이 “Pending Validation(TXT) 등이 나오면 인증서 발급 중이므로 대기 필요
- 활성화되었음에도 Browser 접속에 문제가 있다면 Pages에 연결된 도메인만 Proxy status 값을 DNS only로 변경
3. Github Action 연동
-
Github Actions 워크플로우 작성
####### 프로젝트루트/github/workflows/deploy.yml name: Deploy Hugo site from Github to Cloudflare Pages on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: 'latest' - name: Build Hugo site run: hugo --minify ####### 테스트 중 # - name: Run HTMLProofer tests # uses: chabad360/htmlproofer@v1 # with: # directory: ./public # arguments: --check-html --empty-alt-ignore - name: Upload to Cloudflare Pages uses: cloudflare/pages-action@v1 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} projectName: my-hugo-blog directory: ./public -
push하여 Github에 업로드
-
GitHub 리포지토리 이동 → Settings → Secrets and variables → Actions → Secrets탭
-
New repository secret 클릭
- (Name) CLOUDFLARE_API_TOKEN
- (Secret) Cloudflare API Token 발급된 API 등록
- (Name) CLOUDFLARE_ACCOUNT_ID
- (Secret) Cloudflare Account ID 검색된 Account ID 등록
-
GitHub 리포지토리 → Actions → deploy.yml의 name에 등록한 이름 클릭 → Adding Github Action 클릭 → Rerun Jobs 클릭
-
다시 push하여 모니터링
-
추가적으로 Cloudflare → Build → Compute → Workers & Pages → View deployments 확인
4. Cloudflare 권한 발급
4.1. Cloudflare API Token 발급
- 프로필 아이콘 클릭 → Profile → API Tokens
- Create Token - Create Custom Token
- (Token name) 기능을 명확히 설명하는 명칭
- (Permissions) Account → Cloudflare Pages → Edit
- (Account Resources) Inside → Cloudflare Pages 관리계정
- Continue to summary 클릭 → Create Token 클릭
- …API token was successfully created.
4.2. Cloudflare Account ID 검색
- 로그인 후 계정 대시보드 접근
- 도메인 중간 32자리 영문숫자 조합