Github Action을 활용한 CI
wnaldj1589@gmail.com
1. CI가 뭐죠?
● Continuous Integration
● 개발자를 위한 자동화 프로세스
○ 새롭게 수정한 소프트웨어가 빌드가 되는지 자동으로 확인
■ 단순 컴파일 에러가 발생하는 경우
■ 새로운 라이브러리를 필요로 하는 경우
■ 라이브러리의 버전이 컴파일에 영향을 끼치는 경우
○ 새롭게 수정한 소프트웨어가 테스트를 통과하는지 자동으로 확인
■ 인터페이스가 삭제 혹은 변경된 경우
■ API의 로직이 변경되어 동일한 값을 반환하지 않는 경우
1. CI가 뭐죠?
● Continuous Integration
● github에 코드 푸시하면 미리 입력해놓은
빌드, 테스팅 스크립트를 실행시켜주면서
코드에 이상이 없나 확인해주는 도구
2. github action 은 뭐죠?
● Github에서 제공해주는 CI/CD 도구
Github Action 동작!
빌드, 테스트 실행, 슬랙 DM도 전송 가능
github action workflow 파일의 구성
● 어떤 이벤트를 모니터링 할 지
● 원하는 이벤트가 발생했을 때 무슨 작업을 할 지
이벤트 모니터링
● 대표적으로 push, pull_request
● master, develop 브랜치와 feat/ 으로 시작하는 브랜치들을 모니터링
https://docs.github.com/en/actions/reference/events-that-trigger-workflows
on:
push:
branches:
- master
- develop
- 'feat/**’
작업 목록
● 하고 싶은 모든 작업을 실행할 수 있음
● 빌드 후 테스트 steps:
- uses: actions/checkout@v2
- name: Build
run: |
cd src
go get
- name: Run test
run: |
cd cachelib; go test -failfast -v
cd ../dblib; go test -failfast -v
cd ../fetcher/tests; go test -timeout 1800s -v -failfast
cd ../../resolver/tests; go test -failfast -v
cd ../../manager/robot/tests; go test -failfast -v
cd ../../mission/tests; go test -failfast -v
너무 너무 간단한 Hands On Lab
github에 임시로 저장소를 만들어서 아래의 프로그램을
빌드, 실행 후 도커 이미지 빌드, 푸시하는 워크플로우 파일 작성해보기
#include <cassert>
int AlwaysSuccees()
{
return 0;
}
int main()
{
assert(AlwaysSuccees() == 1);
return 0;
}
FROM ubuntu:latest
WORKDIR /work
COPY . .
RUN apt update && 
apt install -y -qq gcc g++
RUN g++ main.cpp -o main
CMD [“./main”]
로컬환경에서 작업한다면
1. main.cpp 작성
a. Ctrl-C + Ctrl-V
2. 빌드
a. g++ main.cpp -o main
3. 실행
a. ./main
4. 도커 이미지 빌드
a. docker build --tag too-simple-hol .
5. 도커 이미지 푸시
a. docker push too-simple-hol:latest
github action으로 똑같은 작업을 하기 위해서는?
1. 레포지토리에 코드가 푸시될 때마다 빌드, 실행이 되어야 함
=> push 이벤트를 모니터링 해야 함
1. github action 에서 저장소의 코드에 접근 가능할 수 있어야 함
2. 빌드, 실행, 도커 이미지 빌드, 푸시 명령 전달할 수 있어야 함
name: CI // 워크플로우 이름. 무슨 값이든 상관 없
음
1. github action workflow 생성
name: CI // 워크플로우 이름. 무슨 값이든 상관 없
음
on: [push] // 모니터링 할 이벤트
2. push 이벤트 모니터링
name: CI // 워크플로우 이름. 무슨 값이든 상관 없
음
on: [push] // 모니터링 할 이벤트
jobs:
ci: // 워크플로우 안에서 실행되는 작업의 이름
runs-on: ubuntu-latest // 작업 환경 - 우분투
3. workflow 설정
name: CI // 워크플로우 이름. 무슨 값이든 상관 없
음
on: [push] // 모니터링 할 이벤트
jobs:
ci: // 워크플로우 안에서 실행되는 작업의 이름
runs-on: ubuntu-latest // 작업 환경 - 우분투
steps:
- uses: actions/checkout@v2 // 저장소에 접근할 수 있는 권한 부여
- name: Build // 세부 작업(1) "빌드" 생성
- name: Test // 세부 작업(2) "테스트" 생성
- name: Docker build // 세부 작업(3) "도커 이미지 빌드" 생성
3. 작업 세분화
name: CI // 워크플로우 이름. 무슨 값이든 상관 없
음
on: [push] // 모니터링 할 이벤트
jobs:
ci: // 워크플로우 안에서 실행되는 작업의 이름
runs-on: ubuntu-latest // 작업 환경 - 우분투
steps:
- uses: actions/checkout@v2 // 저장소에 접근할 수 있는 권한 부여
- name: Build // 세부 작업(1) "빌드" 생성
run: g++ main.cpp -o main
- name: Test // 세부 작업(2) "테스트" 생성
run: ./main
- name: Docker build // 세부 작업(3) "도커 이미지 빌드" 생성
run: docker build --tag too-simple-hol .
- name: Docker push // 세부 작업(4) "도커 이미지 푸시" 생성
run: |
docker build --tag too-simple-hol .
4. 실제 명령어 추가

