The Gate of the AOSP #4 : Gerrit, Memory & Performance · Gerrit – 코드 리뷰 시스템...

78
Windriver Korea Design Center : 차영호 (youngho.cha at windriver.com) 2013. 3. 29. The Gate of the AOSP #4 : Gerrit, Memory & Performance Gerrit 코드 리뷰 시스템 도입의 필요성 사용 11 th Kandroid Conference

Transcript of The Gate of the AOSP #4 : Gerrit, Memory & Performance · Gerrit – 코드 리뷰 시스템...

Windriver Korea Design Center : 차영호 (youngho.cha at windriver.com)

2013. 3. 29.

The Gate of the AOSP #4 : Gerrit, Memory & Performance

Gerrit – 코드 리뷰 시스템 도입의 필요성 및 사용

11th Kandroid Conference

2 11th Kandroid Conference - www.kandroid.org

Contents

• Code Review System

• Gerrit

• Repo 및 AOSP 코드 기부 경험 공유

3 11th Kandroid Conference - www.kandroid.org

구글 직원의 AOSP 참여 현황

Google Employees

Framework Commiters

Apps/Extra Commiters

20% time

Google Employees

Google 젂체 직원수

37000여명

안드로이드 코드를

한줄이라도 바꿔본 직원 수

600여명

69명

68명

4 11th Kandroid Conference - www.kandroid.org

정말로 구글러들은 외계읶?

• 상당히 적은 인원으로 운영되는 AOSP

• 정말로 그들은 내부에서 외계읶이라도 고문하고 있는 걸까요?

5 11th Kandroid Conference - www.kandroid.org

Guido Van Rossum

• Creator of Python

• 한때 구글러

– 2005 – 2012

• 지금은 Dropbox에 납치되셨습니다.

6 11th Kandroid Conference - www.kandroid.org

Guido 할부지가 구글에서 처음 한 읷

• Mondrian 이라는 코드 리뷰 시스템 소프트웨어를 작성했다고 합니다.

7 11th Kandroid Conference - www.kandroid.org

Code Review System

8 11th Kandroid Conference - www.kandroid.org

코드 리뷰의 목적 (in Wikipedia)

• It is intended to find and fix MISTAKES overlooked.

9 11th Kandroid Conference - www.kandroid.org

코드 리뷰의 목적 (from Guido)

• Goal is COOPERATION,

not fault-finding.

10 11th Kandroid Conference - www.kandroid.org

코드 리뷰의 목적 (from Guido)

협력

11 11th Kandroid Conference - www.kandroid.org

Cooperation

코드 리뷰의 목적 (from Guido)

Fault-finding

12 11th Kandroid Conference - www.kandroid.org

코드 리뷰 시스템

• 코드 리뷰를 개발 Process에 포함하는 것

개발자

리뷰어

QA

소스 저장소 Submitter

13 11th Kandroid Conference - www.kandroid.org

코드 리뷰 소프트웨어

• 코드 리뷰 젃차를 소프트웨어(읷반적으로 웹 게시판형식)로 구현해둔 것. – Mondrian (Google)

– Rietveld (Google)

– Gerrit (Google)

– Phabricator (Facebook)

– ReviewBoard

– Barkeep

– RhodeCode

– GerritForge (Based on Gerrit)

14 11th Kandroid Conference - www.kandroid.org

모두가 원하는 상황

VCS 저장소

개발자

QA 다른

개발자

Good Code

15 11th Kandroid Conference - www.kandroid.org

하지만 현실은…

VCS 저장소

개발자

QA 다른

개발자

Bad Code

16 11th Kandroid Conference - www.kandroid.org

하지만 현실은…

VCS 저장소

개발자

QA 다른

개발자 Bad Code 다른

개발자 다른

개발자 다른

개발자 다른

개발자 다른

개발자

QA QA QA QA

17 11th Kandroid Conference - www.kandroid.org

코드 리뷰 시스템

개발자

리뷰어

QA

소스 저장소 Submitter

Bad Code

Bad Code

18 11th Kandroid Conference - www.kandroid.org

이 외에도…

• 버그 개수 감소

• 팀원의 트레이닝 도구로 홗용

• 코드 가독성 증가 및 품질 상승

• 코드 세부 구현사항에 대한 기록 보존

• 팀 역량의 상향 평준화

• 디버깅 시간 및 프로젝트 수행 기간 단축

19 11th Kandroid Conference - www.kandroid.org

코드 리뷰의 목적 (from Guido)

협력

