SlideShare a Scribd company logo
1 of 24
PHP 프로젝트 지속적인 배포
(Continuous Deployment) 하기
Atlassian bamboo + envoy를 활용한
정광섭(https://lesstif.com)
아주 오래 전 모 프로젝트의 풍경
• Java + JSP
• Eclipse
• CVS
• WebLogic
Build?
• 그게 뭔가요? 먹는건가요?
• 별도의 빌드 없이 Eclipse 에서 생성된 .class 가
빌드 결과물
• Jsp는 빌드 불 필요
Deploy?
• 그게 뭔가요? 먹는건가요?
• 결과물(.class, .jsp) 은 FTP 로 전송하여 반영
• 가끔 급하면 telnet 으로 연결하여 vi 로
jsp 직접 편집
중반 이후 프로젝트의 모습
• 다른 개발자가 만든 모듈과 붙이니 안 돌아!
• 내 코드를 누가 덮어썼어!
• 분명히 버그 수정했는데???
• 서버에 있는 소스가 최종본이 아니네??
• 내 PC 에서는 됐는데???
• 통합때마다 커져가는 탄식과 고통
지속적인 통합
(CI; Continuous Integration)
• 소프트웨어 개발은 비슷한 생명주기를 갖고
반복되는 작업 발생
• 각 단계는 서로 연관되어 있으며 한 단계 실패시 다음 단계로 진
입이 힘들거나 많은 시간 소요
• 작성한 코드를 최대한 자주 통합하는 방법론
• 버전 관리, 자동화된 빌드, 테스트, 리포팅 실행
분석/설계
코드 작성
빌드릴리스
테스트
디플로이
CI 의 장점
• 빌드와 테스트 프로세스를 자동화하여 코드 작성에 더욱 집중
• 자동화를 통해 수시로 통합할 수 있으며 이를 통해 문제를 조기
에 발견하고 조치
• 빌드와 테스트를 개인 환경과 독립적으로 구성 가능. 즉 개발자
가 코드를 수정하고 커밋하지 않아 개인 환경에서만 빌드되는
문제를 조기에 수정
• 프로젝트의 코딩 표준과 모듈별 의존성등의 보고서를 빌드 과
정에서 자동화하여 개선 여부를 검토
• 개발자 PC 에서만 동작하는 일을 사전에 방지 가능(구동에 필요
한 특정 library이 개발자PC 에만 존재등)
• 개발자 PC 의 오염(바이러스 감염등)으로 인한 사고 방지
Best Practice
• 소스의 변경은 버전 관리 서버를 통해 관리
• 소스가 변경되면 수시로 커밋
• git 같은 branch/merge가 쉬운 형상 관리 사용 권장
• 하루에도 여러 번씩 수시로 빌드
• 빌드시 자동화된 테스트 실행
• 모든 참여자가 빌드 산출물과 결과를 확인할수 있도록 설정.
• 빌드가 깨졌을 경우 깨진 빌드를 수정하는 일에 우선순위를 높
게 선정
지속적인 배포
(Continuous Deployment)
• 통합이 끝난 소프트웨어를 자동으로 운영계에 반영
• Continuous Integration + DevOps
• Application Server의 종류와 댓수, 플랫폼(On-premises, Cloud,
Container등), 변경 관리 정책, 보안등 현실적으로는 고려 사항이
많음
•
CI Workflow
소스 커밋
지속적인 통합 서버개발팀
빌드 프로세스
package(WAR,
exe, etc..)
단위 테스트
컴파일
통합 테스트버전관리 서버
트리거 빌드 App deploy
App 서버
빌드 및 테스트 이벤트 통보
CI를 잘 사용하기 위한 필요 기술
• CI 도구가 통합을 자동화 하지는 않음
• Command 기반 빌드 툴 사용법(maven, ant, make, envoy 등)
• Shell script 에 대한 기본 지식
• Unix Pipe 와 Shell exit code (CI 는 shell_exec으로 지정된 명령어
실행 후 exit code 에 따라 다음 단계 실행 – Pipeline)
• 몇 가지 Unix Command Utility(grep 등)
• Unix Environment에 대한 이해(쉘 초기화 파일, PATH 환경 변수,
LD_LIBRARY_PATH 변수등)
대표적인 CI 제품
• Hudson/Jenkins
• Travis-CI (github 사용시 무료 – private repository 유료)
• PHPCI
• JetBrain TeamCity
• Atlassian bamboo
CI 선정 고려 사항
• CI 도입 예산이 있는지? (없으면 Jenkins)
• 내가 사용하는 언어/프레임워크의 빌드 환경을 잘 지원하는지?
• Java가 아니라 Visual Studio, Xcode 등 사용시 전용 제품 검토 필요
• 사용하는 Issue Tracking System 과 잘 맞는지?
• 상용 Issue Tracking 의 경우 CI 제품이 같이 있는 경우가 많음
• JIRA + Team City (X)
• YouTrack + Bamboo(X)
• 예쁜 UI – 모든 개발자는 실용성보다는 예쁜 제품을 좋아함(?)
CI의 주요 기능
• 특정 빌드 툴과 Application 연계
• Build Trigger – 특정 조건 만족시 자동 빌드(스케줄링, 커밋시등)
• 분산 빌드 – 규모가 큰 프로젝트일 경우 Agent 를 나눠서 빌드
• 자동화된 테스트 실행 및 결과 취합(테스트는 개발자가 작성 필
요)
• 정적 코드 분석 툴 지원(손쉽게 빌드와 통합)
• Branch 자동 검출 및 자동 빌드 – 신규 브랜치 생성시 자동 빌드
• 오래된 Branch 삭제 – 커밋된지 오래된 브랜치는 자동 삭제
Bamboo
• Confluence/JIRA 의 개발사인 Atlassian 의 CI 제품
• JIRA 를 사용한다면 최고의 CI
• Jenkins 보다 예쁘고 기능이 많지만 복잡함
• Jenkins 보다 분산 빌드가 쉬움
• 상용이므로 비용 발생 (Build Agent 개수로 라이선스 책정)
* Build Agent : 빌드는 많은 자원을 소모하는 작업이므로 여러 대의 빌
드 서버를 구동하는 경우가 많으며 이를 Build Agent라 함
Bamboo Dashboard
Bamboo workflow
• Project – 하나 이상의 Plan 포함
• Plan => 하나 이상의 Stage 포함 – 개별 Stage 는 Pipeline으로 동작
• Stage => 하나 이상의 Job 포함, 병렬로 수행 가능(agent 배분)
• Job = > build agent 가 수행할 업무
• Task => 실제 실행할 작업 (git clone, build, deploy등) 지정
Bamboo workflow
Laravel envoy
• Laravel 5.x 에 포함된 task runner
• Blade 의 비슷한 문법
• Ssh 나 shell command 등 업무 자동화에 유용
@servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2'])
@task('deploy', ['on' => ['web-1', 'web-2']])
cd site
git pull origin {{ $branch }}
php artisan migrate
@endtask
Why bamboo + envoy?
• Envoy 의 실행을 통한 변경 여부는 관리 대상
• 언제 누가 envoy 로 배포했는지?
• 특정 빌드 넘버의 Envoy 의 실행 결과는?
• Envoy 실행에 따른 운영계의 revision 은?
• 운영 서버 접근 권한과 보안
• 운영 서버 접근과 반영은 특정 서버로 통제
Build 실행 내역
특정 Build 상세 내역 #1
특정 Build 상세 내역 #2
참고 자료 & QnA
• http://en.wikipedia.org/wiki/Continuous_integration
• http://pragmaticstory.com/224
• https://confluence.atlassian.com/bamboo/understanding-the-
bamboo-ci-server-289277285.html
• 허드슨을 이용한 지속적 통합 - 위키북스
• 리눅스를 활용한 회사 인프라 구축의 모든 것 - 위키북스

More Related Content

What's hot

홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례if kakao
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드Opennaru, inc.
 
How to implement DevSecOps on AWS for startups
How to implement DevSecOps on AWS for startupsHow to implement DevSecOps on AWS for startups
How to implement DevSecOps on AWS for startupsAleksandr Maklakov
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 Amazon Web Services Korea
 
Tracking and improving software quality with SonarQube
Tracking and improving software quality with SonarQubeTracking and improving software quality with SonarQube
Tracking and improving software quality with SonarQubePatroklos Papapetrou (Pat)
 
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다Taehyun Kim
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기Jaewoo Ahn
 
和艦長一起玩轉 GitLab & GitLab Workflow
和艦長一起玩轉 GitLab & GitLab Workflow和艦長一起玩轉 GitLab & GitLab Workflow
和艦長一起玩轉 GitLab & GitLab WorkflowChen Cheng-Wei
 
CI and CD with Jenkins
CI and CD with JenkinsCI and CD with Jenkins
CI and CD with JenkinsMartin Málek
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)용호 최
 
