[Android] Github Action 으로 CI 구축 하기(Feat : cannot access gradlew)

Choi Sang Rok·2022년 4월 25일
3

ktlint를 적용하여 코틀린 컨벤션을 맞추는 과정에서 코드를 작성한 후에 늘 ktlint를 실행하여 확인해야 하는 걸까? 라는 의문을 가지게 되었습니다. 이를 해결하기 위해 CI라는 개념을 알게 되었고 저를 괴롭히던 의문의 cannot access gradlew 오류와 함께 글을 쓰겠습니다.

개발에 있어 CI/CD를 구축하는 것은 매우 중요합니다. 기업에서는 CI/CD 엔지니어를 따로 채용할 정도로 자동화 배포 환경을 구축하고 관리하는 것을 중요시 합니다.

❓ CI/CD란

애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 제공하는 방법

기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포입니다.

개발자가 개발한 애플리케이션이 사용자에게 제공되기 위해서는, 컴파일 → 빌드 → 배포하는 과정을 거쳐서 제공됩니다. 이 때, 우리는 배포하는 작업 전에 미리 오류를 파악하고 해결해야 합니다.

CI/CD를 통해 이러한 단계를 자동화 하여 애플리케이션 공급을 더 수월하게 할 수 있었습니다. 만약 이러한 시스템이 없다면 오류가 발생할 때 마다 컴파일 → 빌드 → 배포 과정을 반복해야 했을 겁니다.

본 글에서는, Github Action을 이용해 Kotlin 컨벤션을 검사해 주는 도구인 ktlint를 ci에 적용하여, pull request시 자동으로 적용될 수 있도록 구현해 보겠습니다.


🦸‍♂️ Github Action

소프트웨어 workflow를 자동화 할 수 있도록 도와주는 도구

Github 에서의 workflow가 무엇이냐면, 하나 이상의 작업을 실행시키는 자동화 프로세스를 말합니다. job 단위로 구성되어 있고, 어떠한 Event에 의해 트리거 됩니다. 이를 정의하는 파일인 workflow 파일은 .yml로 작성되고 임의의 깃허브 레포지토리를 myrepo 라고 한다면 아래 경로에 저장됩니다.

💡 /myrepo/github/workflows

.yml 파일을 생성해야 하는데, 이에 대한 기본적인 템플릿을 Github에서 제공합니다.

Actions에서 ci를 검색하면 Android CI에 대한 템플릿을 제공합니다. configure을 클릭합니다.

기본으로 제공되는 템플릿을 잠시 살펴 보자면,

workflow의 이름은 Android CI이고, master 브랜치에 push나 pull request가 발생했을 때 실행된다는 뜻 입니다.

Job은 여러개일 수 있지만, 현재 Job은 한개이고 ubuntu 최신 버전에서 실행되며 steps에서 지정한 action을 수행합니다.

적용하는 방법은 간단합니다, start commit을 누르면 repository에 생성이 됩니다. 저는 develope에 pull request를 진행할 때 마다 ktlint를 적용시키기 위해 아래 코드를 삽입하였습니다.

     - name: Check ktlint format
        run: ./gradlew ktlintCheck

적상적으로 작동이 된다면, Github Action 탭에서 아래와 같은 파이프라인을 확인할 수 있게 됩니다.


❗ 혹시라도 cannot access ./gradlew 오류가 발생한다면?

필자같은 경우 위 에러 때문에 하루동안 삽질을 했어야 했습니다.. 해결 방법은 의외로 간단했습니다.


위와 같이 모든 파일들이 PlayBridge라는 디렉토리에 감싸져 있었고, .github가 가리키는 경로에 gradlew이 없었기 때문에 발생하였습니다.
가상머신에서 스크립트가 실행이 되는데 상대 주소가 얽혀 버리기 때문에 발생하는 오류였습니다. PlayBridge 안의 내용물을 밖으로 꺼내고 해결할 수 있었습니다.


참고 자료 :
https://sungbin.land/github-actions-으로-안드로이드-ci-cd-구축하기-1aaaa6595c4a https://zzsza.github.io/development/2020/06/06/github-action/

profile
android_developer

4개의 댓글

comment-user-thumbnail
2022년 4월 28일

مرتبة مرتبة سهل الفهم

답글 달기
comment-user-thumbnail
2022년 4월 28일

어렸을땐.. 어머니가 CD플레이어를 항상 틀어주셨습니다.. 추억이 생각나는 글이네요 :)

답글 달기
comment-user-thumbnail
2022년 4월 30일

선생님 아직 오류가 뜨는것 같은데요..

답글 달기
comment-user-thumbnail
2023년 1월 29일

덕분에 시간을 단축시켰습니다. 똑같은 에러였는데 겨우 찾았네요 ㅜㅜ 감사합니다..

답글 달기