More Related Content

PDF
GitHub Actions의 다양한 기능 활용하기 - GitHub Universe '24 Recap
PDF
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
PDF
github actions kubernetes 설치&운영하기
PDF
GIT_GETCHA_HANJUNG
PDF
DevOps - CI/CD 알아보기
PDF
GDGoC_Backend_GoServer_5주차 발표자료.pdf
PDF
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
PDF
제로부터시작하는Git
GitHub Actions의 다양한 기능 활용하기 - GitHub Universe '24 Recap
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
github actions kubernetes 설치&운영하기
GIT_GETCHA_HANJUNG
DevOps - CI/CD 알아보기
GDGoC_Backend_GoServer_5주차 발표자료.pdf
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
제로부터시작하는Git

Similar to 1. github action을 활용한 CI (20)

PDF
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
PDF
Git workflow
PDF
GDGoC_KHU_GoServer_week5_신건우,김도영.pdf
PDF
OSS SW Basics Lecture 08: Software Configuration Management (2)
PDF
[17.02.09] Github introduction (Korean Version)
PDF
Docker로 서버 개발 편하게 하기
PDF
GitHub 실습 교육
PPTX
GitLab과 Kubernetes를 통한 CI/CD 구축
PDF
Popular Convention 개발기
PDF
137 deview
PDF
[NDC16] Effective Git
PDF
CircleCI로 Serverless API의 CI/CD 환경 구축하기
PPTX
리스펙토링 세미나 - Git, Github 알아보기
PPTX
코드로 인프라 관리하기 - 자동화 툴 소개
PDF
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
PPTX
오픈소스GIS 개발 일반 강의자료
PPTX
PDF
DevOps와 함께 살펴보는 (해커톤의 성패를 좌우하는) 협업/개발 툴
PDF
소스트리(SourceTree)로 배우는 Git 사용법
PDF
제로부터시작하는 Git 두번째 이야기
내 주변 작업하기 좋은 카페 찾아주는 웹앱 "작업공간" - CI/CD
Git workflow
GDGoC_KHU_GoServer_week5_신건우,김도영.pdf
OSS SW Basics Lecture 08: Software Configuration Management (2)
[17.02.09] Github introduction (Korean Version)
Docker로 서버 개발 편하게 하기
GitHub 실습 교육
GitLab과 Kubernetes를 통한 CI/CD 구축
Popular Convention 개발기
137 deview
[NDC16] Effective Git
CircleCI로 Serverless API의 CI/CD 환경 구축하기
리스펙토링 세미나 - Git, Github 알아보기
코드로 인프라 관리하기 - 자동화 툴 소개
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
오픈소스GIS 개발 일반 강의자료
DevOps와 함께 살펴보는 (해커톤의 성패를 좌우하는) 협업/개발 툴
소스트리(SourceTree)로 배우는 Git 사용법
제로부터시작하는 Git 두번째 이야기
Ad