내가써본 nGrinder-SpringCamp 2015
내가써본 nGrinder-SpringCamp 2015내가써본 nGrinder-SpringCamp 2015
내가써본 nGrinder-SpringCamp 2015Lim SungHyun
 
Kubernetes Architecture v1.x
Kubernetes Architecture v1.xKubernetes Architecture v1.x
Kubernetes Architecture v1.xYongbok Kim
 
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'tsPekka Klärck
 
A Visual Introduction to Event Sourcing and CQRS by Lorenzo Nicora
A Visual Introduction to Event Sourcing and CQRS by Lorenzo NicoraA Visual Introduction to Event Sourcing and CQRS by Lorenzo Nicora
A Visual Introduction to Event Sourcing and CQRS by Lorenzo NicoraOpenCredo
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...Edureka!
 
The Power of Azure DevOps
The Power of Azure DevOpsThe Power of Azure DevOps
The Power of Azure DevOpsJeff Bramwell
 

What's hot (20)

홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드
 
How to implement DevSecOps on AWS for startups
How to implement DevSecOps on AWS for startupsHow to implement DevSecOps on AWS for startups
How to implement DevSecOps on AWS for startups
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
 
Tracking and improving software quality with SonarQube
Tracking and improving software quality with SonarQubeTracking and improving software quality with SonarQube
Tracking and improving software quality with SonarQube
 
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
Sonarqube
SonarqubeSonarqube
Sonarqube
 