20 11th Kandroid Conference - www.kandroid.org

Gerrit

21 11th Kandroid Conference - www.kandroid.org

Gerrit의 족보

22 11th Kandroid Conference - www.kandroid.org

Mondrian

• Written by Guido Van Rossum

• Written with Python

• Announced in 2006

• Integrate with Perforce

• Hosted and Used at Google Internally

23 11th Kandroid Conference - www.kandroid.org

Rietveld

• Written by Guido Van Rossum

• Written with Python

• Announced in 2008

• Integrated with Subversion

• Host on Google App Engine

• Used by Chrome Project

24 11th Kandroid Conference - www.kandroid.org

Gerrit

• Gerrit (2008-2012)

– Written by Sean O. Pearce

– fork from Rietveld

– Integrated with Git

– add Access Control List feature

• Gerrit2 (2008 - )

– Rewritten Gerrit with JavaEE

– Used by Android Project

25 11th Kandroid Conference - www.kandroid.org

Gerrit의 특징

• 여러가지 홖경에서 운영 가능

– jvm만 설치되어 있으면 PC에서도 운영가능

– 표준 servlet container를 지원

• 여러가지 읶증 방식 지원

– http/ldap/openid

• 여러가지 database지원

– mysql/pgsel/h2(내장 DB)

26 11th Kandroid Conference - www.kandroid.org

Gerrit의 기능

• Git 저장소

– jgit을 이용해서 git 저장소 구현

• Access Control List

– 그룹단위로 사용자의 권한 설정 가능

– git의 기능 및 저장 위치별로 그룹 설정 가능

• fetch, push, tag, branch…

– 특정 그룹에게 검증 범위를 지정 가능

• review, verify, submit…

• Source Review Board

– 임시 git branch를 자동으로 생성해서 코드를 올릴 수 있고, 그

코드에 대해서 평가할 수 있는 웹 보드 시스템 제공

27 11th Kandroid Conference - www.kandroid.org

Gerrit의 읶터페이스

• for Human

– 웹 읶터페이스

• for External Integration

– ssh

• 커맨드라읶 읶터페이스

• 2개의 커맨드 제공

– git

» git protocol 구현

– gerrit

– REST api

• json형식으로 gerrit의 데이터 제공

28 11th Kandroid Conference - www.kandroid.org

DVCS(Git) Workflow

Remote DVCS

Repository

User1’s Local VCS Repository

User2’s Local VCS Repository

push

fetch

commit merge rebase

commit merge rebase

push

fetch

Working Branch

29 11th Kandroid Conference - www.kandroid.org

Gerrit Workflow

User1’s Local Git

Repository

User2’s Local Git

Repository

fetch

push

commit merge rebase

commit merge rebase

Working Branch

Pending Commit

merg

e

Gerrit

Repository

30 11th Kandroid Conference - www.kandroid.org

Gerrit Detailed Workflow

push commit to refs/for/branch

notify to reviewers

code quality review

IP review

Build Run

Testcases

comments&vote

merge the change into working branch

abandon

approved not approved

http://goo.gl/Kwcxo 참조

31 11th Kandroid Conference - www.kandroid.org

Google Android Source Hosting

Developer PC

android-review. googlesource.com

replicate android. googlesource.com

AOSP

Deckard

Autoverifier

Google Internal

Android Tree

Google Internal

32 11th Kandroid Conference - www.kandroid.org

Repo

33 11th Kandroid Conference - www.kandroid.org

Repo

• The Multiple Git Repository Tool

• Gerrit을 손쉽게 쓰기위한 스크립트 모음

• AOSP에서는 이 스크립트를 사용하기를

권장합니다.

34 11th Kandroid Conference - www.kandroid.org

Repo의 기능

• 여러 개의 git 저장소를 저장 및 배치.

• 저장소의 내용이 변경되면 rebase 적용.

• 의존성을 확읶해서, 필요한 커밋 다운로

드.

• Gerrit에 손쉽게 커밋을 업로드.

35 11th Kandroid Conference - www.kandroid.org

Windows에선 못써요.

• Linux 및 MacOSX에서만 동작합니다.

– Python으로 작성된 스크립트 입니다.

– 윈도용 python이 symlink를 지원하지 않습니다.

• Eclipse 의 Mylyn Gerrit Connector & Mylyn Reviews plugin을 사용하시는 것을 추천합니다.

36 11th Kandroid Conference - www.kandroid.org

코드 기부 목표

• Android SDK에 포함된 에물레이터

의 커널을 개선

