2014년 12월 31일 수요일

Crucible를 사용하여 post-commit code review 하기.

보통 code review를 pre-commit ( 커밋 전에 리뷰)를 하는 것이지만, 개발 속도를 위해서 post-commit(커밋 후에 리뷰)를 선호하는 편이다.


github에 전달된 Pull Request를 가지고 code review를 하는 것이 가장 좋지만, 이 방법은 없는 것인지 아직 모르는 상태이다.


pull request를 merge하게 되면 issue에는 아래와 같이 Activity – Source에 merge된 commits 기준으로 create review가능한 소스를 보여준다.


merge부분은 변경 사항이 없으므로 빼고 review를 만들어도 되고, 그냥 commit한 것을 모두 묶어서 review를 만들 수 있다.


스크린샷 2014-12-28 17.22.38


create review를 하게 되면 아래와 같이 crucible 내의 어떤 프로젝트에서 진행할 것인지 물어본다. 보통 jira의 project name과 통일하기 때문에 적절한 이름을 선택한다.


스크린샷 2014-12-28 17.28.01


그 다음에는 리뷰자를 선정하게 된다. 리뷰자는 여러 명 설정할 수 있고, due date(완료기한)도 설정할 수 있다.


아까 직접 연결된 이슈(아래 화면에서는 JUS-93) 외에도 추가 할 수 있는 듯하나, jira와 crucible 연결에 문제가 있어서 현재 추가 되지는 않는다.(우리 서버 셋팅문제로 보임)


스크린샷 2014-12-28 17.28.43


reviewer를 설정하고 start review를 하게 되면, reviewer의 dashboard에 해야 할 리뷰가 생성된다.


스크린샷 2014-12-28 17.29.04


reviewer는 Key인 JUS-28 을 선택하면 review화면으로 넘어간다. 왼쪽에 변경된 파일 정보를 보여주고, 오른쪽에 변경 사항을 볼 수 있다. comment하고 싶은 라인 선택하고 comment를 작성하면 된다.


스크린샷 2014-12-28 17.29.49


review가 완료되면 오른쪽 상단에 있는 complete를 누르게 되면, review가 완료되었다고 표시된다. 그러면 reviewer의 Dashboard에도 JUS-28은 빠지게 된다.


스크린샷 2014-12-28 17.41.40


Author(저자)는 review issue를 열어보면 아래와 같이 진행 상태를 볼 수 있고, 오른 쪽 상단에 있는 close를 누르면 진행 중인 reivew가 최종적으로 close되게 된다.


스크린샷 2014-12-28 17.31.15








from WordPress http://wizardfactory.wordpress.com/2014/12/31/crucible%eb%a5%bc-%ec%82%ac%ec%9a%a9%ed%95%98%ec%97%ac-post-commit-code-review-%ed%95%98%ea%b8%b0/

2014년 8월 27일 수요일

Zapier를 이용한 jira, github 이슈 동기화 하기.

스크린샷 2014-08-27 18.25.10

sync-jira-github를 사용하여 jira github 이슈 동기화 하기. 에서 소개한 것과 함께, 이번에는 zapier를 사용하여 동기화 하는 방법을 정리한다.

sync-jira-github는 JIRA sprint에 발생된 이슈를 쭉 돌면서 등록되지 않은 이슈가 있다면 등록하는 것이고, zapier의 경우에는 사용자가 스토리(zaps)를 등록한 이후부터 이슈가 등록되면 감지하여 등록하는 형태이다.

사용법은 쉽다.
스크린샷 2014-08-27 10.34.07
trigger와 action을 설정할 수 있는데, JIRA 6.x에서 new issue가 되면, github에 create issue를 하는 것이다.