和艦長一起玩轉 GitLab & GitLab Workflow
和艦長一起玩轉 GitLab & GitLab Workflow和艦長一起玩轉 GitLab & GitLab Workflow
和艦長一起玩轉 GitLab & GitLab Workflow
 
CI and CD with Jenkins
CI and CD with JenkinsCI and CD with Jenkins
CI and CD with Jenkins
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)[넥슨] kubernetes 소개 (2018)
[넥슨] kubernetes 소개 (2018)
 
내가써본 nGrinder-SpringCamp 2015
내가써본 nGrinder-SpringCamp 2015내가써본 nGrinder-SpringCamp 2015
내가써본 nGrinder-SpringCamp 2015
 
Kubernetes Architecture v1.x
Kubernetes Architecture v1.xKubernetes Architecture v1.x
Kubernetes Architecture v1.x
 
Robot Framework Dos And Don'ts
Robot Framework Dos And Don'tsRobot Framework Dos And Don'ts
Robot Framework Dos And Don'ts
 
A Visual Introduction to Event Sourcing and CQRS by Lorenzo Nicora
A Visual Introduction to Event Sourcing and CQRS by Lorenzo NicoraA Visual Introduction to Event Sourcing and CQRS by Lorenzo Nicora
A Visual Introduction to Event Sourcing and CQRS by Lorenzo Nicora
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
Jenkins Pipeline Tutorial | Continuous Delivery Pipeline Using Jenkins | DevO...
 