More from DEVELOPER.NET (11)

PPTX
EDA 맛보기 (Event Driven Architecture)
PPTX
[GDG 대전 IO Extended 22] 생산성 향상을 위한 원포인트툴_ Cloud Code
PPTX
0. CI_CD 툴에 대한 오해
PPTX
[GDG 대전] Flutter에 Firebase 한스푼 - GDG Flutter Festival
PPTX
[GDG 대전] 자율주행로봇 서버는 어떻게 구성되어 있나 - 주니어들 개발자들의 우당탕탕 서버 개발기
PPTX
2. aws 네트워크 (2)
PPTX
2. aws 네트워크 (1)
PPTX
2. aws 네트워크 (0)
PPTX
1. Docker Network (1)
PPTX
1. Docker Network (0)
PPTX
0. 네트워크 공부의 필요성
EDA 맛보기 (Event Driven Architecture)
[GDG 대전 IO Extended 22] 생산성 향상을 위한 원포인트툴_ Cloud Code
0. CI_CD 툴에 대한 오해
[GDG 대전] Flutter에 Firebase 한스푼 - GDG Flutter Festival
[GDG 대전] 자율주행로봇 서버는 어떻게 구성되어 있나 - 주니어들 개발자들의 우당탕탕 서버 개발기
2. aws 네트워크 (2)
2. aws 네트워크 (1)
2. aws 네트워크 (0)
1. Docker Network (1)
1. Docker Network (0)
0. 네트워크 공부의 필요성
Ad

