이전부터 팀들과 함께 해서 하나 만들어오던 알람 안드로이드 프로젝트가 있어서 Circle CI 도 같이 공부할겸해서 빌드를 진행해 보았는데 gradle 관련해서 문제가 떠서 포스팅을 한다.


문제 상황

로컬에서 빌드가 잘 되던 프로젝트(안드로이드)를 Circle CI에 올렸더니 아래와 같은 문제가 발생하였다…

  • Exit code: 126
  • ./gradlew: Permission denied
  • Action failed: gradle dependencies

Error


문제 해결

  • Google에서 검색을 간단하게 해본 결과 아래처럼 설정을 해두면 된다고 한다.
  • chmod +x gradlew을 통해서 gradlew에 실행권한을 주면 된다.
...
dependencies:
    override:
        - chmod +x gradlew
...


참고자료

Circle CI에서 백그라운드 프로세스를 어떻게 진행해야 하는지에 대한 간단한 예제입니다.


환경

  • Circle CI
  • Background Task


문제 상황

Selenium을 한번 실습해보면서 서버를 띄워야하는데 서버 띄우는 부분을 클라이언트에서는 shell을 2개를 띄우고 실행하면 되지만 Circle CI에는 하나의 shell에서만 돌아가서 서버를 띄우는 상황이 생기게 되면 “백그라운드 프로세스로 돌리고” 나머지 과정을 진행해야 한다.

처음에는 간단하게 ‘&’를 뒤에 붙였지만… Circle CI에서는 오류가 발생하였다. 사실 처음에 위에 오류가 나는 문구조차 보지 못해서… 한참을 삽집을 했다. 여기서 교훈 = 뭐든지 자세하게 보고 자세히 읽자…


Error

문제가… 서버에 있다… 브라우저를 띄우지 못한다… 가상 모니터를 띄워야한다의 등등 이야기가 다 나왔고 시도를 해봤지만… 허허 등하불명이라 했던가 위에 문제를 찝어주었고 심지어 해결책까지 아래 처럼 나와있었다. (글을 자세하게 읽고 똑바로 읽도록 합시다 ㅠㅠ)


Recommendation


문제 해결

  • circle.yml 파일에 아래처럼 간단하게 코드를 수정해주면 가능하다.:)
  • background: true를 백그라운드로 돌리고 싶은 명령어에 추가로 옵션을 주면 된다.
...
pre:
    - pip install -r requirements.txt
post:
    - python -m http.server 8000:
        background: true
...

업데이트(2018.02.16): 이전 글에서는 3.6.0을 이용하는 방법이었는데 최신 python 버전이 나왔을 때 이를 사용하는 방법으로 내용을 변경하였다.

Circle CI에 python project를 올려서 테스트 및 빌드를 진행하였는데 python 3.6.0의 버전을 찾을 수 없다고 나와서 그걸 간단하게 해결한 내용을 포스팅에 옮기려 한다. 처음으로 코드를 올리는 글이 아닐까 싶다.


문제 상황

맥을 구매하고 파이썬 환경을 세팅하는 과정에서 홈페이지를 찾아보니 3.6.0이 있어서 가장 최신 버전으로 맞춰서 설치하였고 팀이 모임이 있어서 만났을 때 프로젝트 진행도 파이썬 3.6.0으로 진행을 하자고 결정하였다.

회의가 있어서 팀이 모이고 로컬에서 한번 테스트를 한 후에 Circle CI에 올리는 과정에 있어서 다음과 같이 빌드 오류가 나왔는데… “파이썬 3.6.0의 버전을 찾지 못하겠다”고 나왔다.

Problem

글을 읽어보면 3.6.0b1은 된다고 하기도 하고 리스트를 출력해서 직접 보고 설치를 부탁한다 등등 글이 나와있다. 하지만 이런 경우를 다른 사람들도 접했을 수도 있을까 해서 StackOverflow를 들어갔다.

역시나 아니나 다를까 같은 문제에 직면한 사람이 있었다.


StackOverflow Answer

문제 해결

  • machine에 있는 pre에 다음과 같은 명령어를 주면 된다고 한다.
  • cd /opt/circleci/.pyenv; git pull
...
machine:
    pre:
        # pull latest python versions from "circleci/.pyenv"
        - cd /opt/circleci/.pyenv; git pull
    python:
        version: [python version that you want]