The Power of Azure DevOps
The Power of Azure DevOpsThe Power of Azure DevOps
The Power of Azure DevOps
 

Similar to bamboo 로 PHP 프로젝트 지속적인 배포

Vingle tech talk #1
Vingle tech talk #1Vingle tech talk #1
Vingle tech talk #1Tylor Shin
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017Amazon Web Services Korea
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous IntegrationDonghyun Seo
 
코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개태준 문
 
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기인수 장
 
DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)완철 김
 
이클립스 플랫폼
이클립스 플랫폼이클립스 플랫폼
이클립스 플랫폼Kenu, GwangNam Heo
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기Youngjae Kim
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsTaeyoung Kim
 
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016Amazon Web Services Korea
 
DevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle DeveloperDevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle Developer창훈 현
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발Jinuk Kim
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술중선 곽
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재Hankyo
 
Saturday Azure Live 1701 Azure WebApp 개념원리
Saturday Azure Live 1701 Azure WebApp 개념원리Saturday Azure Live 1701 Azure WebApp 개념원리
Saturday Azure Live 1701 Azure WebApp 개념원리Youngjae Kim
 
Intro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sIntro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sSeong-Bok Lee
 
AWS Lambda를 이용한 CI/CD 기법
AWS Lambda를 이용한 CI/CD 기법AWS Lambda를 이용한 CI/CD 기법
AWS Lambda를 이용한 CI/CD 기법Jesang Yoon
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 

Similar to bamboo 로 PHP 프로젝트 지속적인 배포 (20)

Vingle tech talk #1
Vingle tech talk #1Vingle tech talk #1
Vingle tech talk #1
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개코드로 인프라 관리하기 - 자동화 툴 소개
코드로 인프라 관리하기 - 자동화 툴 소개
 
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
Travis-ci를 이용한 CI/CD와 도커를 이용한 Jenkins for Android 구성하기
 
DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)DevOps (AWS, Docker, Ansible, Jenkins)
DevOps (AWS, Docker, Ansible, Jenkins)
 
이클립스 플랫폼
이클립스 플랫폼이클립스 플랫폼
이클립스 플랫폼
 
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
 
ALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOpsALM과 DevOps 그리고 Azure DevOps
ALM과 DevOps 그리고 Azure DevOps
 
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
 
DevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle DeveloperDevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle Developer
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
Saturday Azure Live 1701 Azure WebApp 개념원리
Saturday Azure Live 1701 Azure WebApp 개념원리Saturday Azure Live 1701 Azure WebApp 개념원리
Saturday Azure Live 1701 Azure WebApp 개념원리
 
Intro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_sIntro to hpe helion stackato_paa_s
Intro to hpe helion stackato_paa_s
 
AWS Lambda를 이용한 CI/CD 기법
AWS Lambda를 이용한 CI/CD 기법AWS Lambda를 이용한 CI/CD 기법
AWS Lambda를 이용한 CI/CD 기법
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 

More from KwangSeob Jeong

JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리KwangSeob Jeong
 
Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기KwangSeob Jeong
 
암호화 이것만 알면 된다.
암호화 이것만 알면 된다.암호화 이것만 알면 된다.
암호화 이것만 알면 된다.KwangSeob Jeong
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성KwangSeob Jeong
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성KwangSeob Jeong
 

More from KwangSeob Jeong (9)

JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리
 
Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기
 
암호화 이것만 알면 된다.
암호화 이것만 알면 된다.암호화 이것만 알면 된다.
암호화 이것만 알면 된다.
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
Atlassian confluence WIKI를 활용한 공유와 협업 환경 구성
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성Php faker 를 활용한 의미있는 테스트 데이타 생성
Php faker 를 활용한 의미있는 테스트 데이타 생성
 

