SlideShare a Scribd company logo
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 + Heroku + Circle CI 를 이용한 Django Application 배포 자동화
PDF
[17.02.09] Github introduction (Korean Version)
PDF
디자이너 버전관리
PDF
11. git basic
PDF
[201808] GitHub 사용하기 - GIt & 협업 활용
PDF
쌍용강북교육센터 수강생을 위한 Github
PDF
GitHub 실습 교육
PPTX
Continuous Integration
Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화
[17.02.09] Github introduction (Korean Version)
디자이너 버전관리
11. git basic
[201808] GitHub 사용하기 - GIt & 협업 활용
쌍용강북교육센터 수강생을 위한 Github
GitHub 실습 교육
Continuous Integration

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

PDF
140109 팀프로젝트 협업툴
PDF
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
PDF
깃허브 시작하기
PPTX
Git lecture1
PDF
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
PDF
필요해서 하는 개발 자동화
PDF
지속적인 통합
PPTX
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
PDF
[AIS 2018][Team Tools_Basic] Atlassian 제품 기반의 DevOps 구성 - 투씨드
PDF
알아두면 쓸모있는 깃허브 1
PDF
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
PDF
Git & Github Seminar-1
PDF
Git basic
PDF
제로부터시작하는 Git 두번째 이야기
PPTX
오픈소스가이드 win,c++
PDF
137 deview
PDF
Popular Convention 개발기
PDF
청강대 특강 - 프로젝트 제대로 해보기
PDF
ant로 안드로이드 앱을 자동으로 빌드하자
PDF
장고로 웹서비스 만들기 기초
140109 팀프로젝트 협업툴
[부스트캠프 Tech Talk] 이정현_Github Workflow 활용하기
깃허브 시작하기
Git lecture1
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
필요해서 하는 개발 자동화
지속적인 통합
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
[AIS 2018][Team Tools_Basic] Atlassian 제품 기반의 DevOps 구성 - 투씨드
알아두면 쓸모있는 깃허브 1
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
Git & Github Seminar-1
Git basic
제로부터시작하는 Git 두번째 이야기
오픈소스가이드 win,c++
137 deview
Popular Convention 개발기
청강대 특강 - 프로젝트 제대로 해보기
ant로 안드로이드 앱을 자동으로 빌드하자
장고로 웹서비스 만들기 기초
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

  • 1. Github Action을 활용한 CI wnaldj1589@gmail.com
  • 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//