스크린샷 2014-08-27 18.28.30
jira와 github의 계정을 등록하고 나면, jira에서 project로 추가적인 filter를 설정한다.
스크린샷 2014-08-27 18.30.12
그 다음 github에 등록될때 내용을 어떻게 할 것인지 설정하는데, title에 key, fields summary를 넣고 body에 fields description을 추가 했다.
스크린샷 2014-08-27 10.36.10
그리고 스토리(zaps)이름을 등록하면 완료 된다.
이제 jira에 이슈를 발행하면, 아래와 같이 task history를 통하여 동작되는 것을 확인 할 수 있다.
스크린샷 2014-08-27 18.33.42
zapier는 comment를 동기화해주거나, 상태를 같이 변경해주는 기능은 제공하지 않는다.

sync-jira-github를 사용하여 jira github 이슈 동기화 하기.

스크린샷 2014-08-27 17.51.36
jira를 github를 동기화할 방법을 찾다가, zapier 를 사용하는 방법과, npm lib인 sync-jira-github를 사용하는 두가지 방법을 찾았다.

여기서는 sync-jira-github를 사용하여 sync 하는 방법을 소개한다.

https://www.npmjs.org/package/sync-jira-github 를 다운 받는다. npm 설치하여 바로 사용할 수 있지만, 일단 마지막 커밋이 2013-4-2로 상당히 오래 되었다.

그래서 수정이 필요할 것으로 보여 내 저장소로 fork를 하고, local로 clone했다.

소스를 다운 받고 두가지를 수정하였는데, 그중에 하나는 package.json에서 jira, github npm 버젼을 최신으로 변경하였다.

또 한가지는 bin/sync-jira-github가 무조건 npm lib를 호출하도록 되어 있는 것을 상위 sync.js를 호출하도록 하였다. 

이렇게 하지 않으면 package.json에 sync-jira-github를 넣어주어야 한다.

사용법은 간단하다. project-example.json 를 따라 JIRA 계정정보와 github 계정 정보를 넣어주면 된다.

