[T.Viewer 개발일기] 부록. CI/CD feat.travis 나의 경험담 2021. 7. 13. 01:25

방금 오랫만에 T.Viewer를 릴리즈했다. 파일로딩을 추가하려고 기다리고 있었는데, 이전에 개발해둔 main tab에서 로딩 기능이라도 먼저 릴리즈 해야 할 것 같아서 1.2.2 버전을 릴리즈 했다. 오랫만이라서 릴리즈하는 방법이 가물 가물 했는데, 마침 T.Viewer CI/CD에 대해서 정리도 안해놓고, 설상가상으로 travis까지 read-only mode로 전환되어 있어서...결국 오늘도 늦게 자게 되었다. 늦은김에 정리해두고 자려고 몇 글자 적어본다.

Travis

Travis에 대해서는 Tizen .Net Xamarin.Forms - CI 적용 글에서 다루긴 했었다. Travis는 독일에 있는 CI/CD 전문 서비스 기업이다. 여러모로 잘 정돈된 느낌이다. 기술적으로도 꼼꼼하게 준비가 되어있고, 문서나 사이드, UX도 만족스럽다. 사이트에 가면 회사의 철학이나 지향점, 팀원들의 사진을 볼 수 있는데 한배에 타서 단체사진을 찍은 모습이 인상적이다. 나도 나중에 회사 차리면 요트 빌려서 파티하고 거기서 단체사진 찍어야지.

한배를 탄 사람들
태어난 곳과 현재 국적인가?

원래 travis-ci.org에서 오픈소스 프로젝트는 거의 무료로 사용할 수 있었는데, travis-ci.com으로 도메인도 변경하고 조금씩 유료화를 진행하는 듯하다. 내 프로젝트 smtm, t.viewer는 모두 travis-ci.org에 있었는 6월 15일부터 서비스가 중단되었다. 다행이 travis-ci.com으로 생각보다는 쉽게 이동할 수 있었다. 지금은 무료로 한달에 10000크레딧을 주고 private, open-source 무관하게 사용할 수 있다. 시간이랑 플랫폼에 따라서 크레딧 차감량이 달라지는 것 같다. T.Viewer는 윈도우, 리눅스 크로스 플랫폼 빌드를 해야하고 사이즈도 커서 크레딧을 많이쓰게 되었다. 간단한 파이썬 프로젝트는 한달내내 써도 문제가 없을 것 같다.

릴리즈 잘 못해서 3번 추가 빌드함

T.Viewer 설정

travis 설정은 간단하다. .travis.yml 파일을 다음과 같이 작성하면 된다. 내용이 매우 직관적이라서 이해가 쉽다. 처음 생성할때는 플랫폼 별로 목적에 따라 가이드가 잘 되어 있어서 필요한것을 복사해서 붙여넣으면서 설정하면 된다.

deploy 부분이 매우 유용하다. T.Viewer의 경우 리눅스용과 윈도우용을 모두 빌드해서 릴리즈해야 하는데, 두 벌을 내가 직접 빌드해서 산출물을 정리해서 올리는 작업을 한다면 정말 힘들었을 것 같다. 그 귀찮은 일을 git tag 하나 올리면 알아서 해준다니 얼마나 고마운가.

notifications:
  email:
    on_success: never
    on_failure: change
language: node_js
node_js:
  - '10'
os:
  - linux
  - windows
before_install:
  - npm install -g codecov
install:
  - npm install
script:
  - npm run test && npm run build
  - codecov
deploy:
  provider: releases
  api_key:
    secure: P/9QttAI1XiZN0opykHKI+Gxz/QB46/mGguvoIW571Crqb3RCHiRt1wkKNyTNcx1ychWH81XpY7Z1R5Gtioy/fGeyoWYmfoRXBHvkq9N3d0yl2rCLCJV/xlBLmmK4mfFwvgd/zQqkCakXVvr+MOvLnopEl+YAQEfFN0JRc3V05sZzyadncazVf3T2n+NoiONw2z+i4gV+PzD6SfvotMrUGDrjoiqnkneRF71ubw0Hl+cJml5JQXZFgZIOcn2N2VLWIZbyt9CeBu7pFeAET2OZitTnXo/Wq5tewWEPglM97CJJpkFLdkrWeEaXrDMXYEdGJJE4XgA9nY80nRZu2C5SlKCkVQJp6Qyv4uLIiuQ3X0kw3nXubOlmSM5dZpFwKh/Co9mwt+8whsKLWRI+/BkmPBzGLBS0HARyiic5HS7esVb/58Z1EkitlJK1ijH+DX2spmjW71mO7gAiUeElAAOu37uIGH3ukE7mhOwW3A/XygklEwMpcyUT1rOwSg3Eql0yiFVanMaixrglsQwO21AyM4zoHW1RgjQ2QNS8SY9P0aMIFDEI9s7EGrgxDc/8B5Wfn/3oRbnM+f35gwXsZuoGEKa/RR6qf3fTisrsYF2X8l6TZ5dYbmt026c91D3gqjUIGX7oIaD9WcEQ2zlpINpru2WNwhoOv2wc4jxydVlmY8=
  file_glob: true
  file:
    - "dist_electron/*.AppImage"
    - "dist_electron/*.exe"
  on:
    repo: msaltnet/T.Viewer
    tags: true
  skip_cleanup: 'true'

commit을 올리면 일반적으로 commit이 올라간 브랜치에서 자동으로 CI가 돈다. Deploy를 위해서는 commit에 tag를 붙인다음 git push origin tag로 tag를 remote repo에 등록하면 된다. Tag를 하나의 브랜치로 간주해서 독립적으로 빌드하고, 산출물을 github release 탭에 올려주기까지 한다. 클라우드도 안쓰고, 서버 하나 없이 내 프로젝트를 릴리즈해서 산출물을 웹에 올려놓을 수 있다니! 참으로 좋은 세상이다. 개발하기 참 좋은 세상!

참 깔끔하고 직관적이란 말야

개발하기는 좋은데, 개발하다가 취침 시간이 계속 줄어드는 느낌이다. 졸려 죽겠다.

참고자료

Travis - About us
Travis - GitHub Releases Uploading

댓글