...
  • 아무래도 아직까지 파이썬 3.6.0이 최신이라서 현재 Circle CI가 돌아가게 되는 원격 컴퓨터 혹은 컨테이너에서는 지원을 하지 않아서 machine에 설정을 해줄 때 .pyenv 폴더로 가서 최신 코드를 pull받고 진행을 하는것 같다.

참고자료

문서를 공유해서 동시작업을 하거나 하다보면 문서의 내용이 겹칠 수도 있고 나아가 이전에 작업했던 내용을 다시 돌려야 하는 상황이 올 수 있다. Git과 같은 개념으로 Merge나 복구 개념은 없지만 시간별로 문서를 기록해놓은 부분이 있기에 그 부분을 어떻게 사용하는지를 포스팅해보자


Google Docs란?

  • 구글에서 서비스중인 웹에서 사용 가능한 오피스 도구이다. 전문적인 용어로 SaaS라고도 부르지만… 웹 오피스 도구라고 편하게 부르는거 같다.
  • 많이 사용하는 특징을 뽑자면 브랜드 네임, 공유 그리고 동시 작업 정도가 되겠다.


사용방법

  • 좌측 상단에 “파일 - 업데이트 기록 보기”를 클릭합니다.

File and Update Log


  • 클릭하면 다음과 같은 화면이 나오는데 우측 하단에 “버전 자세히 보기”를 클릭하면 업데이트 및 수정 내역을 더 자세하게 볼 수 있습니다.

Update Log


  • 다음은 “버전 자세히 보기”를 클릭했을 때 나오는 화면이며 지운 내용에 대해서 지워진 표시가 되어있음을 확인 할 수 있습니다.

  • 내용이 추가가 되면 초록색 음영으로 표시가 됩니다.

Specific


  • 해당 버전을 눌러서 “버전 복원”을 클릭하면 해당하는 내용으로 복구되며 현재 작업하던 내용은 바로 최근에 “업데이트 내역”으로 들어가게 됩니다.

Restore

CI에 대해서 간략하게 알아보고 Circle CI와 GitHub에 있는 하나의 Repository를 연결시켜서 build후 Commit과 push를 했을 때 빌드가 자동화되는 과정을 시도해본다.


CI(Continuous Integration)?

  • CI는 Continuous Integration의 약자로 자동으로 빌드를 진행하고 테스트를 진행한 후에 코드를 통합하는 소프트웨어 개발 방식입니다.
  • 대표적으로 Jenkins, Circle CI, TeamCity 그리고 Travis CI가 있습니다.


Circle CI의 가입과 GitHub의 연동

  • Circle CI의 홈페이지에 들어가서 Sign Up For Free를 선택한다.

  • 해당 Sign Up For Free를 선택하면 아래 스크린샷과 같은 화면이 나오는데 여기서 “Authorize GitHub”를 누른다.

Circle CI Sign Up


  • 누르고 나면 아래와 같이 GitHub에 내 계정과 내가 Collaborator로 추가된 유저들이 나오는데 여기서 Repository(Circle Ci와 연동하고자 하는)의 Admin으로 설정되어 있는 유저를 선택합니다. 저의 경우에는 제 Repository를 선택하기 위해 저인 TWpower를 선택하였습니다.

Add Projects


  • 그리고 나서 이제 통합을 원하는 프로젝트를 선택 합니다! 제 경우에는 교양 시간 때 10분만에 완성했던 틱택토 코드를(통합 실습을 위함!) 작성한 Repo를 선택하였습니다. 해당 프로젝트 옆에 있는 “Build Project”를 선택하시면 빌드가 시작됩니다. 메일로 새로운 키가 추가 되었다고 오네요.

Select Project


  • 빌드를 마치면 아래와 같이 결과를 보여줍니다. 현재 아직 테스트 코드가 없어서 아래와 같이 NO TESTS라는 문구를 보실 수 있습니다.

After Build


  • 이제 외부에서 Local에서 코드를 변경하고나서 GitHub에 Push하면 어떤 일이 벌어지는지 보도록 합시다. Local에 있는 코드를 살짝 변경해서 Commit 하고 Push를 진행해 봅시다.

Edit Code


  • Push를 하게되면 아래 사진과 같이 Build가 자동으로 진행되며 메일도 오는걸 확인 할 수 있습니다:)

After Commit and Push


  • 아래가 메일이며 여전히 테스트 코드는 추가되지 않아서 NO TESTS라고 나옵니다.

Build Mail


  • 다음에는 TEST를 돌리고 환경설정까지 같이해서 yml파일을 설정해서 테스트까지 올려보는 것을 할 예정입니다.:)