Skip to content

Commit

Permalink
feat(infra): 8주차 GitHub Actions 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
dotoleeoak committed Nov 17, 2023
1 parent 8557e6d commit bb8e25f
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 16 deletions.
2 changes: 2 additions & 0 deletions content/docs/infra/2. Express.js.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ Express.js의 다음 개념을 공부해봅니다.
- API 응답을 테스트해볼 때, [Postman](https://www.postman.com/)이나 [Hoppscotch](https://hoppscotch.io/) 같은 도구를 사용하는 걸 추천드립니다.
- 아래와 같은 endpoint들을 구현해보세요.

<!-- TODO: logging 추가 -->

### `GET /`

HTML 파일을 수정 없이 그대로 반환합니다. (assets/week2.html)
Expand Down
4 changes: 2 additions & 2 deletions content/docs/infra/7. Terraform.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
title = "7. Terraform"
description = "프로비저닝 도구인 Terraform에 대해 알아봅니다."
icon = "article"
date = "2023-09-11"
lastmod = "2023-10-05"
date = "2023-11-09"
lastmod = "2023-11-09"
weight = 370
+++

Expand Down
63 changes: 49 additions & 14 deletions content/docs/infra/8. GitHub Actions.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,77 @@
title = "8. GitHub Actions"
description = "CI/CD 도구인 GitHub Actions에 대해 알아봅니다."
icon = "article"
date = "2023-09-11"
lastmod = "2023-10-05"
date = "2023-11-16"
lastmod = "2023-11-16"
weight = 380
+++

여러 명의 개발자들이 협업하면 자연스럽게 서로의 코드를 합치는 작업이 빈번하게 일어나요. CI/CD는 코드를 합치는 merge 과정에서 코드에 문제가 없는지, 빌드는 잘 되는지 등을 자동으로 확인하고, 자동화된 배포를 진행하는 과정이예요. GitHub Actions는 이를 도와주는 도구로, 이번 주차에는 직접 YAML 파일을 작성하며 CI/CD를 구성해봐요.

## 공부할 내용 📚

### 1. GitHub Actions
### 1. YAML

<!-- TODO: YAML 내용 3주차로 옮기기 (docker-compose 배우기 전) -->

DevOps에서 자주 쓰이는 YAML 파일의 기본 문법을 배워봅니다.

#### 참고 자료

- **[쿠버네티스 안내서 "YAML 문법"](https://subicura.com/k8s/prepare/yaml.html)**: YAML의 기본 문법을 정리한 글입니다.

### 2. GitHub Actions

DevOps의 핵심인 CI/CD가 무엇인지 이해하고, GitHub Action을 이용해서 CI/CD를 구성하는 방법을 배워봅니다.

- CI/CD의 개념과 과정을 이해합니다.
- GitHub Actions를 사용하기 전, YAML 파일의 기본 문법을 이해합니다.
- GitHub Actions의 구성 요소를 알아봅니다. (workflows, events, jobs, actions, runners)
- GitHub Actions의 구성 요소를 알아봅니다. (workflows, events, jobs, actions)
- GitHub Actions의 문법을 이해하고 workflow를 직접 작성해봅니다.
- GitHub Action에서 secret을 관리하는 방법을 알아봅니다.
- AWS와 GitHub Action 사이의 OIDC(OpenID Connect) 인증 과정을 이해합니다.

#### 참고 자료

> TODO: 자료 추가
- **[CI/CD란 무엇일까?](https://jud00.tistory.com/entry/CICD%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C)**: CI/CD의 개념과 과정을 정리한 글입니다.
- **[Dalseo "GitHub Actions의 소개와 핵심 개념"](https://www.daleseo.com/github-actions-basics/)**: GitHub Actions의 개념과 구성 요소를 정리한 글입니다.
- **[Dalseo "GitHub Actions 첫 워크플로우 생성해보기"](https://www.daleseo.com/github-actions-first-workflow/)**: GitHub Actions의 workflow를 작성하는 방법을 정리한 글입니다.
- **["Secrets으로 환경변수 사용"](https://wooono.tistory.com/693)**: GitHub Actions에서 secret을 사용하는 방법을 정리한 글입니다.

## 프로젝트 실습 🎈

총 두 개의 workflow를 작성합니다.

### 1. `ci.yml`
{{< alert context="info" text="코드당 repository를 참고하면 도움이 될 거예요!<br>https://github.com/skkuding/codedang/tree/main/.github/workflows" />}}

### 1. ci.yml

- CodeQL을 이용해서 코드의 취약점을 검사해볼 거예요.
- `main` branch에 push되거나 Pull Request가 생성되었을 때 workflow를 실행해야 해요.
- workflow가 실행되면, CodeQL을 이용해서 JavaScript 코드의 취약점을 검사해요.
- 참고 자료: **["컨테이너에서 CodeQL 코드 검사 실행"](https://docs.github.com/ko/[email protected]/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/running-codeql-code-scanning-in-a-container)**

### 2. cd.yml

`main` branch에 push되었을 때 workflow를 실행해야 해요. 총 세 개의 job을 실행합니다.

#### Job 1: AWS S3 Sync

- HTML, CSS, JS 파일을 S3에 업로드해요.
- GitHub Actions에서 AWS에 접근할 수 있도록 IAM User를 만들어주세요.
- 이 플러그인으로 로그인 해주세요: [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials)
- **OpenID Connect를 이용해서 AWS에 로그인해야 해요. (중요!)**
- `aws s3 sync` 명령어를 이용해서 파일을 업로드해요.

> TODO: 자세한 내용 추가
#### Job 2: Update ECS

### 2. `cd.yml`
- 6주차 실습 내용대로 Node.js 이미지를 만들고, AWS ECR로 push합니다.
- Job 1과 마찬가지로 OpenID Connect를 이용해서 AWS에 로그인 해주세요.
- 이 플러그인으로 ECR에 로그인해주세요: [aws-actions/amazon-ecr-login](https://github.com/aws-actions/amazon-ecr-login)
- 이 플러그인으로 Docker를 빌드해주세요: [docker/build-push-action](https://github.com/docker/build-push-action)

Dockerfile을 이용해서 지난 주차의 Node.js 이미지를 build하고, ghcr.io로 push합니다.
(예: `ghcr.io/dotoleeoak/skkuding-infra:latest`)
#### Job 3: Terraform apply

아래 링크처럼 GitHub Container Registry에 이미지가 잘 올라갔는지 확인해보세요.
https://github.com/skkuding/codedang/pkgs/container/codedang-client-api
- Terraform 파일에 변경된 내용을 적용해요.
- Job 1, 2가 성공적으로 끝난 이후에 실행되어야 해요.
- Job 1, 2와 마찬가지로 OpenID Connect를 이용해서 AWS에 로그인 해주세요.
- **Terraform Backend로 S3를 사용하세요. (중요!)**
- 이 플러그인으로 Terraform을 실행해주세요: [hashicorp/setup-terraform](https://github.com/hashicorp/setup-terraform)

0 comments on commit bb8e25f

Please sign in to comment.