bamboo 로 PHP 프로젝트 지속적인 배포

  • 1. PHP 프로젝트 지속적인 배포 (Continuous Deployment) 하기 Atlassian bamboo + envoy를 활용한 정광섭(https://lesstif.com)
  • 2. 아주 오래 전 모 프로젝트의 풍경 • Java + JSP • Eclipse • CVS • WebLogic
  • 3. Build? • 그게 뭔가요? 먹는건가요? • 별도의 빌드 없이 Eclipse 에서 생성된 .class 가 빌드 결과물 • Jsp는 빌드 불 필요
  • 4. Deploy? • 그게 뭔가요? 먹는건가요? • 결과물(.class, .jsp) 은 FTP 로 전송하여 반영 • 가끔 급하면 telnet 으로 연결하여 vi 로 jsp 직접 편집
  • 5. 중반 이후 프로젝트의 모습 • 다른 개발자가 만든 모듈과 붙이니 안 돌아! • 내 코드를 누가 덮어썼어! • 분명히 버그 수정했는데??? • 서버에 있는 소스가 최종본이 아니네?? • 내 PC 에서는 됐는데??? • 통합때마다 커져가는 탄식과 고통
  • 6. 지속적인 통합 (CI; Continuous Integration) • 소프트웨어 개발은 비슷한 생명주기를 갖고 반복되는 작업 발생 • 각 단계는 서로 연관되어 있으며 한 단계 실패시 다음 단계로 진 입이 힘들거나 많은 시간 소요 • 작성한 코드를 최대한 자주 통합하는 방법론 • 버전 관리, 자동화된 빌드, 테스트, 리포팅 실행 분석/설계 코드 작성 빌드릴리스 테스트 디플로이
  • 7. CI 의 장점 • 빌드와 테스트 프로세스를 자동화하여 코드 작성에 더욱 집중 • 자동화를 통해 수시로 통합할 수 있으며 이를 통해 문제를 조기 에 발견하고 조치 • 빌드와 테스트를 개인 환경과 독립적으로 구성 가능. 즉 개발자 가 코드를 수정하고 커밋하지 않아 개인 환경에서만 빌드되는 문제를 조기에 수정 • 프로젝트의 코딩 표준과 모듈별 의존성등의 보고서를 빌드 과 정에서 자동화하여 개선 여부를 검토 • 개발자 PC 에서만 동작하는 일을 사전에 방지 가능(구동에 필요 한 특정 library이 개발자PC 에만 존재등) • 개발자 PC 의 오염(바이러스 감염등)으로 인한 사고 방지
  • 8. Best Practice • 소스의 변경은 버전 관리 서버를 통해 관리 • 소스가 변경되면 수시로 커밋 • git 같은 branch/merge가 쉬운 형상 관리 사용 권장 • 하루에도 여러 번씩 수시로 빌드 • 빌드시 자동화된 테스트 실행 • 모든 참여자가 빌드 산출물과 결과를 확인할수 있도록 설정. • 빌드가 깨졌을 경우 깨진 빌드를 수정하는 일에 우선순위를 높 게 선정
  • 9. 지속적인 배포 (Continuous Deployment) • 통합이 끝난 소프트웨어를 자동으로 운영계에 반영 • Continuous Integration + DevOps • Application Server의 종류와 댓수, 플랫폼(On-premises, Cloud, Container등), 변경 관리 정책, 보안등 현실적으로는 고려 사항이 많음 •
  • 10. CI Workflow 소스 커밋 지속적인 통합 서버개발팀 빌드 프로세스 package(WAR, exe, etc..) 단위 테스트 컴파일 통합 테스트버전관리 서버 트리거 빌드 App deploy App 서버 빌드 및 테스트 이벤트 통보
  • 11. CI를 잘 사용하기 위한 필요 기술 • CI 도구가 통합을 자동화 하지는 않음 • Command 기반 빌드 툴 사용법(maven, ant, make, envoy 등) • Shell script 에 대한 기본 지식 • Unix Pipe 와 Shell exit code (CI 는 shell_exec으로 지정된 명령어 실행 후 exit code 에 따라 다음 단계 실행 – Pipeline) • 몇 가지 Unix Command Utility(grep 등) • Unix Environment에 대한 이해(쉘 초기화 파일, PATH 환경 변수, LD_LIBRARY_PATH 변수등)
  • 12. 대표적인 CI 제품 • Hudson/Jenkins • Travis-CI (github 사용시 무료 – private repository 유료) • PHPCI • JetBrain TeamCity • Atlassian bamboo
  • 13. CI 선정 고려 사항 • CI 도입 예산이 있는지? (없으면 Jenkins) • 내가 사용하는 언어/프레임워크의 빌드 환경을 잘 지원하는지? • Java가 아니라 Visual Studio, Xcode 등 사용시 전용 제품 검토 필요 • 사용하는 Issue Tracking System 과 잘 맞는지? • 상용 Issue Tracking 의 경우 CI 제품이 같이 있는 경우가 많음 • JIRA + Team City (X) • YouTrack + Bamboo(X) • 예쁜 UI – 모든 개발자는 실용성보다는 예쁜 제품을 좋아함(?)
  • 14. CI의 주요 기능 • 특정 빌드 툴과 Application 연계 • Build Trigger – 특정 조건 만족시 자동 빌드(스케줄링, 커밋시등) • 분산 빌드 – 규모가 큰 프로젝트일 경우 Agent 를 나눠서 빌드 • 자동화된 테스트 실행 및 결과 취합(테스트는 개발자가 작성 필 요) • 정적 코드 분석 툴 지원(손쉽게 빌드와 통합) • Branch 자동 검출 및 자동 빌드 – 신규 브랜치 생성시 자동 빌드 • 오래된 Branch 삭제 – 커밋된지 오래된 브랜치는 자동 삭제
  • 15. Bamboo • Confluence/JIRA 의 개발사인 Atlassian 의 CI 제품 • JIRA 를 사용한다면 최고의 CI • Jenkins 보다 예쁘고 기능이 많지만 복잡함 • Jenkins 보다 분산 빌드가 쉬움 • 상용이므로 비용 발생 (Build Agent 개수로 라이선스 책정) * Build Agent : 빌드는 많은 자원을 소모하는 작업이므로 여러 대의 빌 드 서버를 구동하는 경우가 많으며 이를 Build Agent라 함
  • 17. Bamboo workflow • Project – 하나 이상의 Plan 포함 • Plan => 하나 이상의 Stage 포함 – 개별 Stage 는 Pipeline으로 동작 • Stage => 하나 이상의 Job 포함, 병렬로 수행 가능(agent 배분) • Job = > build agent 가 수행할 업무 • Task => 실제 실행할 작업 (git clone, build, deploy등) 지정
  • 19. Laravel envoy • Laravel 5.x 에 포함된 task runner • Blade 의 비슷한 문법 • Ssh 나 shell command 등 업무 자동화에 유용 @servers(['web-1' => '192.168.1.1', 'web-2' => '192.168.1.2']) @task('deploy', ['on' => ['web-1', 'web-2']]) cd site git pull origin {{ $branch }} php artisan migrate @endtask
  • 20. Why bamboo + envoy? • Envoy 의 실행을 통한 변경 여부는 관리 대상 • 언제 누가 envoy 로 배포했는지? • 특정 빌드 넘버의 Envoy 의 실행 결과는? • Envoy 실행에 따른 운영계의 revision 은? • 운영 서버 접근 권한과 보안 • 운영 서버 접근과 반영은 특정 서버로 통제
  • 22. 특정 Build 상세 내역 #1
  • 23. 특정 Build 상세 내역 #2
  • 24. 참고 자료 & QnA • http://en.wikipedia.org/wiki/Continuous_integration • http://pragmaticstory.com/224 • https://confluence.atlassian.com/bamboo/understanding-the- bamboo-ci-server-289277285.html • 허드슨을 이용한 지속적 통합 - 위키북스 • 리눅스를 활용한 회사 인프라 구축의 모든 것 - 위키북스