주의 할 것은 userMapping인데 jira와 github모두 협업툴이므로, asign대상을 맞추어 mapping해주어야 하는데 그 정보를 넣어주어야 한다.
“userMapping”: {
          “AlecKim”: “kimalec”,
그런데 문제가 jira에만 있는 계정이거나, JIRA issue가 담당자가 없는 경우에는 대해서는 에러가 발생하게 되어 있다. 나중에 수정할 생각인데 이 경우에는 aleckim에 할당하게 하였다.
var getGhUserFor = function getGhUserFor(jiraUser) {
     var ghuser = context.config.userMapping[jiraUser];
     if(!ghuser) {
              ghuser = ‘kimalec';
          }
     if(!ghuser) {
               throw new Error(“Can’t find ghuser for jiraUser:” + jiraUser);
     }
     return ghuser;
};

google calendar를 confluence calendar에 넣기.

http://www.google.com/calendar 에 접속하여 내 캘린더 팝업 버튼을 누르면 캘린더 설정이 나온다.
config
거기서 비공개 주소 중에 ical을 선택하면 비공개 주소 url이 나온다.
address
그 주소를 confluence calendar에 추가하면 된다.
confluence calendar로 가면 우측 상단에 add calendar가 있다.
add
추가 하는 방법이 4가지 나오는데 그 중에 subscribe by URL을 선택한다.
sub
비공개 주소를 URL에 넣고 calendar이름을 적당히 넣으면 추가 된다.

Confluence Team Calendars를 개인 Google Calendar에 넣기

넣고자 하는 Team Caledars를 상세 항목을 연다.
image2014-5-15 7-27-31

Subscribe를 선택하면 아래와 같이 넣고자 하는 URL입력하거나, google calendar에 넣을 수 있다.
image2014-5-15 7-29-22
아래와 같이 등록된 것을 볼 수 있다.
image2014-5-15 7-31-55



DDNS를 사용하는 경우에 proxy error 장애

지금 AWS에 설치된 아파치에서 proxy를 사용하여 DDNS 설정된 집 PC Server로 접속하게 되어 있다.
스크린샷 2014-08-05 5.47.49

그런데 한 번씩 AWS에서 설정된 DNS server가 iptime.org 도메인을 찾지 못하는 경우가 있다.
~$ nslookup XXXX.iptime.org
Server: 172.31.0.2
Address: 172.31.0.2#53
** server can’t find wzd.iptime.org: NXDOMAIN
그러나 PC나 핸드폰에서는 제대로 동작한다.
aleckim$ nslookup XXXX.iptime.org
Server: 210.220.163.82
Address: 210.220.163.82#53
Non-authoritative answer:
Name: XXXX.iptime.org
Address: 61.98.XXX.XXX
이 경우에는 /etc/resolv.conf에 설정된 nameserver adress를 찾을 수 있는 210.220.163.82로 변경해주면 된다.
그리고 apache2 server를 재실행해주어야 한다.

Extend Your Evaluation of JIRA, Confluence

We’re happy to extend your download product evaluation period for up to 90 days free. Here’s how to generate a new evaluation key online:
 1. Login to my.atlassian.com. You’ll arrive on the Licenses page by default.
 2. Click ‘New Evaluation License‘ to create a new key with an additional 30 days evaluation time.
 3. Apply this key to your server under the Administration > License Details page.
(If you’re an Atlassian OnDemand evaluator, please note that we do not offer extensions of 
Atlassian OnDemand. However, we offer full refunds during the first month of paid service following the end of the evaluation if you decide Atlassian OnDemand isn’t for you.  After the first paid month, we cannot offer refunds or exchanges.)
위에 글은 atlassian에 설명하고 있는 글이다. 최대 90일까지 연장 가능하다고 되어 있는데, 요청하면 계속 평가용 라이센스가 발급되었다.
1. my.atlassian.com 에 접속하여 로그인하면 자신이 구입한 license key를 볼 수 있다. 
image2014-4-5 14-52-43
2. new evaluation license를 선택한다. 
sever id를 넣어야 하는데 이 항목의 자신의 jira server에서 Administration -> System -> License ( 왼쪽 메뉴바에 있음)에서 확인할 수 있다.
image2014-4-5 14-53-1
Product  와 Server ID 를 입력하고, Generate License를 하면 새로운 License key가 생성된다. 
image2014-4-5 14-53-28
3. + 를 클릭하면, License Key 를 보여준다. 이것을 클립보드(cmd+c or ctrl+c)에 복사한다. 
 image2014-4-5 14-53-37
4. 아까 확인했던, 메뉴항목 중에 Update License가 있는데 여기다가 붙여넣기 하고,  Add를 한다. 
 image2014-4-5 14-53-48
위와 같이 License  expire가 증가 된 것을 볼 수 있다.

Confluence 에서 한글이 ???로 표시 되는 경우.

Edit할 때나, 입력할 때 한글이 정상적으로 나오는데, 입력 후에 보면 ??로 보이는 경우 
 image2014-4-5 14-50-24
Mysql의 기본 charset 에 UTF-8로 변경하면 된다. 
image2014-4-5 14-50-45

Mac에서 nfs, smb 연결하기.

네트워크에서 공유된 컴퓨터와 파일 서버에 연결하기

파일 공유가 켜져 있는 Mac 및 Windows 컴퓨터와 AFP, SMB/CIF, NFS, FTP를 사용하는 서버를 포함하여 네트워크 상의 공유 컴퓨터 및 파일 서버에 연결할 수 있습니다.

주소를 입력하여 컴퓨터나 서버에 연결하기

  1. Finder에서 이동 > ‘서버에 연결’을 선택하십시오.
  2. 서버 주소 필드에 컴퓨터나 서버에 대한 네트워크 주소를 입력하십시오.
  3. 연결을 클릭하십시오.
  4. Mac에 어떻게 연결하고 싶은지 선택하십시오.
    방문자: 공유 컴퓨터가 방문자 접근을 허용하는 경우 방문 사용자로 연결할 수 있습니다.
    등록 사용자로: 유효한 로그인 이름과 암호를 사용하여 다른 Mac에 연결할 수 있습니다. 다른 Mac에서 ‘다음 사용자만’이 선택되어 있다면, 사용하고 있는 로그인 이름이 허용된 사용자 목록에 있는지 확인하십시오.
    Apple ID 사용하기: Apple ID를 사용하여 다른 Mac에 연결할 수 있습니다. 이 Mac과 다른 Mac에서 모두 이 Apple ID를 사용하여 사용자와 그룹 환경설정에서 설정해야 합니다.
  5. 필요하다면, 사용자 이름과 암호를 입력한 다음 서버 볼륨이나 공유 폴더를 선택하십시오.
    나중에 해당 컴퓨터에 더 쉽게 연결하려면 ‘나의 키체인에 이 암호 기억’을 선택하여 컴퓨터에 대한 사용자 이름과 암호를 키체인에 추가하십시오.

공유 컴퓨터 및 서버에 대한 네트워크 주소 포맷

공유된 컴퓨터나 네트워크 상의 서버에 대한 주소를 알고 있는 경우 컴퓨터나 서버에 연결하는데 그 주소를 사용할 수 있습니다. AFP, SMB/CIF, NFS와 FTP를 사용하는 서버 뿐만 아니라 파일 공유가 켜진 Mac과 Windows 컴퓨터에 연결할 수 있습니다.
네트워크 주소는 DNS(Domain Name System) 이름과 컴퓨터에 대한 추가 경로 이름이 뒤에 오는 프로토콜(afp://와 같은)로 구성됩니다. 다른 종류의 서버에 연결하는데 사용할 올바른 주소 포맷에 대해서는 아래 표를 확인하십시오.
SMB/CIFS(Windows) 서버와 공유 폴더
다음 포맷 중에 하나를 사용하십시오.
컴퓨터 이름을 사용할 수도 있습니다. 공유 폴더를 주소 일부로 지정하지 않으면 사용자 이름과 암호를 입력한 후 선택할 수 있습니다.
NFS 서버
WebDAV 서버
DNS 이름 대신에 컴퓨터의 IP(Internet Protocol) 주소를 사용할 수 있습니다.
Finder에서는 읽기 전용 접근으로만 FTP 서버에 연결할 수 있습니다. FTP 서버에 파일을 복사하려면 FTP App을 사용하십시오.

How to upgrade jira, confluence, bamboo, crucible on linux

이번에 atlassian series 를 구매하기로 결정하여, 구매전에 3월에 설치했던 시스템을 업데이트 할려고 한다.
참고로 linux를 사용하고 있기 때문에, linux에 관하여만 작성하였다.
jira, confluence의 업데이트는 쉽다. bin파일을 받아서 실행하면 3번 upgrade가 있으므로 그거대로 하면 짠~!
스크린샷 2014-08-02 15.10.13
다만 주의해야 할 것은 최신버젼을 설치하게 되면, 기존의 plugin이 동작하지 않거나, MarketPlace에 접속되지 않을 수도 있으니 업데이트하고자 하는 버젼을 꼼꼼히 검토하자.
bamboo 의 경우에도 home directory가 분리되어서 쉽게 설치 가능한다. 원래는 백업을 해야 하는데, 무시하는 걸로~ ^^; 다만 무시하고 업데이트했다가 이전 버젼으로는 돌아오지 못한다. 주의!
최신 버젼의 압축 파일을 받아서 풀면, atlassian-bamboo-5.6.0 폴더가 만들어진다.
WF(WizardFactory)의 경우에는 jira와 confluence가 설치되는 /opt/atlassian 에 이동하여 관리한다.
폴더 이동한 후에, 그냥 /bin/start-bamboo.sh를 실행하면 되지만, 내 경우에는 mysql를 사용하고 있어서 mysql용 JDBC driver를 lib폴더에 복사해 넣어줘야 한다.
cp ../bamboo-5.4.2/lib/mysql-connector-java-5.1.29-bin.jar lib/
home(data) directory를 지정해줘야 한다.
cd bamboo-5.6.0/
vi atlassian-bamboo/WEB-INF/classes/bamboo-init.properties
bamboo.home=/var/atlassian/application-data/bamboo
그런 다음에 실행하면 문제 없이 동작한다.
문제는 crucible과 fisheye 업그레이드이다. 이 경우에는 hom directory도 분리되어 있지 않은 상황이라 어렵다.
fecru(crucible과 fisheye는 합쳐져 있다.) 는 환경 변수 FISHEYE_INST 설정이 되어 있는 경우에 그 쪽으로 DATA 파일들이 저장되고, 설정하기 않은 경우에는 압축푼 폴더(문서에서는 home directory라고 표한다.)에 폴더와 파일을 생성한다.
WF의 경우에는 FISHEYE_INST를 설정하지 않고 있었으나, 이번에 설정해서 쓸려고 한다.
~/.bashrc 에  export FISHEYE_INST=/var/atlassian/application-data/fecru 를 추가 한다.
위의 경로도 jira를 참고하여 동일한 위치에 가게 했다. 설정 및 기존에 필요한 파일 FISHEYE_INST 폴더에 복사해야 한다.
# cp /opt/atlassian/fecru-3.3.3/config.xml /var/atlassian/application-data/fecru/
# cp -af /opt/atlassian/fecru-3.3.3/var /var/atlassian/application-data/fecru/
# cp -af /opt/atlassian/fecru-3.3.3/cache /var/atlassian/application-data/fecru/
data 폴더가 존재하는 경우에는 data 폴더도 복사해야 한다.
그리고 mysql을 사용하는 경우에는 bamboo와 같이 lib폴더에 복사해 넣어야 한다.
cp ../fecru-3.3.3/lib/mysql-connector-java-5.1.29-bin.jar lib/
참고

2014년 8월 14일 목요일

행복한 직원이 충성도 높은 고객을 만든다.

미국에서 기업들은 4년 마다 고객의 절반을 잃는다.
불만고객의 96%는 조용히 그 기업과 인연을 끊는다.
신규고객 유치는 기존 고객관리보다 비용이 5배나 더 든다.
반면 충성도 높은 단골은 다른 고객들보다
4배나 많은 돈을 쏟아 붓는다.
– 케빈 켈리
직원들이 만족하는 만큼 서비스 질이 향상되고
서비스 질 향상은 곧 고객만족을 이끌어내
회사의 수익으로 이어집니다.
회사가 직원을 고객 대하듯
정성과 진심으로 보살피면,
직원은 고객이 원하는
완벽한 서비스를 최선을 다해 제공할 것이고,
이런 선순환이 기업의 미래를 보장합니다.
- 행복한경영이야기

2014년 6월 30일 월요일

Bamboo를 활용하여, Heroku로 지속적인 배포 하기

지금 blogsyncer를 개발하는 데 소스관리 시스템으로 github를 사용하고, 배포시스템으로 bamboo를 사용하고자 한다.
node.js로 개발하기 때문에 가장 적합한 서비스 플랫폼으로 heroku를 선택했다.
bamboo에서는 artifact를 만들고 그것을 업로드 하는 개념인데, 우선 node.js는 빌드 개념이 없다는 거 그리고 heroku의 경우에는 git으로 업데이트 된다는 것 때문에 헤맷습니다.
배포를 하기 위해서는 먼저 빌드를 해야 합니다. 저는 코드를 가지고 와서, mocha로 유닛 테스트 하는 것으로 build plan을 잡았습니다.
빌드를 완성하면 릴리즈를 만들 수 있고, 그걸을 배포하는 형태로 이루어집니다.

빌드 생성

Create에서 Create a new plan를 선택한다.
github의 계정과 패스워드를 입력하면 사용할 저장소를 선택할 수 있다.

서버 설정

Build Task는 source code check out, npm install, mocha 실행, parse mocha results 하면 mocha에 test결과가 bamboo에 등록된다.
우선 bamboo가 설치되어 있는 서버에 npm과 node.js를 설치해야 한다.
이거 mocha-bamboo-reporter를 설치해야 한다.
이거는 npm으로 간단히 설치할 수 있다.
$npm install -g  mocha-bamboo-reporter
이제 nodejs project에서 “mocha -R mocha-bamboo-reporter”라고 실행하면 mocha.json이 만들어 진다.

Bamboo 설정

Node.js를 사용하기 위해서는 plugin으로 “Bamboo Node.js Support”를 설치해야 한다.

Tasks 설정

빌드 생성에서 “Configure tasks”를 선택하면 Task를 등록하는 화면이 나온다.
Source Code Checkout은 이미 되어 있기 때문에 npm install과 mocha, parse mocha results를 하면 된다.
“Add task”를 선택하고 task types에서 npm 검색하여 선택한다. executable에 npm을 등록하고, command에 install만 추가 하면 된다.
 
mocha에 경우 task types를 command로 선택하고, executable에 mocha, argument에 -R mocha-bamboo-reporter 로 적어준다.
Parse Mocha results는 그냥 task types에 검색하여 추가만 하면 된다.
빌드를 하면 성공 여부가 나오고, tests에 보면 등록된 unitest에 대한 결과가 나온다.
  

Artifacts 설정

배포를 하기 위해서는 artifacts를 만들어야 한다. Configure Plan으로 간다. 거기서 job를 선택하면 tasks tab과 함께 artifacts가 있다.
지금 만드는 방법이 삽질을 통해 동작하는 방법을 찾은 것이지 좋은 방법이 아닐 수 있다. ;;
heroku의 경우에는 git으로 push해야 하기 때문에 사실 github에 등록된 code를 그대로 등록하면 된다.
그런데 copy pattern에서 기본적으로 .git폴더가 제외되어 있기 때문에 따로 정의해야 한다.
“Create definition”을 선택하여 두 개를 작성하자.
 
주의 할 것은 꼭 shared를 선택해줘야 배포시에 전달된다.
이제 새로 빌드 하면 빌드 결과에서 만들어진 Artifacts를 확인할 수 있다.

Deployment project 만들기

배포 정책을 만든 후에는 build를 하게 되면 release를 만들 수 있고, 그 release를 가지고 배포 할 수 있는데, release를 설정하는 것은 잘 기억나지 않는다. ;;
어째든 Create deployment project를 하게 되면 배포 설정하는 화면 나온다. 이름과 배포시에 사용할 build plan을 설정한다.
이제 환결 설정을 해야 한다. 아래의 화면에서 add envirement를 하면 이름과 함께 task를 구성할 수 있다.
기본적으로 “clean working directory task”와 “artifact download”가 있는데 artifact download에 “copy code”와 “copy git” 두개를 등록해야 한다.
그리고 command에 push code를 추가 해야 하는데, 이것이 정상 동작하기 위해서는 우선 서버에 heroku toolbelt가 설치되어 있어야 한다.

Heroku Server설정

Heroku dev center를 참고하여 heroku toolbelt를 설치하고 로그인 한다.
$ heroku login
Enter your Heroku credentials.
Password:
Could not find an existing public key.
Would you like to generate one? [Yn]
Generating new SSH public key.
Uploading ssh public key /Users/adam/.ssh/id_rsa.pub
github에서 code를 가지고 온다 다음에 push를 해보면 동작 확인 할 수 있다.
git push userid@heroku.com:application_name.git master
정상으로 올라갔다면 activity에서 확인 할 수 있다.
이제 환경 설정이 끝났다면, deploy 하면 build plan과 release을 선택하여 배포할 수 있다. release를 하기 위해서도 몇가지 해야 하는데 어렵지 않고 기억이 안나는 관계로 생략한다. ;;
참고