SlideShare une entreprise Scribd logo
1  sur  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
• 허드슨을 이용한 지속적 통합 - 위키북스
• 리눅스를 활용한 회사 인프라 구축의 모든 것 - 위키북스

Contenu connexe

Tendances

Domino Administration Wizardry - Dark Arts Edition
Domino Administration Wizardry - Dark Arts EditionDomino Administration Wizardry - Dark Arts Edition
Domino Administration Wizardry - Dark Arts EditionKeith Brooks
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to AnsibleKnoldus Inc.
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint NAVER D2
 
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정PgDay.Seoul
 
Message Queue 가용성, 신뢰성을 위한 RabbitMQ Server, Client 구성
Message Queue 가용성, 신뢰성을 위한 RabbitMQ Server, Client 구성Message Queue 가용성, 신뢰성을 위한 RabbitMQ Server, Client 구성
Message Queue 가용성, 신뢰성을 위한 RabbitMQ Server, Client 구성Yoonjeong Kwon
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction Robert Reiz
 
Automation with ansible
Automation with ansibleAutomation with ansible
Automation with ansibleKhizer Naeem
 
Sync async-blocking-nonblocking-io
Sync async-blocking-nonblocking-ioSync async-blocking-nonblocking-io
Sync async-blocking-nonblocking-ioCheoloh Bae
 
AWS load balancers deep dive-AWSKRUG
AWS load balancers deep dive-AWSKRUGAWS load balancers deep dive-AWSKRUG
AWS load balancers deep dive-AWSKRUGha suyoung
 
Redmineのバージョンアップに追従していくための一工夫
Redmineのバージョンアップに追従していくための一工夫Redmineのバージョンアップに追従していくための一工夫
Redmineのバージョンアップに追従していくための一工夫Go Maeda
 
Zabbixのパフォーマンスチューニング & インストール時の注意点
Zabbixのパフォーマンスチューニング & インストール時の注意点Zabbixのパフォーマンスチューニング & インストール時の注意点
Zabbixのパフォーマンスチューニング & インストール時の注意点Kodai Terashima
 
(KRUG Session) 쿠버네티스 모니터링.pdf
(KRUG Session) 쿠버네티스 모니터링.pdf(KRUG Session) 쿠버네티스 모니터링.pdf
(KRUG Session) 쿠버네티스 모니터링.pdfHyunjin Lee
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 
NGINX: High Performance Load Balancing
NGINX: High Performance Load BalancingNGINX: High Performance Load Balancing
NGINX: High Performance Load BalancingNGINX, Inc.
 

Tendances (20)

Domino Administration Wizardry - Dark Arts Edition
Domino Administration Wizardry - Dark Arts EditionDomino Administration Wizardry - Dark Arts Edition
Domino Administration Wizardry - Dark Arts Edition
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to Ansible
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
 
Message Queue 가용성, 신뢰성을 위한 RabbitMQ Server, Client 구성
Message Queue 가용성, 신뢰성을 위한 RabbitMQ Server, Client 구성Message Queue 가용성, 신뢰성을 위한 RabbitMQ Server, Client 구성
Message Queue 가용성, 신뢰성을 위한 RabbitMQ Server, Client 구성
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
 
Automation with ansible
Automation with ansibleAutomation with ansible
Automation with ansible
 
Sync async-blocking-nonblocking-io
Sync async-blocking-nonblocking-ioSync async-blocking-nonblocking-io
Sync async-blocking-nonblocking-io
 
Nodejs Session01
Nodejs Session01Nodejs Session01
Nodejs Session01
 
Git best practices workshop
Git best practices workshopGit best practices workshop
Git best practices workshop
 
全自動Zabbix
全自動Zabbix全自動Zabbix
全自動Zabbix
 
AWS load balancers deep dive-AWSKRUG
AWS load balancers deep dive-AWSKRUGAWS load balancers deep dive-AWSKRUG
AWS load balancers deep dive-AWSKRUG
 
Redmineのバージョンアップに追従していくための一工夫
Redmineのバージョンアップに追従していくための一工夫Redmineのバージョンアップに追従していくための一工夫
Redmineのバージョンアップに追従していくための一工夫
 
Zabbixのパフォーマンスチューニング & インストール時の注意点
Zabbixのパフォーマンスチューニング & インストール時の注意点Zabbixのパフォーマンスチューニング & インストール時の注意点
Zabbixのパフォーマンスチューニング & インストール時の注意点
 
(KRUG Session) 쿠버네티스 모니터링.pdf
(KRUG Session) 쿠버네티스 모니터링.pdf(KRUG Session) 쿠버네티스 모니터링.pdf
(KRUG Session) 쿠버네티스 모니터링.pdf
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
The basics of fluentd
The basics of fluentdThe basics of fluentd
The basics of fluentd
 
NGINX: High Performance Load Balancing
NGINX: High Performance Load BalancingNGINX: High Performance Load Balancing
NGINX: High Performance Load Balancing
 
SSH力をつけよう
SSH力をつけようSSH力をつけよう
SSH力をつけよう
 
60 Admin Tips
60 Admin Tips60 Admin Tips
60 Admin Tips
 

Similaire à 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
 

Similaire à 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
 

Plus de 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
 

Plus de 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 • 허드슨을 이용한 지속적 통합 - 위키북스 • 리눅스를 활용한 회사 인프라 구축의 모든 것 - 위키북스