– linux 3.4의 ftrace 기능 켜기

37 11th Kandroid Conference - www.kandroid.org

준비작업

• 먼저 http://android-review.googlesource.com 에서 계

정등록 및 설정을 해야 사용 가능

• PC에 repo 스크립트를 다운받고 실행할 수 있도록 설

38 11th Kandroid Conference - www.kandroid.org

준비작업 (로그읶)

39 11th Kandroid Conference - www.kandroid.org

준비작업 (설정)

40 11th Kandroid Conference - www.kandroid.org

준비작업 (메읷 등록)

41 11th Kandroid Conference - www.kandroid.org

준비작업 (코드 기부 동의)

42 11th Kandroid Conference - www.kandroid.org

준비작업 (코드 기부 동의)

43 11th Kandroid Conference - www.kandroid.org

준비작업 (코드 기부 동의)

I AGREE

44 11th Kandroid Conference - www.kandroid.org

준비작업 (코드 기부 동의)

45 11th Kandroid Conference - www.kandroid.org

준비작업 (읶증 설정)

46 11th Kandroid Conference - www.kandroid.org

repo 초기화

47 11th Kandroid Conference - www.kandroid.org

manifest.xml

• Repo가 초기화 할 git저장소 목록을 제공하는 파읷

• 별도의 git 저장소에 default.xml이라는 파읷이름으로 저장되어 있어야 합니다.

– 예제

• AOSP의 manifest.xml

• CyanogenMod의 manifest.xml

48 11th Kandroid Conference - www.kandroid.org

manifest의 내용

• remote

– name: 이름

– fetch: git 저장소의 프로토콜 및 호스트

– review: 업로드 시 사용할 Gerrit 서버

– 여러 개를 등록할 수 있습니다.

• default

– project 에서 사용할 기본값을 정의합니다.

– revision: project에서 사용할 태그, 브랜치

– remote: 프로젝트에서 사용할 git서버

49 11th Kandroid Conference - www.kandroid.org

manifest의 내용

• project

– name: 프로젝트에서 사용할 원격 git 저장소

• 실제 저장소 위치는 remote의 fetch와 연결되어서 사용

– path: 로컬 파읷시스템에 저장할 위치

– revision: 사용할 브랜치, 태그, 또는 커밋id

– remote: 원격 git 저장소 위치

50 11th Kandroid Conference - www.kandroid.org

그런데 받은 소스중에 커널 소스가 없어요.

• repo init을 실행하면 원격 저장소에 있던 default.xml이 .repo/manifest.xml 로 저장됩니다.

– manifest.xml에 커널 소스는 제외되어 있습니다.

– 필요하면 .repo/manifest.xml을 직접 수정하면 됩니다.

• 하지만 서버에서 변경이 되면 conflict가 발생하기 때문에 다음과 같이 쓰시기를 권장합니다.

51 11th Kandroid Conference - www.kandroid.org

local_manifest.xml

• .repo/local_manifest.xml에 필요한 저장소를 추가하거나 삭제하도록 지정할 수 있습니다.

– 변경하려면 삭제후 추가하면 됩니다.

• 최근에는 .repo/local_manifests/ 디렉토리에 xml을 만들어서 사용하도록 변경되었습니다.

• 참고: manifest.xml의 DTD

52 11th Kandroid Conference - www.kandroid.org

local_manifest.xml

53 11th Kandroid Conference - www.kandroid.org

local_manifest.xml

54 11th Kandroid Conference - www.kandroid.org

repo sync

• init이후 sync 명령으로 git저장소의 내용을 로컬에 내려받을 수 있습니다.

• 상대 경로로 지정해서 해당 디렉토리만 내려받을 수도 있습니다.

• init 이후 처음 sync는 브랜치 대싞 브랜치의 commit으로 checkout 됩니다.

• 로컬에 변경한 커밋이 존재하면 자동으로 rebase 됩니다.

55 11th Kandroid Conference - www.kandroid.org

repo start

56 11th Kandroid Conference - www.kandroid.org

git commit

• repo를 이용해서 git저장소를 만들면 커밋할 때 평소와 다른 것을 발견할 수 있습니다.

57 11th Kandroid Conference - www.kandroid.org

signed-off

• commit 할 때 –s 옵션을 붙이면 됩니다.

• 해당 변경사항을 작성한 사람을 뜻합니다. – 변경사항에 대한 법적 책임을 감수하게 됩

니다.

– 공동작업읷 경우에는 여러 개의 signed-off가 들어갈 수 있습니다.

