SlideShare ist ein Scribd-Unternehmen logo
1 von 119
Downloaden Sie, um offline zu lesen
효율적인 개발 프로세스를 위한
지속적 통합
발표자 : 임홍렬
효율적인 개발 프로세스를 위한 지속적 통합
• 흔히 볼 수 있는 개발환경
– 사람이 다한다.
커밋 빌드 테스트 서버 가동
사람
효율적인 개발 프로세스를 위한 지속적 통합
• 이상적인 개발환경
– 커밋을 제외한 나머지는 자동화
커밋 빌드 테스트 서버 가동
사람 자동화
목차
1 지속적통합
2 Jenkins
3 CI Demo
4 질문
1 지속적통합
1 지속적통합
1 지속적통합이란?
2 빌드 자동화
3 테스트 자동화
4 배포 자동화
지속적통합이란?
1-1 지속적통합이란?
• 지속적통합(Continuous Integration, CI)
– 개발 프로세스에서 걸리는 시간을 줄이는데 초점
• ex) 소프트웨어의 품질 개선과 소프트웨어를 배포하는데 걸리는 시간
• ex) 작은 단위의 작업, 빈번한 적용
– 지속적으로 품질관리를 적용하는 프로세스 실행
• 모든 개발을 완료한 뒤에 품질관리를 적용하는 고전적인 방법을 대체
• 지속적인 품질관리로 인한 리스크 감소
– 팀의 구성원들이 작업한 내용을 정기적으로 통합
1-1 지속적통합이란?
• 지속적통합(Continuous Integration, CI)
– 개발 프로세스에서 걸리는 시간을 줄이는데 초점
• ex) 소프트웨어의 품질 개선과 소프트웨어를 배포하는데 걸리는 시간
• ex) 작은 단위의 작업, 빈번한 적용
– 지속적으로 품질관리를 적용하는 프로세스 실행
• 모든 개발을 완료한 뒤에 품질관리를 적용하는 고전적인 방법을 대체
• 지속적인 품질관리로 인한 리스크 감소
– 팀의 구성원들이 작업한 내용을 정기적으로 통합
1-1 지속적통합이란?
• 지속적통합(Continuous Integration, CI)
– 개발 프로세스에서 걸리는 시간을 줄이는데 초점
• ex) 소프트웨어의 품질 개선과 소프트웨어를 배포하는데 걸리는 시간
• ex) 작은 단위의 작업, 빈번한 적용
– 지속적으로 품질관리를 적용하는 프로세스 실행
• 모든 개발을 완료한 뒤에 품질관리를 적용하는 고전적인 방법을 대체
• 지속적인 품질관리로 인한 리스크 감소
– 팀의 구성원들이 작업한 내용을 정기적으로 통합
1-1 지속적통합이란?
• 지속적통합(Continuous Integration, CI)
– 개발 프로세스에서 걸리는 시간을 줄이는데 초점
• ex) 소프트웨어의 품질 개선과 소프트웨어를 배포하는데 걸리는 시간
• ex) 작은 단위의 작업, 빈번한 적용
– 지속적으로 품질관리를 적용하는 프로세스 실행
• 모든 개발을 완료한 뒤에 품질관리를 적용하는 고전적인 방법을 대체
• 지속적인 품질관리로 인한 리스크 감소
– 팀의 구성원들이 작업한 내용을 정기적으로 통합
커밋 빌드 자동화 테스트 자동화 배포 자동화
1-1 지속적통합이란?
• 지속적통합의 오해
– 구축이 어렵다.
– 규모가 있는 프로젝트에서만 한다.
빌드 자동화
1-2 빌드 자동화
• 빌드 자동화(Build automation)
– 개발자가 반복적으로 수행하는 다양한 작업의 자동화
• 빌드에 있어서, 반복적인 작업
– CPU에 따른 컴파일 옵션 재지정
– 때에 따른 Build Parameter
• gcc –o helloworld helloworld.c와 의미가 다르다.
– 이건 Build automation이 아니라, Build이다.
• 일반적인 의미로는 Visual Studio의 Build(F7)와도 의미가 다르다.
– 정확히는 Visual Studio의 Solution 또는 Project 설정에 따라 다름.
1-2 빌드 자동화
• 빌드 자동화(Build automation)
– 개발자가 반복적으로 수행하는 다양한 작업의 자동화
• 빌드에 있어서, 반복적인 작업
– CPU에 따른 컴파일 옵션 재지정
– 때에 따른 Build Parameter (ex. ‘gcc –O0’, ‘gcc –O1’, ‘gcc –O2’ …)
• gcc –o helloworld helloworld.c와 의미가 다르다.
– 이건 Build automation이 아니라, Build이다.
• 일반적인 의미로는 Visual Studio의 Build(F7)와도 의미가 다르다.
– 정확히는 Visual Studio의 Solution 또는 Project 설정에 따라 다름.
1-2 빌드 자동화
• 빌드 자동화(Build automation)
– 개발자가 반복적으로 수행하는 다양한 작업의 자동화
• 빌드에 있어서, 반복적인 작업
– CPU에 따른 컴파일 옵션 재지정
– 때에 따른 Build Parameter (ex. ‘gcc –O0’, ‘gcc –O1’, ‘gcc –O2’ …)
• gcc –o helloworld helloworld.c와 의미가 다르다.
– 이건 Build automation이 아니라, Build이다.
– 일반적인 의미로는 Visual Studio의 Build(F7)도 의미가 다르다.
» 정확히는 Visual Studio의 Solution 또는 Project 설정에 따라 다름.
1-2 빌드 자동화
• Build automation utility
– Make
– MSBuild
– Ant
– Gradle
– Etc...
테스트 자동화
1-3 테스트 자동화
• 테스팅(Testing)
– 결함 발견 & 결함 예방
• 특정 동작에 대한 실행 및 예측 결과와 실제 결과 비교
• 발견시 수정함으로써 SW의 품질 향상
– 서비스 중 발생할 수 있는 장애 감소
• 리스크 감소
1-3 테스트 자동화
• 테스팅(Testing)
– 결함 발견 & 결함 예방
• 특정 동작에 대한 실행 및 예측 결과와 실제 결과 비교
• 발견시 수정함으로써 SW의 품질 향상
– 서비스 중 발생할 수 있는 장애 감소
• 리스크 감소
1-3 테스트 자동화
• 테스팅의 중요성
– 테락-25 방사선치료기
• 1985~1987년까지 테락-25로 방사선 치료를 받은 환자 중 3명이 방사선
과다 피폭으로 사망, 3명이 방사선 후유증
• 원인
– 소프트웨어 결함 -> 8비트형 변수의 최대값을 넘는 연산을 실행하여 산술 넘침
(Arithmetic overflow) 발생
– “역사속의 시스템 오류”, 김종하 저
1-3 테스트 자동화
• 테스팅의 중요성
– 테락-25 방사선치료기
• 1985~1987년까지 테락-25로 방사선 치료를 받은 환자 중 3명이 방사선
과다 피폭으로 사망, 3명이 방사선 후유증
• 원인
– 소프트웨어 결함 -> 8비트형 변수의 최대값을 넘는 연산을 실행하여 산술 넘침
(Arithmetic overflow) 발생
– “역사속의 시스템 오류”, 김종하 저
1-3 테스트 자동화
• 테스팅의 중요성
– 248일마다 재부팅 해야하는 보잉787
• 보잉의 차세대 모델인 보잉787에서 여러 사건 사고 발생
• 항공기의 발전기가 연속해서 248일 이상 전원이 켜져 있을 경우, 소프트웨
어 버그로 인해 발전기 작동 중단
– 발전기 작동이 중단되면 비행에 필요한 전력을 생산할 수 없기 때문에 비행 중 추락
위험
– 왜 하필 248일?
• 원인
– 항공기 전원의 가동시간 카운터에 대한 버그
» 카운터 값을 저장하는 변수는 부호 있는 32비트 정수
» 변수가 담을 수 있는 최대값 : 2^31, 해당 값은 100ms 마다 1씩 증가
» (2^31)/(100*60*60*24) = 248.551348…
» 248.55일마다 변수에 Integer Overflow로 인한 소프트웨어 장애
» “역사속의 시스템 오류”, 김종하 저
1-3 테스트 자동화
• 테스팅의 중요성
– 248일마다 재부팅 해야하는 보잉787
• 보잉의 차세대 모델인 보잉787에서 여러 사건 사고 발생
• 항공기의 발전기가 연속해서 248일 이상 전원이 켜져 있을 경우, 소프트웨
어 버그로 인해 발전기 작동 중단
– 발전기 작동이 중단되면 비행에 필요한 전력을 생산할 수 없기 때문에 비행 중 추락
위험
– 왜 하필 248일?
• 원인
– 항공기 전원의 가동시간 카운터에 대한 버그
» 카운터 값을 저장하는 변수는 부호 있는 32비트 정수
» 변수가 담을 수 있는 최대값 : 2^31, 해당 값은 100ms 마다 1씩 증가
» (2^31-1)/(100*60*60*24) = 248.551348…
» 248.55일마다 변수에 Integer Overflow로 인한 소프트웨어 장애
» “역사속의 시스템 오류”, 김종하 저
1-3 테스트 자동화
• 테스팅과 디버깅
테스팅
•장애를 통해 결함을 발견
•테스터가 수행
디버깅
•장애 또는 결함의 원인을 찾고, 분석하여
제거하는 개발 활동
•개발자가 수행
1-3 테스트 자동화
• 테스팅 용어 : 테스트 케이스(Test Case)
– SW의 구체적인 요구사항과의 일치 여부를 확인하기 위한 묶음
– 실행 사전 조건, 기대 결과 등의 집합
ID 사전 조건 수행 순서 기대결과
P/F
(테스트 결과)
1
2개의 값이
입력되어
있지 않다
더하기 버튼을 눌러
더하기를 시도한다.
2개의 값을 입력하라
는 메시지를 출력한다.
2
2개의 값이
입력되어
있지 않다
빼기 버튼을 눌러
빼기를 시도한다.
2개의 값을 입력하라
는 메시지를 출력한다.
3
2개의 값이
입력 되어있다.
더하기 버튼을 눌러
더하기를 시도한다.
각각의 값을 더한 값
을 출력한다.
4
2개의 값이
입력 되어있다.
빼기 버튼을 눌러
빼기를 시도한다.
각각의 값을 뺀 값을
출력한다.
예시이며 표에 포함되는 내용은 달라 질 수 있다.
1-3 테스트 자동화
• 테스팅 용어 : 테스트 슈트(Test Suite)
– 테스트 케이스를 모아 놓은 집합이다.
• ex) Chrome의 로그인 프로세스 -> Test Suite
– ID, PW 입력 후 로그인 여부 -> Test Case
Test Suite
Test Case 1
Test Case 2
...
Test Case 3
1-3 테스트 자동화
• 테스팅 용어 : 테스트 플랜(Test plan)
– 테스트 슈트를 모아 놓은 집합이다.
• Chrome의 로그인 프로세스 (Test Suite #1)
• IE의 로그인 프로세스 (Test Suite #2)
Test PlanTest Suite
Test Case 1
Test Case 2
...
Test Case 3
Test Suite
Test Case 1
Test Case 2
...
Test Case 3
. . .
1-3 테스트 자동화
• 테스팅 용어 : 유닛 테스트(Unit Test)
– 소스코드의 특정 모듈이 의도한 대로 정확하게 작동하는지에 대
해 검증하는 절차.
– 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하
는 절차.
– 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악
및 수정 할 수 있도록 해준다.
1-3 테스트 자동화
• 테스팅 용어 : 유닛 테스트(Unit Test)
– 소스코드의 특정 모듈이 의도한 대로 정확하게 작동하는지에 대
해 검증하는 절차.
– 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하
는 절차.
– 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악
및 수정 할 수 있도록 해준다.
1-3 테스트 자동화
• 테스팅 용어 : 유닛 테스트(Unit Test)
– 소스코드의 특정 모듈이 의도한 대로 정확하게 작동하는지에 대
해 검증하는 절차.
– 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하
는 절차.
– 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악
및 수정 할 수 있도록 해준다.
1-3 테스트 자동화
• 테스팅 용어 : 코드 커버리지(Code Coverage)
– SW 테스트를 진행하였을 때 코드 자체가 얼마나 실행되었는지
를 나타낸다.
– 코드 커버리지의 종류에는 크게 3가지가 있다.
• 구문(Statement)
– 코드 한 줄이 한번 이상 실행된다면 충족
• 조건(Condition)
– 각 내부 조건이 참 / 거짓을 가지게 되면 충족
• 결정(Decision)
– 전체적인 결과가 참 / 거짓이면 충족
1-3 테스트 자동화
• 테스팅 용어 : 코드 커버리지(Code Coverage)
– SW 테스트를 진행하였을 때 코드 자체가 얼마나 실행되었는지
를 나타낸다.
– 코드 커버리지의 종류에는 크게 3가지가 있다.
• 구문(Statement)
– 코드 한 줄이 한번 이상 실행된다면 충족
• 조건(Condition)
– 각 내부 조건이 참 / 거짓을 가지게 되면 충족
• 결정(Decision)
– 전체적인 결과가 참 / 거짓이면 충족
1-3 테스트 자동화
• 테스팅 자동화(Test automation)
– 테스팅 자동화는 앞서 소개한 테스팅을 자동으로 하는 것.
• 수동 테스팅은 컴퓨터 앞에 앉아 있는 사람이 각 테스트 단계별로 실행하며
수행한다.
• 수동 테스팅은 사람이 하기 때문에 실수를 범하기 쉽다.
– 테스트 슈트(Test suite)를 실행하기 위해 자동화 툴을 사용
– 테스팅 자동화를 통하여 테스트에 걸리는 시간을 줄일 수 있다.
1-3 테스트 자동화
• 테스팅 자동화(Test automation)
– 테스팅 자동화는 앞서 소개한 테스팅을 자동으로 하는 것.
• 수동 테스팅은 컴퓨터 앞에 앉아 있는 사람이 각 테스트 단계별로 실행하며
수행한다.
• 수동 테스팅은 사람이 하기 때문에 실수를 범하기 쉽다.
– 테스트 슈트(Test suite)를 실행하기 위해 자동화 툴을 사용
– 테스팅 자동화를 통하여 테스트에 걸리는 시간을 줄일 수 있다.
1-3 테스트 자동화
• 테스팅 자동화(Test automation)
– 테스팅 자동화는 앞서 소개한 테스팅을 자동으로 하는 것.
• 수동 테스팅은 컴퓨터 앞에 앉아 있는 사람이 각 테스트 단계별로 실행하며
수행한다.
• 수동 테스팅은 사람이 하기 때문에 실수를 범하기 쉽다.
– 테스트 슈트(Test suite)를 실행하기 위해 자동화 툴을 사용
– 테스팅 자동화를 통하여 테스트에 걸리는 시간을 줄일 수 있다.
1-3 테스트 자동화
• 테스팅 자동화(Test automation) 접근법
– 일반적인 접근법
• GUI Testing
– 키 입력 및 마우스 클릭과 같은 UI 이벤트 생성 및 UI에서 발생하는 변경 사항을 관
찰하여 해당 동작이 올바른 지 검증
• API driven Testing
– 테스트 중인 동작을 확인하기 위해 SW의 Programming Interface(PI) 사용
» SW의 UI를 우회하며, 다양한 입력 변수를 테스트하고 반환된 결과를 검증할 수
있다.
1-3 테스트 자동화
• 테스팅 자동화(Test automation) 접근법
– 일반적인 접근법
• GUI Testing
– 키 입력 및 마우스 클릭과 같은 UI 이벤트 생성 및 UI에서 발생하는 변경 사항을 관
찰하여 해당 동작이 올바른 지 검증
• API driven Testing
– 테스트 중인 동작을 확인하기 위해 Application의 Programming Interface(API)
사용
» SW의 UI를 우회하며, 다양한 입력 변수를 테스트하고 반환된 결과를 검증할 수
있다.
배포 자동화
1-4 배포 자동화
• 배포 자동화(Deployment automation)
– 지속적 배포(Continuous Deployment, CD)으로도 불림
– 실제 서버에 SW를 자동으로 배포하는 것을 의미
– 배포 자동화로 인한 시간 단축
• 만약 수동으로 수십대의 서버에 배포 -> 시간, 인력 낭비 …
2 Jenkins
2 Jenkins
1 Jenkins란?
2 Jenkins 환경 구축
3 Jenkins Build History
Jenkins란?
2-1 Jenkins이란?
2-1 Jenkins이란?
•
– CI를 가능하게 하는 툴 중 하나.
• 지속적인 빌드 자동화
• 지속적인 테스트 자동화
• 지속적인 배포 자동화
– 이전에는 Hudson으로 불림
• Oracle과의 상표권 분쟁으로 Jenkins라는 이름으로 변경
– JAVA로 작성된 OpenSource 자동화 서버
– Servlet Container 기반
• Servlet은 Web에서의 Java Programming을 위해 탄생
• Servlet Container는 Servlet과 Web Server의 통신 제공
• 대표적으로 Apache Tomcat가 있다.
2-1 Jenkins이란?
•
– CI를 가능하게 하는 툴 중 하나.
• 지속적인 빌드 자동화
• 지속적인 테스트 자동화
• 지속적인 배포 자동화
– 이전에는 Hudson으로 불림
• Oracle과의 상표권 분쟁으로 Jenkins라는 이름으로 Fork
– JAVA로 작성된 OpenSource 자동화 서버
– Servlet Container 기반
• Servlet은 Web에서의 Java Programming을 위해 탄생
• Servlet Container는 Servlet과 Web Server의 통신 제공
• 대표적으로 Apache Tomcat가 있다.
2-1 Jenkins이란?
•
– CI를 가능하게 하는 툴 중 하나.
• 지속적인 빌드 자동화
• 지속적인 테스트 자동화
• 지속적인 배포 자동화
– 이전에는 Hudson으로 불림
• Oracle과의 상표권 분쟁으로 Jenkins라는 이름으로 Fork
– JAVA로 작성된 OpenSource 자동화 서버
– Servlet Container 기반
• Servlet은 Web에서의 Java Programming을 위해 탄생
• Servlet Container는 Servlet과 Web Server의 통신 제공
• 대표적으로 Apache Tomcat가 있다.
2-1 Jenkins이란?
•
– CI를 가능하게 하는 툴 중 하나.
• 지속적인 빌드 자동화
• 지속적인 테스트 자동화
• 지속적인 배포 자동화
– 이전에는 Hudson으로 불림
• Oracle과의 상표권 분쟁으로 Jenkins라는 이름으로 Fork
– JAVA로 작성된 OpenSource 자동화 서버
– Servlet Container 기반
• Servlet은 Web에서의 Java Programming을 위해 탄생
• Servlet Container는 Servlet과 Web Server의 통신 제공
• 대표적으로 Apache Tomcat가 있다.
2-1 Jenkins이란?
•
– 다양한 Plugin 제공
• Git, CVS, Subversion, ssh, Ant, Maven, Groovy, MSBuild …
– 시각적인 형태(UI) 또는 신규 기능 추가 기능
– Plugin을 통한 다양한 포맷의 자동화 보고서 생성 가능
– ETC…
Jenkins 환경 구축
2-2 Jenkins 환경 구축
• 설치
– https://jenkins.io/ 접속
2-2 Jenkins 환경 구축
• 설치
– 설치는 크게 두가지로 나눌 수 있다.
• WAR(Web Application Archive) 파일을 이용한 설치
– JDK와 JRE가 설치되어 있어야 한다.
– WAR파일을 단독으로 직접 실행하거나 Servlet Container(Apache Tomcat,
Jetty, ETC…) 에서 실행을 하여야 한다.
» Jenkins 단독 실행 시, Jetty를 사용한다. (https://wiki.jenkins-ci.org/display/JENKINS/Containers)
• 패키지 관리자인 Yum, APT 등을 이용한 설치 또는 Installer
– Windows와 Mac OS
– Servlet Container에서 가동이 아닌 Jenkins를 단독 실행하는 것과 다름 없다.
– 만약 가동중인 Web Server가 있다면 포트가 겹치지 않도록 해야한다.
2-2 Jenkins 환경 구축
• 설치
– 설치는 크게 두가지로 나눌 수 있다.
• WAR(Web Application Archive) 파일을 이용한 설치
– JDK와 JRE가 설치되어 있어야 한다.
– WAR파일을 단독으로 직접 실행하거나 Servlet Container(Apache Tomcat,
Jetty, ETC…) 에서 실행을 하여야 한다.
» Jenkins 단독 실행 시, Jetty를 사용한다. (https://wiki.jenkins-ci.org/display/JENKINS/Containers)
• 패키지 관리자인 Yum, APT 등을 이용한 설치 또는 Installer
– Windows와 Mac OS
– Servlet Container에서 가동이 아닌 Jenkins를 단독 실행하는 것과 다름 없다.
– 만약 가동중인 Web Server가 있다면 포트가 겹치지 않도록 해야한다.
2-2 Jenkins 환경 구축
• 설치
– 강의에 사용한 환경은 다음과 같다.
– Odroid U2
• 1.7GHz Exynos4412 Prime Cortex-
A9 Quad-core processor with PoP
(Package on Package) 2Gbyte
LPDDR2 880Mega Data Rate
– OS : Ubuntu Server 14.04 LTS
– Linux Kernel : 3.8.13.30
– APT를 이용한 Jenkins 설치.
2-2 Jenkins 환경 구축
• 설치
– 패키지 관리자를 통한 설치
– https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu
• wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo
apt-key add –
• sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ >
/etc/apt/sources.list.d/jenkins.list‘
• sudo apt-get update
• sudo apt-get install jenkins
2-2 Jenkins 환경 구축
• 초기 설정
– 설치 완료 후 http://IP:JenkinsPORT 첫 접속 시 화면
2-2 Jenkins 환경 구축
• 초기 설정
– 기다리면 화면이 바뀌는데, Jenkins 설치를 위해 Unlock을 한다.
2-2 Jenkins 환경 구축
• 초기 설정
– Unlock을 위해 root계정으로 해당 경로 파일의 내용 입력
2-2 Jenkins 환경 구축
• 초기 설정
– Unlock을 위해 root계정으로 해당 경로 파일의 내용 입력
2-2 Jenkins 환경 구축
• 초기 설정
– 입력 후 설치를 진행하기 위해 Continue 클릭
2-2 Jenkins 환경 구축
• 초기 설정
– 로딩
2-2 Jenkins 환경 구축
• 초기 설정
– 입력 후 설치를 진행하기 위해 Continue 클릭
2-2 Jenkins 환경 구축
• 초기 설정
– Jenkins 초기 설정 시 Plugin Customize가 가능하다.
• Plugin은 초기 설정 이후에도 설치 가능
2-2 Jenkins 환경 구축
• 초기 설정
– 강의에서는 Install suggested plugins 으로 진행.
2-2 Jenkins 환경 구축
• 초기 설정
– 설정된 Plugin을 설치하는 것을 볼 수 있다.
2-2 Jenkins 환경 구축
• 초기 설정
– Admin 계정 설정
2-2 Jenkins 환경 구축
• 초기 설정
– Admin 계정 설정 후 Save and Finish 클릭
2-2 Jenkins 환경 구축
• 초기 설정
– 초기 설정 완료 및 Start using Jenkins 클릭
2-2 Jenkins 환경 구축
• Dashboard
– Welcome to Jenkins!
2-2 Jenkins 환경 구축
• Plugin 추가
– Dashboard에서 Jenkins 관리를 클릭한다.
2-2 Jenkins 환경 구축
• Plugin 추가
– Jenkins 관리에서 플러그인 관리를 클릭한다.
2-2 Jenkins 환경 구축
• Plugin 추가
– 플러그인 관리에서 설치가능을 클릭한다.
2-2 Jenkins 환경 구축
• Plugin 추가
– 설치하고자 하는 Plugin을 선택 후 재시작 없이 설치하기 또는
지금 다운로드하고 재시작 후 설치하기를 클릭한다.
2-2 Jenkins 환경 구축
• Item 추가
– Dashboard에서 새로운 Item(Job)을 클릭한다.
2-2 Jenkins 환경 구축
• Item 추가
– Job(Item)의 종류를 선택한다.
2-2 Jenkins 환경 구축
• Job
– Freestyle Project
• 간단한 빌드 & 배포 프로젝트에
용이.
– Pipeline
• 빌드 & 테스트 & 배포 등 여러
작업의 흐름(Workflow)가 필요
할 경우에 용이.
– ETC
• …
2-2 Jenkins 환경 구축
• Item
– Freestyle Project
• 일반적인 Jenkins Project.
– Pipeline
• 여러 작업의 흐름(Workflow)가
필요할 경우에 용이.
– ETC
• …
– 강의는 Freestyle Project로 진행합니다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 설정하는 것은 크게 4가지
• 소스 코드 관리
• 빌드 유발
• Build
• 빌드 후 조치
2-2 Jenkins 환경 구축
• Freestyle Project
– 소스 코드 관리
• Jenkins의 소스 코드 관리 Plugin에 추가된 목록이다.
• 해당 Jenkins Freestyle Project에서 사용할 플러그인을 선택한다.
• 강의에서는 Git으로 진행하도록 하겠다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 소스 코드 관리 (Git)
• 해당 Git의 Repository URL과 계정을 추가하며, 특정 Branch명을 기입한
다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 소스 코드 관리 (Git)
• 필요시 해당 Git의 Repository 확인 및 사용을 위해 계정을 등록 할 수도 있
다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 소스 코드 관리 (Git)
• 필요시 해당 Git의 Repository 확인 및 사용을 위해 계정을 등록 할 수도 있
다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 유발
• 빌드를 원격으로 유발
• 다른 프로젝트 완료 시 유발
• 정기적으로 빌드를 유발
• 직접 SCM(Source Code Management)에 Push가 될 경우 가져온다.
• 강의에서는 Poll SCM으로 진행한다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 유발 (Poll SCM)
• SCM의 Push 확인을 위해 Schedule를 등록한다.
– 이때의 Schedule는 다음과 같은 규칙으로 작성한다.
» MINUTE HOUR DOM MONTH DOW
• MINUTE Minutes within the hour (0–59)
• HOUR The hour of the day (0–23)
• DOM The day of the month (1–31)
• MONTH The month (1–12)
• DOW The day of the week (0–7) where 0 and 7 are Sunday.
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 유발 (Poll SCM) Schedule 예시
• # every fifteen minutes (perhaps at :07, :22, :37, :52)
– H/15 * * * *
• # every ten minutes in the first half of every hour (three times,
perhaps at :04, :14, :24)
– H(0-29)/10 * * * *
• # once every two hours at 45 minutes past the hour starting at 9:45
AM and finishing at 3:45 PM every weekday.
– 45 9-16/2 * * 1-5
• # once in every two hours slot between 9 AM and 5 PM every
weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM)
– H H(9-16)/2 * * 1-5
• # once a day on the 1st and 15th of every month except December
– H H 1,15 1-11 *
2-2 Jenkins 환경 구축
• Freestyle Project
– Build
• Build를 유발하기 위해, 다양한 Build Step를 작성 할 수 있다.
2-2 Jenkins 환경 구축
• Freestyle Project
– Build
• Build Step를 이용, 테스트 작업도 추가할 수 있다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치
• 테스트 결과 및 다른 프로젝트 빌드 등을 할 수 있다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : 테스트 결과
• 다음과 같이 해당 Job 메인 화면에서 테스트 결과도 볼 수 있다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치
• Build Step의 SSH을 이용하여, 배포 작업도 추가할 수 있다.
• SSH 추가를 위해, Jenkins 관리에 들어간다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : SSH을 이용한 배포 작업 추가
• Jenkins 관리에서 시스템 설정에 들어간다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : SSH을 이용한 배포 작업 추가
• Jenkins 관리에서 시스템 설정에 들어간다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : SSH을 이용한 배포 작업 추가
• 시스템 설정 하단에 있는 Publish over SSH의 SSH Server 추가 버튼 클릭
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : SSH을 이용한 배포 작업 추가
• 시스템 설정 하단에 있는 Publish over SSH의 SSH Server 추가 버튼 클릭
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : SSH을 이용한 배포 작업 추가
• 해당 SSH Server의 정보를 입력하고 제일 하단의 저장을 클릭한다.
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : SSH을 이용한 배포 작업 추가
• 해당 SSH Server의 정보를 입력하고 추가를 클릭한다.
예시
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : SSH을 이용한 배포 작업 추가
• 해당 SSH Server의 정보를 입력하고 추가를 클릭한다.
예시
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : SSH을 이용한 배포 작업 추가
• 해당 SSH Server의 정보를 입력하고 추가를 클릭한다.
예시
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : SSH을 이용한 배포 작업 추가
• 배포작업을 추가할 해당 Freestyle Project로 돌아와서 추가한다.
– 빌드 후 조치 추가 버튼 클릭 시 나타나는 Send Build artifacts over SSH
2-2 Jenkins 환경 구축
• Freestyle Project
– 빌드 후 조치 : SSH을 이용한 배포 작업 추가
• Send Build artifacts over SSH 설정
2-2 Jenkins 환경 구축
• Freestyle Project
– Send Build artifacts over SSH 설정
• SSH Server Name : Jenkins 설정에서 등록한 SSH 서버 중 배포 서버 선택
• Source Files : 어떠한 파일을 배포할지 설정.
– ex) **/*.jar은 모든 폴더의 jar로 끝나는 파일을 의미
• Remove prefix 제거할 접두사 의미.
– ex) Hello/World 입력 시 : /Hello/World/Jenkins/test.jar -> /Jenkins/test.jar
• Remove directory : Jenkins 설정에서 등록한 SSH의 Remote Directory
• 뒤로 추가로 입력되는 디렉토리.
– 주의사항 : 해당 디렉토리가 없을 경우 추가해 주지 않기 때문에 추가해주어야함.
• Exec command : 배포 후 실행 할 명령어 입력.
Jenkins Build History
2-3 Jenkins Build History
• Job Main
– Build History 란은 왼쪽 하단에서 볼 수 있다.
2-3 Jenkins Build History
• Build History
– 특정 빌드를 클릭 시 해당 빌드의 내용을 알 수 있다.
3 CI Demo
3 CI Demo
• Jenkins Job Info
– Project 개발 언어 : Node.js
– 사용한 Jenkins Plugin
• Cobertura Plugin
– 코드 커버리지 관련 Plugin
• SSH Agent Plugin
– SSH 관련 Plugin
• SSH plugin
– SSH 관련 Plugin
3 CI Demo
• Jenkins Job Setting Info
3 CI Demo
• Jenkins Job Setting Info
3 CI Demo
• Jenkins Job Setting Info
3 CI Demo
• Jenkins Job Setting Info
3 CI Demo
• Jenkins Job Setting Info
3 CI Demo
• Jenkins Job Setting Info
– destory.sh
#!/bin/bash
sudo forever-service delete simple-server
sudo rm -rf /home/test/Simple-Server
3 CI Demo
• Jenkins Job Setting Info
3 CI Demo
• Jenkins Job Setting Info
3 CI Demo
• Jenkins Job Setting Info
3 CI Demo
• Jenkins Job Setting Info
– init.sh
#!/bin/bash
sudo forever-service delete simple-server
sudo rm -rf /home/test/Simple-Server
expect <<- EOF
spawn bash -c "git clone https://kukudas.visualstudio.com/Hello%20Jenkins/_git/Simple-Server
/home/test/Simple-Server";
expect -re "Username for"
send "team.kukudas@gmail.comr"
expect -re "Password for"
send “PASSWORDr"
expect -re "Checking connectivity... done."
expect eof
EOF
npm install --prefix /home/test/Simple-Server/Simple-Server
sudo forever-service install simple-server --script /home/test/Simple-Server/Simple-Server/app.js
sudo service simple-server start
3 CI Demo
• DEMO
4 질문
감사합니다.

Weitere ähnliche Inhalte

Was ist angesagt?

[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템강 민우
 
솔루션 구축 사례를 통해 본 SW아키텍처
솔루션 구축 사례를 통해 본 SW아키텍처솔루션 구축 사례를 통해 본 SW아키텍처
솔루션 구축 사례를 통해 본 SW아키텍처Lim SungHyun
 
HPE 솔루션과 함께하는 모바일 앱 테스팅 방안 소개
HPE 솔루션과 함께하는 모바일 앱 테스팅 방안 소개HPE 솔루션과 함께하는 모바일 앱 테스팅 방안 소개
HPE 솔루션과 함께하는 모바일 앱 테스팅 방안 소개Ki Bae Kim
 
모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016Jongwon Kim
 
(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구Lim SungHyun
 
Advanced nGrinder
Advanced nGrinderAdvanced nGrinder
Advanced nGrinderJunHo Yoon
 
practical perf testing - d2startup
practical perf testing - d2startuppractical perf testing - d2startup
practical perf testing - d2startupJunHo Yoon
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 aChoonghyun Yang
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
NDC 2013 Monkeyrunner를 이용한 모바일 테스트 자동화
NDC 2013 Monkeyrunner를 이용한 모바일 테스트 자동화NDC 2013 Monkeyrunner를 이용한 모바일 테스트 자동화
NDC 2013 Monkeyrunner를 이용한 모바일 테스트 자동화ByungJoon Lee
 
Rapid Development
Rapid DevelopmentRapid Development
Rapid Development기룡 남
 
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우IMQA
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 SangIn Choung
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Jaehoon Oh
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2tobeware
 
116 deview2013-guitar
116 deview2013-guitar116 deview2013-guitar
116 deview2013-guitarNAVER D2
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) YoungSu Son
 
SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델KU HUISEONG
 
2010 SW Testing Trend
2010 SW Testing Trend2010 SW Testing Trend
2010 SW Testing TrendMurian Song
 

Was ist angesagt? (20)

[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
[IGC 2016] 엔씨소프트 김종원 - 모바일 테스트 자동화 시스템
 
솔루션 구축 사례를 통해 본 SW아키텍처
솔루션 구축 사례를 통해 본 SW아키텍처솔루션 구축 사례를 통해 본 SW아키텍처
솔루션 구축 사례를 통해 본 SW아키텍처
 
HPE 솔루션과 함께하는 모바일 앱 테스팅 방안 소개
HPE 솔루션과 함께하는 모바일 앱 테스팅 방안 소개HPE 솔루션과 함께하는 모바일 앱 테스팅 방안 소개
HPE 솔루션과 함께하는 모바일 앱 테스팅 방안 소개
 
모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016모바일 게임 테스트 자동화 Igc 2016
모바일 게임 테스트 자동화 Igc 2016
 
(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구(SW 아키텍트 대회 2차)단위테스트자동화도구
(SW 아키텍트 대회 2차)단위테스트자동화도구
 
Advanced nGrinder
Advanced nGrinderAdvanced nGrinder
Advanced nGrinder
 
practical perf testing - d2startup
practical perf testing - d2startuppractical perf testing - d2startup
practical perf testing - d2startup
 
아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
NDC 2013 Monkeyrunner를 이용한 모바일 테스트 자동화
NDC 2013 Monkeyrunner를 이용한 모바일 테스트 자동화NDC 2013 Monkeyrunner를 이용한 모바일 테스트 자동화
NDC 2013 Monkeyrunner를 이용한 모바일 테스트 자동화
 
Rapid Development
Rapid DevelopmentRapid Development
Rapid Development
 
JMeter
JMeterJMeter
JMeter
 
웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우웹서버 부하테스트 실전 노하우
웹서버 부하테스트 실전 노하우
 
우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료 우리 제품의 검증 프로세스 소개 자료
우리 제품의 검증 프로세스 소개 자료
 
Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화Robot framework 을 이용한 기능 테스트 자동화
Robot framework 을 이용한 기능 테스트 자동화
 
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
투비웨어 AgitarOne Junit 단위테스트자동화 솔루션소개_201608_v1.2
 
116 deview2013-guitar
116 deview2013-guitar116 deview2013-guitar
116 deview2013-guitar
 
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심) DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
DevOps 오픈소스 트랜드 (클라우드, 모바일 중심)
 
SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델SW 테스트 프로세스& 메뉴얼_V 모델
SW 테스트 프로세스& 메뉴얼_V 모델
 
2010 SW Testing Trend
2010 SW Testing Trend2010 SW Testing Trend
2010 SW Testing Trend
 

Ähnlich wie 효율적인 개발 프로세스를 위한 지속적 통합

단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종guest7178884
 
Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임Lim SungHyun
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)SangIn Choung
 
[IMQA] performance consulting
[IMQA] performance consulting[IMQA] performance consulting
[IMQA] performance consultingIMQA
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
Build Team Foundation Architecture
Build Team Foundation ArchitectureBuild Team Foundation Architecture
Build Team Foundation Architecture준일 엄
 
[오픈소스컨설팅]소프트웨어테스팅전략
[오픈소스컨설팅]소프트웨어테스팅전략[오픈소스컨설팅]소프트웨어테스팅전략
[오픈소스컨설팅]소프트웨어테스팅전략Ji-Woong Choi
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDDSunghyouk Bae
 
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin KimAWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin KimAmazon Web Services Korea
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션SangIn Choung
 
ParameterizedTest 와 ContextCaching.pptx
ParameterizedTest 와 ContextCaching.pptxParameterizedTest 와 ContextCaching.pptx
ParameterizedTest 와 ContextCaching.pptxjunu6
 
Istqb 2-소프트웨어수명주기와테스팅-2015
Istqb 2-소프트웨어수명주기와테스팅-2015Istqb 2-소프트웨어수명주기와테스팅-2015
Istqb 2-소프트웨어수명주기와테스팅-2015Jongwon Lee
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance TuningJi-Woong Choi
 
모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)Jongwon Kim
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면Byeongsu Kang
 
개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2Daniel Lim
 
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질테스트 케이스와 SW 품질
테스트 케이스와 SW 품질도형 임
 

Ähnlich wie 효율적인 개발 프로세스를 위한 지속적 통합 (20)

단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종단위테스트자동화지원도구 임성현 최종
단위테스트자동화지원도구 임성현 최종
 
Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임Tr#3 5) 임성현 책임
Tr#3 5) 임성현 책임
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
애자일과 애자일 테스트 소개 (테스트기본교육 3장 2절)
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
[IMQA] performance consulting
[IMQA] performance consulting[IMQA] performance consulting
[IMQA] performance consulting
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
Build Team Foundation Architecture
Build Team Foundation ArchitectureBuild Team Foundation Architecture
Build Team Foundation Architecture
 
[오픈소스컨설팅]소프트웨어테스팅전략
[오픈소스컨설팅]소프트웨어테스팅전략[오픈소스컨설팅]소프트웨어테스팅전략
[오픈소스컨설팅]소프트웨어테스팅전략
 
테스트자동화와 TDD
테스트자동화와 TDD테스트자동화와 TDD
테스트자동화와 TDD
 
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin KimAWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
AWS Innovate: Mobile App testing with AWS Device Farm- Kevin Kim
 
테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션테스트수행사례 W통합보안솔루션
테스트수행사례 W통합보안솔루션
 
ParameterizedTest 와 ContextCaching.pptx
ParameterizedTest 와 ContextCaching.pptxParameterizedTest 와 ContextCaching.pptx
ParameterizedTest 와 ContextCaching.pptx
 
Istqb 2-소프트웨어수명주기와테스팅-2015
Istqb 2-소프트웨어수명주기와테스팅-2015Istqb 2-소프트웨어수명주기와테스팅-2015
Istqb 2-소프트웨어수명주기와테스팅-2015
 
[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning[오픈소스컨설팅]Java Performance Tuning
[오픈소스컨설팅]Java Performance Tuning
 
모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)모바일 게임 테스트 자동화 (Appium 확장)
모바일 게임 테스트 자동화 (Appium 확장)
 
멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면멸종하는 공룡이 되지 않으려면
멸종하는 공룡이 되지 않으려면
 
개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2개발 생산성 향상 기법 V1.2
개발 생산성 향상 기법 V1.2
 
테스트 케이스와 SW 품질
테스트 케이스와 SW 품질테스트 케이스와 SW 품질
테스트 케이스와 SW 품질
 
Aws로 ci하기 안기욱
Aws로 ci하기 안기욱Aws로 ci하기 안기욱
Aws로 ci하기 안기욱
 

효율적인 개발 프로세스를 위한 지속적 통합

  • 1. 효율적인 개발 프로세스를 위한 지속적 통합 발표자 : 임홍렬
  • 2. 효율적인 개발 프로세스를 위한 지속적 통합 • 흔히 볼 수 있는 개발환경 – 사람이 다한다. 커밋 빌드 테스트 서버 가동 사람
  • 3. 효율적인 개발 프로세스를 위한 지속적 통합 • 이상적인 개발환경 – 커밋을 제외한 나머지는 자동화 커밋 빌드 테스트 서버 가동 사람 자동화
  • 6. 1 지속적통합 1 지속적통합이란? 2 빌드 자동화 3 테스트 자동화 4 배포 자동화
  • 8. 1-1 지속적통합이란? • 지속적통합(Continuous Integration, CI) – 개발 프로세스에서 걸리는 시간을 줄이는데 초점 • ex) 소프트웨어의 품질 개선과 소프트웨어를 배포하는데 걸리는 시간 • ex) 작은 단위의 작업, 빈번한 적용 – 지속적으로 품질관리를 적용하는 프로세스 실행 • 모든 개발을 완료한 뒤에 품질관리를 적용하는 고전적인 방법을 대체 • 지속적인 품질관리로 인한 리스크 감소 – 팀의 구성원들이 작업한 내용을 정기적으로 통합
  • 9. 1-1 지속적통합이란? • 지속적통합(Continuous Integration, CI) – 개발 프로세스에서 걸리는 시간을 줄이는데 초점 • ex) 소프트웨어의 품질 개선과 소프트웨어를 배포하는데 걸리는 시간 • ex) 작은 단위의 작업, 빈번한 적용 – 지속적으로 품질관리를 적용하는 프로세스 실행 • 모든 개발을 완료한 뒤에 품질관리를 적용하는 고전적인 방법을 대체 • 지속적인 품질관리로 인한 리스크 감소 – 팀의 구성원들이 작업한 내용을 정기적으로 통합
  • 10. 1-1 지속적통합이란? • 지속적통합(Continuous Integration, CI) – 개발 프로세스에서 걸리는 시간을 줄이는데 초점 • ex) 소프트웨어의 품질 개선과 소프트웨어를 배포하는데 걸리는 시간 • ex) 작은 단위의 작업, 빈번한 적용 – 지속적으로 품질관리를 적용하는 프로세스 실행 • 모든 개발을 완료한 뒤에 품질관리를 적용하는 고전적인 방법을 대체 • 지속적인 품질관리로 인한 리스크 감소 – 팀의 구성원들이 작업한 내용을 정기적으로 통합
  • 11. 1-1 지속적통합이란? • 지속적통합(Continuous Integration, CI) – 개발 프로세스에서 걸리는 시간을 줄이는데 초점 • ex) 소프트웨어의 품질 개선과 소프트웨어를 배포하는데 걸리는 시간 • ex) 작은 단위의 작업, 빈번한 적용 – 지속적으로 품질관리를 적용하는 프로세스 실행 • 모든 개발을 완료한 뒤에 품질관리를 적용하는 고전적인 방법을 대체 • 지속적인 품질관리로 인한 리스크 감소 – 팀의 구성원들이 작업한 내용을 정기적으로 통합 커밋 빌드 자동화 테스트 자동화 배포 자동화
  • 12. 1-1 지속적통합이란? • 지속적통합의 오해 – 구축이 어렵다. – 규모가 있는 프로젝트에서만 한다.
  • 14. 1-2 빌드 자동화 • 빌드 자동화(Build automation) – 개발자가 반복적으로 수행하는 다양한 작업의 자동화 • 빌드에 있어서, 반복적인 작업 – CPU에 따른 컴파일 옵션 재지정 – 때에 따른 Build Parameter • gcc –o helloworld helloworld.c와 의미가 다르다. – 이건 Build automation이 아니라, Build이다. • 일반적인 의미로는 Visual Studio의 Build(F7)와도 의미가 다르다. – 정확히는 Visual Studio의 Solution 또는 Project 설정에 따라 다름.
  • 15. 1-2 빌드 자동화 • 빌드 자동화(Build automation) – 개발자가 반복적으로 수행하는 다양한 작업의 자동화 • 빌드에 있어서, 반복적인 작업 – CPU에 따른 컴파일 옵션 재지정 – 때에 따른 Build Parameter (ex. ‘gcc –O0’, ‘gcc –O1’, ‘gcc –O2’ …) • gcc –o helloworld helloworld.c와 의미가 다르다. – 이건 Build automation이 아니라, Build이다. • 일반적인 의미로는 Visual Studio의 Build(F7)와도 의미가 다르다. – 정확히는 Visual Studio의 Solution 또는 Project 설정에 따라 다름.
  • 16. 1-2 빌드 자동화 • 빌드 자동화(Build automation) – 개발자가 반복적으로 수행하는 다양한 작업의 자동화 • 빌드에 있어서, 반복적인 작업 – CPU에 따른 컴파일 옵션 재지정 – 때에 따른 Build Parameter (ex. ‘gcc –O0’, ‘gcc –O1’, ‘gcc –O2’ …) • gcc –o helloworld helloworld.c와 의미가 다르다. – 이건 Build automation이 아니라, Build이다. – 일반적인 의미로는 Visual Studio의 Build(F7)도 의미가 다르다. » 정확히는 Visual Studio의 Solution 또는 Project 설정에 따라 다름.
  • 17. 1-2 빌드 자동화 • Build automation utility – Make – MSBuild – Ant – Gradle – Etc...
  • 19. 1-3 테스트 자동화 • 테스팅(Testing) – 결함 발견 & 결함 예방 • 특정 동작에 대한 실행 및 예측 결과와 실제 결과 비교 • 발견시 수정함으로써 SW의 품질 향상 – 서비스 중 발생할 수 있는 장애 감소 • 리스크 감소
  • 20. 1-3 테스트 자동화 • 테스팅(Testing) – 결함 발견 & 결함 예방 • 특정 동작에 대한 실행 및 예측 결과와 실제 결과 비교 • 발견시 수정함으로써 SW의 품질 향상 – 서비스 중 발생할 수 있는 장애 감소 • 리스크 감소
  • 21. 1-3 테스트 자동화 • 테스팅의 중요성 – 테락-25 방사선치료기 • 1985~1987년까지 테락-25로 방사선 치료를 받은 환자 중 3명이 방사선 과다 피폭으로 사망, 3명이 방사선 후유증 • 원인 – 소프트웨어 결함 -> 8비트형 변수의 최대값을 넘는 연산을 실행하여 산술 넘침 (Arithmetic overflow) 발생 – “역사속의 시스템 오류”, 김종하 저
  • 22. 1-3 테스트 자동화 • 테스팅의 중요성 – 테락-25 방사선치료기 • 1985~1987년까지 테락-25로 방사선 치료를 받은 환자 중 3명이 방사선 과다 피폭으로 사망, 3명이 방사선 후유증 • 원인 – 소프트웨어 결함 -> 8비트형 변수의 최대값을 넘는 연산을 실행하여 산술 넘침 (Arithmetic overflow) 발생 – “역사속의 시스템 오류”, 김종하 저
  • 23. 1-3 테스트 자동화 • 테스팅의 중요성 – 248일마다 재부팅 해야하는 보잉787 • 보잉의 차세대 모델인 보잉787에서 여러 사건 사고 발생 • 항공기의 발전기가 연속해서 248일 이상 전원이 켜져 있을 경우, 소프트웨 어 버그로 인해 발전기 작동 중단 – 발전기 작동이 중단되면 비행에 필요한 전력을 생산할 수 없기 때문에 비행 중 추락 위험 – 왜 하필 248일? • 원인 – 항공기 전원의 가동시간 카운터에 대한 버그 » 카운터 값을 저장하는 변수는 부호 있는 32비트 정수 » 변수가 담을 수 있는 최대값 : 2^31, 해당 값은 100ms 마다 1씩 증가 » (2^31)/(100*60*60*24) = 248.551348… » 248.55일마다 변수에 Integer Overflow로 인한 소프트웨어 장애 » “역사속의 시스템 오류”, 김종하 저
  • 24. 1-3 테스트 자동화 • 테스팅의 중요성 – 248일마다 재부팅 해야하는 보잉787 • 보잉의 차세대 모델인 보잉787에서 여러 사건 사고 발생 • 항공기의 발전기가 연속해서 248일 이상 전원이 켜져 있을 경우, 소프트웨 어 버그로 인해 발전기 작동 중단 – 발전기 작동이 중단되면 비행에 필요한 전력을 생산할 수 없기 때문에 비행 중 추락 위험 – 왜 하필 248일? • 원인 – 항공기 전원의 가동시간 카운터에 대한 버그 » 카운터 값을 저장하는 변수는 부호 있는 32비트 정수 » 변수가 담을 수 있는 최대값 : 2^31, 해당 값은 100ms 마다 1씩 증가 » (2^31-1)/(100*60*60*24) = 248.551348… » 248.55일마다 변수에 Integer Overflow로 인한 소프트웨어 장애 » “역사속의 시스템 오류”, 김종하 저
  • 25. 1-3 테스트 자동화 • 테스팅과 디버깅 테스팅 •장애를 통해 결함을 발견 •테스터가 수행 디버깅 •장애 또는 결함의 원인을 찾고, 분석하여 제거하는 개발 활동 •개발자가 수행
  • 26. 1-3 테스트 자동화 • 테스팅 용어 : 테스트 케이스(Test Case) – SW의 구체적인 요구사항과의 일치 여부를 확인하기 위한 묶음 – 실행 사전 조건, 기대 결과 등의 집합 ID 사전 조건 수행 순서 기대결과 P/F (테스트 결과) 1 2개의 값이 입력되어 있지 않다 더하기 버튼을 눌러 더하기를 시도한다. 2개의 값을 입력하라 는 메시지를 출력한다. 2 2개의 값이 입력되어 있지 않다 빼기 버튼을 눌러 빼기를 시도한다. 2개의 값을 입력하라 는 메시지를 출력한다. 3 2개의 값이 입력 되어있다. 더하기 버튼을 눌러 더하기를 시도한다. 각각의 값을 더한 값 을 출력한다. 4 2개의 값이 입력 되어있다. 빼기 버튼을 눌러 빼기를 시도한다. 각각의 값을 뺀 값을 출력한다. 예시이며 표에 포함되는 내용은 달라 질 수 있다.
  • 27. 1-3 테스트 자동화 • 테스팅 용어 : 테스트 슈트(Test Suite) – 테스트 케이스를 모아 놓은 집합이다. • ex) Chrome의 로그인 프로세스 -> Test Suite – ID, PW 입력 후 로그인 여부 -> Test Case Test Suite Test Case 1 Test Case 2 ... Test Case 3
  • 28. 1-3 테스트 자동화 • 테스팅 용어 : 테스트 플랜(Test plan) – 테스트 슈트를 모아 놓은 집합이다. • Chrome의 로그인 프로세스 (Test Suite #1) • IE의 로그인 프로세스 (Test Suite #2) Test PlanTest Suite Test Case 1 Test Case 2 ... Test Case 3 Test Suite Test Case 1 Test Case 2 ... Test Case 3 . . .
  • 29. 1-3 테스트 자동화 • 테스팅 용어 : 유닛 테스트(Unit Test) – 소스코드의 특정 모듈이 의도한 대로 정확하게 작동하는지에 대 해 검증하는 절차. – 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하 는 절차. – 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악 및 수정 할 수 있도록 해준다.
  • 30. 1-3 테스트 자동화 • 테스팅 용어 : 유닛 테스트(Unit Test) – 소스코드의 특정 모듈이 의도한 대로 정확하게 작동하는지에 대 해 검증하는 절차. – 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하 는 절차. – 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악 및 수정 할 수 있도록 해준다.
  • 31. 1-3 테스트 자동화 • 테스팅 용어 : 유닛 테스트(Unit Test) – 소스코드의 특정 모듈이 의도한 대로 정확하게 작동하는지에 대 해 검증하는 절차. – 모든 함수와 메소드에 대한 테스트 케이스(Test case)를 작성하 는 절차. – 코드 변경으로 인해 문제가 발생할 경우, 단시간 내에 이를 파악 및 수정 할 수 있도록 해준다.
  • 32. 1-3 테스트 자동화 • 테스팅 용어 : 코드 커버리지(Code Coverage) – SW 테스트를 진행하였을 때 코드 자체가 얼마나 실행되었는지 를 나타낸다. – 코드 커버리지의 종류에는 크게 3가지가 있다. • 구문(Statement) – 코드 한 줄이 한번 이상 실행된다면 충족 • 조건(Condition) – 각 내부 조건이 참 / 거짓을 가지게 되면 충족 • 결정(Decision) – 전체적인 결과가 참 / 거짓이면 충족
  • 33. 1-3 테스트 자동화 • 테스팅 용어 : 코드 커버리지(Code Coverage) – SW 테스트를 진행하였을 때 코드 자체가 얼마나 실행되었는지 를 나타낸다. – 코드 커버리지의 종류에는 크게 3가지가 있다. • 구문(Statement) – 코드 한 줄이 한번 이상 실행된다면 충족 • 조건(Condition) – 각 내부 조건이 참 / 거짓을 가지게 되면 충족 • 결정(Decision) – 전체적인 결과가 참 / 거짓이면 충족
  • 34. 1-3 테스트 자동화 • 테스팅 자동화(Test automation) – 테스팅 자동화는 앞서 소개한 테스팅을 자동으로 하는 것. • 수동 테스팅은 컴퓨터 앞에 앉아 있는 사람이 각 테스트 단계별로 실행하며 수행한다. • 수동 테스팅은 사람이 하기 때문에 실수를 범하기 쉽다. – 테스트 슈트(Test suite)를 실행하기 위해 자동화 툴을 사용 – 테스팅 자동화를 통하여 테스트에 걸리는 시간을 줄일 수 있다.
  • 35. 1-3 테스트 자동화 • 테스팅 자동화(Test automation) – 테스팅 자동화는 앞서 소개한 테스팅을 자동으로 하는 것. • 수동 테스팅은 컴퓨터 앞에 앉아 있는 사람이 각 테스트 단계별로 실행하며 수행한다. • 수동 테스팅은 사람이 하기 때문에 실수를 범하기 쉽다. – 테스트 슈트(Test suite)를 실행하기 위해 자동화 툴을 사용 – 테스팅 자동화를 통하여 테스트에 걸리는 시간을 줄일 수 있다.
  • 36. 1-3 테스트 자동화 • 테스팅 자동화(Test automation) – 테스팅 자동화는 앞서 소개한 테스팅을 자동으로 하는 것. • 수동 테스팅은 컴퓨터 앞에 앉아 있는 사람이 각 테스트 단계별로 실행하며 수행한다. • 수동 테스팅은 사람이 하기 때문에 실수를 범하기 쉽다. – 테스트 슈트(Test suite)를 실행하기 위해 자동화 툴을 사용 – 테스팅 자동화를 통하여 테스트에 걸리는 시간을 줄일 수 있다.
  • 37. 1-3 테스트 자동화 • 테스팅 자동화(Test automation) 접근법 – 일반적인 접근법 • GUI Testing – 키 입력 및 마우스 클릭과 같은 UI 이벤트 생성 및 UI에서 발생하는 변경 사항을 관 찰하여 해당 동작이 올바른 지 검증 • API driven Testing – 테스트 중인 동작을 확인하기 위해 SW의 Programming Interface(PI) 사용 » SW의 UI를 우회하며, 다양한 입력 변수를 테스트하고 반환된 결과를 검증할 수 있다.
  • 38. 1-3 테스트 자동화 • 테스팅 자동화(Test automation) 접근법 – 일반적인 접근법 • GUI Testing – 키 입력 및 마우스 클릭과 같은 UI 이벤트 생성 및 UI에서 발생하는 변경 사항을 관 찰하여 해당 동작이 올바른 지 검증 • API driven Testing – 테스트 중인 동작을 확인하기 위해 Application의 Programming Interface(API) 사용 » SW의 UI를 우회하며, 다양한 입력 변수를 테스트하고 반환된 결과를 검증할 수 있다.
  • 40. 1-4 배포 자동화 • 배포 자동화(Deployment automation) – 지속적 배포(Continuous Deployment, CD)으로도 불림 – 실제 서버에 SW를 자동으로 배포하는 것을 의미 – 배포 자동화로 인한 시간 단축 • 만약 수동으로 수십대의 서버에 배포 -> 시간, 인력 낭비 …
  • 42. 2 Jenkins 1 Jenkins란? 2 Jenkins 환경 구축 3 Jenkins Build History
  • 45. 2-1 Jenkins이란? • – CI를 가능하게 하는 툴 중 하나. • 지속적인 빌드 자동화 • 지속적인 테스트 자동화 • 지속적인 배포 자동화 – 이전에는 Hudson으로 불림 • Oracle과의 상표권 분쟁으로 Jenkins라는 이름으로 변경 – JAVA로 작성된 OpenSource 자동화 서버 – Servlet Container 기반 • Servlet은 Web에서의 Java Programming을 위해 탄생 • Servlet Container는 Servlet과 Web Server의 통신 제공 • 대표적으로 Apache Tomcat가 있다.
  • 46. 2-1 Jenkins이란? • – CI를 가능하게 하는 툴 중 하나. • 지속적인 빌드 자동화 • 지속적인 테스트 자동화 • 지속적인 배포 자동화 – 이전에는 Hudson으로 불림 • Oracle과의 상표권 분쟁으로 Jenkins라는 이름으로 Fork – JAVA로 작성된 OpenSource 자동화 서버 – Servlet Container 기반 • Servlet은 Web에서의 Java Programming을 위해 탄생 • Servlet Container는 Servlet과 Web Server의 통신 제공 • 대표적으로 Apache Tomcat가 있다.
  • 47. 2-1 Jenkins이란? • – CI를 가능하게 하는 툴 중 하나. • 지속적인 빌드 자동화 • 지속적인 테스트 자동화 • 지속적인 배포 자동화 – 이전에는 Hudson으로 불림 • Oracle과의 상표권 분쟁으로 Jenkins라는 이름으로 Fork – JAVA로 작성된 OpenSource 자동화 서버 – Servlet Container 기반 • Servlet은 Web에서의 Java Programming을 위해 탄생 • Servlet Container는 Servlet과 Web Server의 통신 제공 • 대표적으로 Apache Tomcat가 있다.
  • 48. 2-1 Jenkins이란? • – CI를 가능하게 하는 툴 중 하나. • 지속적인 빌드 자동화 • 지속적인 테스트 자동화 • 지속적인 배포 자동화 – 이전에는 Hudson으로 불림 • Oracle과의 상표권 분쟁으로 Jenkins라는 이름으로 Fork – JAVA로 작성된 OpenSource 자동화 서버 – Servlet Container 기반 • Servlet은 Web에서의 Java Programming을 위해 탄생 • Servlet Container는 Servlet과 Web Server의 통신 제공 • 대표적으로 Apache Tomcat가 있다.
  • 49. 2-1 Jenkins이란? • – 다양한 Plugin 제공 • Git, CVS, Subversion, ssh, Ant, Maven, Groovy, MSBuild … – 시각적인 형태(UI) 또는 신규 기능 추가 기능 – Plugin을 통한 다양한 포맷의 자동화 보고서 생성 가능 – ETC…
  • 51. 2-2 Jenkins 환경 구축 • 설치 – https://jenkins.io/ 접속
  • 52. 2-2 Jenkins 환경 구축 • 설치 – 설치는 크게 두가지로 나눌 수 있다. • WAR(Web Application Archive) 파일을 이용한 설치 – JDK와 JRE가 설치되어 있어야 한다. – WAR파일을 단독으로 직접 실행하거나 Servlet Container(Apache Tomcat, Jetty, ETC…) 에서 실행을 하여야 한다. » Jenkins 단독 실행 시, Jetty를 사용한다. (https://wiki.jenkins-ci.org/display/JENKINS/Containers) • 패키지 관리자인 Yum, APT 등을 이용한 설치 또는 Installer – Windows와 Mac OS – Servlet Container에서 가동이 아닌 Jenkins를 단독 실행하는 것과 다름 없다. – 만약 가동중인 Web Server가 있다면 포트가 겹치지 않도록 해야한다.
  • 53. 2-2 Jenkins 환경 구축 • 설치 – 설치는 크게 두가지로 나눌 수 있다. • WAR(Web Application Archive) 파일을 이용한 설치 – JDK와 JRE가 설치되어 있어야 한다. – WAR파일을 단독으로 직접 실행하거나 Servlet Container(Apache Tomcat, Jetty, ETC…) 에서 실행을 하여야 한다. » Jenkins 단독 실행 시, Jetty를 사용한다. (https://wiki.jenkins-ci.org/display/JENKINS/Containers) • 패키지 관리자인 Yum, APT 등을 이용한 설치 또는 Installer – Windows와 Mac OS – Servlet Container에서 가동이 아닌 Jenkins를 단독 실행하는 것과 다름 없다. – 만약 가동중인 Web Server가 있다면 포트가 겹치지 않도록 해야한다.
  • 54. 2-2 Jenkins 환경 구축 • 설치 – 강의에 사용한 환경은 다음과 같다. – Odroid U2 • 1.7GHz Exynos4412 Prime Cortex- A9 Quad-core processor with PoP (Package on Package) 2Gbyte LPDDR2 880Mega Data Rate – OS : Ubuntu Server 14.04 LTS – Linux Kernel : 3.8.13.30 – APT를 이용한 Jenkins 설치.
  • 55. 2-2 Jenkins 환경 구축 • 설치 – 패키지 관리자를 통한 설치 – https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu • wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add – • sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list‘ • sudo apt-get update • sudo apt-get install jenkins
  • 56. 2-2 Jenkins 환경 구축 • 초기 설정 – 설치 완료 후 http://IP:JenkinsPORT 첫 접속 시 화면
  • 57. 2-2 Jenkins 환경 구축 • 초기 설정 – 기다리면 화면이 바뀌는데, Jenkins 설치를 위해 Unlock을 한다.
  • 58. 2-2 Jenkins 환경 구축 • 초기 설정 – Unlock을 위해 root계정으로 해당 경로 파일의 내용 입력
  • 59. 2-2 Jenkins 환경 구축 • 초기 설정 – Unlock을 위해 root계정으로 해당 경로 파일의 내용 입력
  • 60. 2-2 Jenkins 환경 구축 • 초기 설정 – 입력 후 설치를 진행하기 위해 Continue 클릭
  • 61. 2-2 Jenkins 환경 구축 • 초기 설정 – 로딩
  • 62. 2-2 Jenkins 환경 구축 • 초기 설정 – 입력 후 설치를 진행하기 위해 Continue 클릭
  • 63. 2-2 Jenkins 환경 구축 • 초기 설정 – Jenkins 초기 설정 시 Plugin Customize가 가능하다. • Plugin은 초기 설정 이후에도 설치 가능
  • 64. 2-2 Jenkins 환경 구축 • 초기 설정 – 강의에서는 Install suggested plugins 으로 진행.
  • 65. 2-2 Jenkins 환경 구축 • 초기 설정 – 설정된 Plugin을 설치하는 것을 볼 수 있다.
  • 66. 2-2 Jenkins 환경 구축 • 초기 설정 – Admin 계정 설정
  • 67. 2-2 Jenkins 환경 구축 • 초기 설정 – Admin 계정 설정 후 Save and Finish 클릭
  • 68. 2-2 Jenkins 환경 구축 • 초기 설정 – 초기 설정 완료 및 Start using Jenkins 클릭
  • 69. 2-2 Jenkins 환경 구축 • Dashboard – Welcome to Jenkins!
  • 70. 2-2 Jenkins 환경 구축 • Plugin 추가 – Dashboard에서 Jenkins 관리를 클릭한다.
  • 71. 2-2 Jenkins 환경 구축 • Plugin 추가 – Jenkins 관리에서 플러그인 관리를 클릭한다.
  • 72. 2-2 Jenkins 환경 구축 • Plugin 추가 – 플러그인 관리에서 설치가능을 클릭한다.
  • 73. 2-2 Jenkins 환경 구축 • Plugin 추가 – 설치하고자 하는 Plugin을 선택 후 재시작 없이 설치하기 또는 지금 다운로드하고 재시작 후 설치하기를 클릭한다.
  • 74. 2-2 Jenkins 환경 구축 • Item 추가 – Dashboard에서 새로운 Item(Job)을 클릭한다.
  • 75. 2-2 Jenkins 환경 구축 • Item 추가 – Job(Item)의 종류를 선택한다.
  • 76. 2-2 Jenkins 환경 구축 • Job – Freestyle Project • 간단한 빌드 & 배포 프로젝트에 용이. – Pipeline • 빌드 & 테스트 & 배포 등 여러 작업의 흐름(Workflow)가 필요 할 경우에 용이. – ETC • …
  • 77. 2-2 Jenkins 환경 구축 • Item – Freestyle Project • 일반적인 Jenkins Project. – Pipeline • 여러 작업의 흐름(Workflow)가 필요할 경우에 용이. – ETC • … – 강의는 Freestyle Project로 진행합니다.
  • 78. 2-2 Jenkins 환경 구축 • Freestyle Project – 설정하는 것은 크게 4가지 • 소스 코드 관리 • 빌드 유발 • Build • 빌드 후 조치
  • 79. 2-2 Jenkins 환경 구축 • Freestyle Project – 소스 코드 관리 • Jenkins의 소스 코드 관리 Plugin에 추가된 목록이다. • 해당 Jenkins Freestyle Project에서 사용할 플러그인을 선택한다. • 강의에서는 Git으로 진행하도록 하겠다.
  • 80. 2-2 Jenkins 환경 구축 • Freestyle Project – 소스 코드 관리 (Git) • 해당 Git의 Repository URL과 계정을 추가하며, 특정 Branch명을 기입한 다.
  • 81. 2-2 Jenkins 환경 구축 • Freestyle Project – 소스 코드 관리 (Git) • 필요시 해당 Git의 Repository 확인 및 사용을 위해 계정을 등록 할 수도 있 다.
  • 82. 2-2 Jenkins 환경 구축 • Freestyle Project – 소스 코드 관리 (Git) • 필요시 해당 Git의 Repository 확인 및 사용을 위해 계정을 등록 할 수도 있 다.
  • 83. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 유발 • 빌드를 원격으로 유발 • 다른 프로젝트 완료 시 유발 • 정기적으로 빌드를 유발 • 직접 SCM(Source Code Management)에 Push가 될 경우 가져온다. • 강의에서는 Poll SCM으로 진행한다.
  • 84. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 유발 (Poll SCM) • SCM의 Push 확인을 위해 Schedule를 등록한다. – 이때의 Schedule는 다음과 같은 규칙으로 작성한다. » MINUTE HOUR DOM MONTH DOW • MINUTE Minutes within the hour (0–59) • HOUR The hour of the day (0–23) • DOM The day of the month (1–31) • MONTH The month (1–12) • DOW The day of the week (0–7) where 0 and 7 are Sunday.
  • 85. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 유발 (Poll SCM) Schedule 예시 • # every fifteen minutes (perhaps at :07, :22, :37, :52) – H/15 * * * * • # every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24) – H(0-29)/10 * * * * • # once every two hours at 45 minutes past the hour starting at 9:45 AM and finishing at 3:45 PM every weekday. – 45 9-16/2 * * 1-5 • # once in every two hours slot between 9 AM and 5 PM every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM) – H H(9-16)/2 * * 1-5 • # once a day on the 1st and 15th of every month except December – H H 1,15 1-11 *
  • 86. 2-2 Jenkins 환경 구축 • Freestyle Project – Build • Build를 유발하기 위해, 다양한 Build Step를 작성 할 수 있다.
  • 87. 2-2 Jenkins 환경 구축 • Freestyle Project – Build • Build Step를 이용, 테스트 작업도 추가할 수 있다.
  • 88. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 • 테스트 결과 및 다른 프로젝트 빌드 등을 할 수 있다.
  • 89. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : 테스트 결과 • 다음과 같이 해당 Job 메인 화면에서 테스트 결과도 볼 수 있다.
  • 90. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 • Build Step의 SSH을 이용하여, 배포 작업도 추가할 수 있다. • SSH 추가를 위해, Jenkins 관리에 들어간다.
  • 91. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : SSH을 이용한 배포 작업 추가 • Jenkins 관리에서 시스템 설정에 들어간다.
  • 92. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : SSH을 이용한 배포 작업 추가 • Jenkins 관리에서 시스템 설정에 들어간다.
  • 93. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : SSH을 이용한 배포 작업 추가 • 시스템 설정 하단에 있는 Publish over SSH의 SSH Server 추가 버튼 클릭
  • 94. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : SSH을 이용한 배포 작업 추가 • 시스템 설정 하단에 있는 Publish over SSH의 SSH Server 추가 버튼 클릭
  • 95. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : SSH을 이용한 배포 작업 추가 • 해당 SSH Server의 정보를 입력하고 제일 하단의 저장을 클릭한다.
  • 96. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : SSH을 이용한 배포 작업 추가 • 해당 SSH Server의 정보를 입력하고 추가를 클릭한다. 예시
  • 97. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : SSH을 이용한 배포 작업 추가 • 해당 SSH Server의 정보를 입력하고 추가를 클릭한다. 예시
  • 98. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : SSH을 이용한 배포 작업 추가 • 해당 SSH Server의 정보를 입력하고 추가를 클릭한다. 예시
  • 99. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : SSH을 이용한 배포 작업 추가 • 배포작업을 추가할 해당 Freestyle Project로 돌아와서 추가한다. – 빌드 후 조치 추가 버튼 클릭 시 나타나는 Send Build artifacts over SSH
  • 100. 2-2 Jenkins 환경 구축 • Freestyle Project – 빌드 후 조치 : SSH을 이용한 배포 작업 추가 • Send Build artifacts over SSH 설정
  • 101. 2-2 Jenkins 환경 구축 • Freestyle Project – Send Build artifacts over SSH 설정 • SSH Server Name : Jenkins 설정에서 등록한 SSH 서버 중 배포 서버 선택 • Source Files : 어떠한 파일을 배포할지 설정. – ex) **/*.jar은 모든 폴더의 jar로 끝나는 파일을 의미 • Remove prefix 제거할 접두사 의미. – ex) Hello/World 입력 시 : /Hello/World/Jenkins/test.jar -> /Jenkins/test.jar • Remove directory : Jenkins 설정에서 등록한 SSH의 Remote Directory • 뒤로 추가로 입력되는 디렉토리. – 주의사항 : 해당 디렉토리가 없을 경우 추가해 주지 않기 때문에 추가해주어야함. • Exec command : 배포 후 실행 할 명령어 입력.
  • 103. 2-3 Jenkins Build History • Job Main – Build History 란은 왼쪽 하단에서 볼 수 있다.
  • 104. 2-3 Jenkins Build History • Build History – 특정 빌드를 클릭 시 해당 빌드의 내용을 알 수 있다.
  • 106. 3 CI Demo • Jenkins Job Info – Project 개발 언어 : Node.js – 사용한 Jenkins Plugin • Cobertura Plugin – 코드 커버리지 관련 Plugin • SSH Agent Plugin – SSH 관련 Plugin • SSH plugin – SSH 관련 Plugin
  • 107. 3 CI Demo • Jenkins Job Setting Info
  • 108. 3 CI Demo • Jenkins Job Setting Info
  • 109. 3 CI Demo • Jenkins Job Setting Info
  • 110. 3 CI Demo • Jenkins Job Setting Info
  • 111. 3 CI Demo • Jenkins Job Setting Info
  • 112. 3 CI Demo • Jenkins Job Setting Info – destory.sh #!/bin/bash sudo forever-service delete simple-server sudo rm -rf /home/test/Simple-Server
  • 113. 3 CI Demo • Jenkins Job Setting Info
  • 114. 3 CI Demo • Jenkins Job Setting Info
  • 115. 3 CI Demo • Jenkins Job Setting Info
  • 116. 3 CI Demo • Jenkins Job Setting Info – init.sh #!/bin/bash sudo forever-service delete simple-server sudo rm -rf /home/test/Simple-Server expect <<- EOF spawn bash -c "git clone https://kukudas.visualstudio.com/Hello%20Jenkins/_git/Simple-Server /home/test/Simple-Server"; expect -re "Username for" send "team.kukudas@gmail.comr" expect -re "Password for" send “PASSWORDr" expect -re "Checking connectivity... done." expect eof EOF npm install --prefix /home/test/Simple-Server/Simple-Server sudo forever-service install simple-server --script /home/test/Simple-Server/Simple-Server/app.js sudo service simple-server start
  • 117. 3 CI Demo • DEMO