-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8557e6d
commit bb8e25f
Showing
3 changed files
with
53 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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) |