• 또한 변경사항을 해당 프로젝트에 사용해도 괜찮다고 허락한다는 뜻이기도 합니다.

58 11th Kandroid Conference - www.kandroid.org

Change-Id

• repo로 저장소를 만들면 change-id를 생성하는 commit-hook 스크립트가 자동으로 등록됩니다

• Gerrit에서 사용되는 리뷰 항목 구분자

– git commit id와는 관련이 없습니다.

– 커밋 로그에 이 항목이 없으면 gerrit에 등록할 때마다 새로운 리뷰항목으로 생성됩니다.

59 11th Kandroid Conference - www.kandroid.org

repo upload

• Gerrit에 리뷰 항목을 등록합니다.

• 만약 업로드가 완료되지 않은 브랜치가 여러개 존재하면 편집기가 열리면서 어떤 브랜치를 올릴 것읶지 확읶합니다.

• sync나 start 명령과 마찬가지로 특정 프로젝트 디렉토리만 지정해서 작업할 수 있습니다.

60 11th Kandroid Conference - www.kandroid.org

repo upload

61 11th Kandroid Conference - www.kandroid.org

repo upload

62 11th Kandroid Conference - www.kandroid.org

처음 Gerrit에 변경사항을 올리면…

• 아무도 싞경을 안씀.

• 관심을 유도해야 함.

63 11th Kandroid Conference - www.kandroid.org

리뷰어 찾아보기.

• 직젂에 해당 부분을 수정한 사람을 리뷰어로 등록

– git blame 명령

– 혹시 커밋에 signed-off 에 등록되어 있는 사람이 더 있으면 그 사람도 등록

– change-id 로 gerrit을 검색해서, 해당 변경사항을 리뷰한 사람이 있으면 그 사람도 등록

• google groups나 freenode의 #android 채널에서 메읶테이너가 누군지 물어보기

64 11th Kandroid Conference - www.kandroid.org

git blame commit id Author Change Date line number code body

65 11th Kandroid Conference - www.kandroid.org

리뷰 받기

66 11th Kandroid Conference - www.kandroid.org

리뷰 받기

67 11th Kandroid Conference - www.kandroid.org

리뷰 받기

68 11th Kandroid Conference - www.kandroid.org

Gerrit의 항목 내려받기

• 여러가지 방법이 존재하지만 하나의 항목을 받으려면 cherry-pick을 추천합니다.

69 11th Kandroid Conference - www.kandroid.org

Gerrit의 항목 내려받기

70 11th Kandroid Conference - www.kandroid.org

repo download

71 11th Kandroid Conference - www.kandroid.org

다시 리뷰 받기

72 11th Kandroid Conference - www.kandroid.org

다시 리뷰 받기

73 11th Kandroid Conference - www.kandroid.org

리뷰 끝

74 11th Kandroid Conference - www.kandroid.org

repo abandon

75 11th Kandroid Conference - www.kandroid.org

Conclusion

• 소스 리뷰 소프트웨어는 바람직한 협업을 이끌어 낼 수 있는 유용한 도구 – 구글 직원이라고 모든 것을 알지 못한다.

– 협업을 잘했을 뿐.

• AOSP에 기여하려면 Gerrit에 익숙해져야 함.

• repo를 사용하면 Gerrit을 쉽게 이용할 수 있음.

76 11th Kandroid Conference - www.kandroid.org

References

• Code Review : http://en.wikipedia.org/wiki/Code_review

• Mondrian : http://goo.gl/40joR (PDF 문서)

• Rietveld : https://code.google.com/p/rietveld

• Gerrit : https://code.google.com/p/gerrit

• Chrome Review : https://codereview.chromium.org

• Android Review : https://android-

review.googlesource.com

• Gerrit Command line Manual : http://goo.gl/gzxsj

• Gerrit REST Api Manual : http://goo.gl/8mBIR

77 11th Kandroid Conference - www.kandroid.org

References

• Repo : http://goo.gl/TNeGU

• Mylyn Gerrit Connector :

http://www.eclipse.org/reviews/gerrit/

• Mylyn Reviews : http://www.eclipse.org/reviews/

• AOSP의 manifest.xml : http://goo.gl/l5qis

• CyanogenMod 의 manifest.xml : http://goo.gl/B8aNs

• manifest.xml 의 DTD : http://goo.gl/dYwJq

• repo의 commit-hook 스크립트 : http://goo.gl/0hNyQ

11th Kandroid Conference

www.kandroid.org

Q & A