1. github action을 활용한 CI

  • 2. 1. CI가 뭐죠? ● Continuous Integration ● 개발자를 위한 자동화 프로세스 ○ 새롭게 수정한 소프트웨어가 빌드가 되는지 자동으로 확인 ■ 단순 컴파일 에러가 발생하는 경우 ■ 새로운 라이브러리를 필요로 하는 경우 ■ 라이브러리의 버전이 컴파일에 영향을 끼치는 경우 ○ 새롭게 수정한 소프트웨어가 테스트를 통과하는지 자동으로 확인 ■ 인터페이스가 삭제 혹은 변경된 경우 ■ API의 로직이 변경되어 동일한 값을 반환하지 않는 경우
  • 3. 1. CI가 뭐죠? ● Continuous Integration ● github에 코드 푸시하면 미리 입력해놓은 빌드, 테스팅 스크립트를 실행시켜주면서 코드에 이상이 없나 확인해주는 도구
  • 4. 2. github action 은 뭐죠? ● Github에서 제공해주는 CI/CD 도구
  • 6. 빌드, 테스트 실행, 슬랙 DM도 전송 가능
  • 7. github action workflow 파일의 구성 ● 어떤 이벤트를 모니터링 할 지 ● 원하는 이벤트가 발생했을 때 무슨 작업을 할 지
  • 8. 이벤트 모니터링 ● 대표적으로 push, pull_request ● master, develop 브랜치와 feat/ 으로 시작하는 브랜치들을 모니터링 https://docs.github.com/en/actions/reference/events-that-trigger-workflows on: push: branches: - master - develop - 'feat/**’
  • 9. 작업 목록 ● 하고 싶은 모든 작업을 실행할 수 있음 ● 빌드 후 테스트 steps: - uses: actions/checkout@v2 - name: Build run: | cd src go get - name: Run test run: | cd cachelib; go test -failfast -v cd ../dblib; go test -failfast -v cd ../fetcher/tests; go test -timeout 1800s -v -failfast cd ../../resolver/tests; go test -failfast -v cd ../../manager/robot/tests; go test -failfast -v cd ../../mission/tests; go test -failfast -v
  • 10. 너무 너무 간단한 Hands On Lab github에 임시로 저장소를 만들어서 아래의 프로그램을 빌드, 실행 후 도커 이미지 빌드, 푸시하는 워크플로우 파일 작성해보기 #include <cassert> int AlwaysSuccees() { return 0; } int main() { assert(AlwaysSuccees() == 1); return 0; } FROM ubuntu:latest WORKDIR /work COPY . . RUN apt update && apt install -y -qq gcc g++ RUN g++ main.cpp -o main CMD [“./main”]
  • 11. 로컬환경에서 작업한다면 1. main.cpp 작성 a. Ctrl-C + Ctrl-V 2. 빌드 a. g++ main.cpp -o main 3. 실행 a. ./main 4. 도커 이미지 빌드 a. docker build --tag too-simple-hol . 5. 도커 이미지 푸시 a. docker push too-simple-hol:latest
  • 12. github action으로 똑같은 작업을 하기 위해서는? 1. 레포지토리에 코드가 푸시될 때마다 빌드, 실행이 되어야 함 => push 이벤트를 모니터링 해야 함 1. github action 에서 저장소의 코드에 접근 가능할 수 있어야 함 2. 빌드, 실행, 도커 이미지 빌드, 푸시 명령 전달할 수 있어야 함
  • 13. name: CI // 워크플로우 이름. 무슨 값이든 상관 없 음 1. github action workflow 생성
  • 14. name: CI // 워크플로우 이름. 무슨 값이든 상관 없 음 on: [push] // 모니터링 할 이벤트 2. push 이벤트 모니터링
  • 15. name: CI // 워크플로우 이름. 무슨 값이든 상관 없 음 on: [push] // 모니터링 할 이벤트 jobs: ci: // 워크플로우 안에서 실행되는 작업의 이름 runs-on: ubuntu-latest // 작업 환경 - 우분투 3. workflow 설정
  • 16. name: CI // 워크플로우 이름. 무슨 값이든 상관 없 음 on: [push] // 모니터링 할 이벤트 jobs: ci: // 워크플로우 안에서 실행되는 작업의 이름 runs-on: ubuntu-latest // 작업 환경 - 우분투 steps: - uses: actions/checkout@v2 // 저장소에 접근할 수 있는 권한 부여 - name: Build // 세부 작업(1) "빌드" 생성 - name: Test // 세부 작업(2) "테스트" 생성 - name: Docker build // 세부 작업(3) "도커 이미지 빌드" 생성 3. 작업 세분화
  • 17. name: CI // 워크플로우 이름. 무슨 값이든 상관 없 음 on: [push] // 모니터링 할 이벤트 jobs: ci: // 워크플로우 안에서 실행되는 작업의 이름 runs-on: ubuntu-latest // 작업 환경 - 우분투 steps: - uses: actions/checkout@v2 // 저장소에 접근할 수 있는 권한 부여 - name: Build // 세부 작업(1) "빌드" 생성 run: g++ main.cpp -o main - name: Test // 세부 작업(2) "테스트" 생성 run: ./main - name: Docker build // 세부 작업(3) "도커 이미지 빌드" 생성 run: docker build --tag too-simple-hol . - name: Docker push // 세부 작업(4) "도커 이미지 푸시" 생성 run: | docker build --tag too-simple-hol . 4. 실제 명령어 추가

Editor's Notes

  • #3: CI/CD 전체적인 그림을 말로 간단하게 설명
  • #4: CI/CD 전체적인 그림을 말로 간단하게 설명
  • #5: 젠킨스, travis, aws codepipeline 등 다양한 CI/CD 툴이 많습 짧은 시간이지만 지금까지 사용해보면서 느꼈던 github action의 가장 큰 장점은 단순함입니다. .github/workflows 폴더 안에 yaml 파일만 작성해주면 짜잔
  • #7: 특별한 형식의 쉘 스크립트를 작성한다고 보면 됨
  • #9: feat//