본문 바로가기

Android/CI CD

[Github Actions] Github Actions를 사용해보자 - 2. 기본 Setting

728x90

본 게시글은 이전 게시글에 이어서 작성된 부분입니다.

2022.03.23 - [Android/CI CD] - [Github Actions] Github Actions를 사용해보자 - 1. 기본 개념 정리

 

[Github Actions] Github Actions를 사용해보자 - 1. 기본 개념 정리

CI/CD Tool 중 Github에서 제공하는 Github Actions라는 Tool을 사용해 보았다. Github Actions을 적용하는 예제를 작성한 많은 게시글을 확인할 수 있었는데, 가이드를 보아도 필자는 정상적으로 설정하는 것

heegs.tistory.com

Github Actions에 대한 기본적인 개념에 대해서는 이전 게시글에서 확인하면 되며,

이번 게시글에서는 기본 Setting 하는 방법에 대해서 알아볼 예정이다.


이전 게시글에서 보면 알 수 있다시피, 다른 블로그들의 게시글을 확인해보면 기본적으로 생성되는 yml파일에서 기존에 작성된 부분은 건들지 않고 새로 추가만 하여서 테스트를 하는 것을 볼 수 있다.

 

그래서 필자도 동일하게 기본으로 만들어주는 yml을 수정하지 않고 사용해 보았는데,

 

 

역시나 오류가 발생하여 실패하고 말았다.

 

실행된 항목을 클릭하여 세부 내용을 확인해 보자.

 

 

이런 식으로 세부 내용이 나오게 된다.

현재 기본으로 만들어주는 yml만 사용했기 때문에 job이 하나밖에 없는 것을 볼 수 있다.

 

하단에 보면 어노테이션으로 1개의 에러가 발생하여 빌드에 실패했다고 나온다.

그렇다면 어느 부분에서 에러가 발생했는지 확인하기 위하여 build라고 쓰여있는 텍스트를 클릭해서 더 자세한 항목을 확인하도록 하자.

이때, 좌측과 중앙, 하단에 있는 build 텍스트 중 어느것을 눌러도 해당 항목을 확인할 수 있다.

 

 

 

에러 항목을 확인해보자.

Grant execute permission for gradlew

라는 이름의 step에서 에러가 발생했고,

하단의 에러 로그를 확인해보면

chmod: cannot access 'gradlew': No such file or directory

chmod 명령어를 수행하려고 하는데 gradlew 파일을 찾지 못하였다.라는 오류가 나온다.

 

자 여기서 문제가 발생한다.

우분투 환경에서 돌아가고 있는데, shell을 확인해보면 해당 경로에서 gradlew를 찾는다고 하는데 그게 없다고 한다.

일단 여기서 정확한 해결 방안을 모르기 때문에 구글링을 해보았다.

 

gradlew no such file or directory에 대한 검색을 하게 되면,

대다수stackOverFlow에서는 다음과 같은 해결 방안을 말해준다.

 

  • 일단 프로젝트의 구조를 보고, wrapper가 없으면 다음 명령어를 통해 wrapper를 생성하고
gradle wrapper

 

  • 있으면 다음 명령어를 수행해서 권한을 줘.
chmod +x gradlew

 

  • 혹시 Gradle이 문제면 다음 명령어를 사용해서 Gradle 버전을 맞춰.
gradle wrapper --gradle-version <your gradle version>

 

라고 말이다.

 

그래서 일단 해당 프로젝트 폴더에 들어가서 수행해보도록 했다.

터미널을 사용하여 명령어를 수행해야 하는데,

  • Mac os
    • Finder를 통해 Terminal을 연다
    • ls 명령어를 사용하여 현재 위치에서 확인이 가능한 디렉터리를 찾는다
    • cd fileName 명령어를 사용하여 폴더를 이동하거나,
    • cd fileName1/fileName2 명령어를 사용하여 한번이 이동한다.
      • 이동할 폴더 이름을 몇 글자 타이핑 후 Tab을 누르면 자동 완성되는 기능을 사용한다.
    • 프로젝트 디렉터리에서 위에 언급한 명령어를 모두 사용해본다.
  • Window 
    • winodw + R 을 눌러 CMD를 연다.
    • dir 명령어를 사용하여 현재 위치에서 확인이 가능한 디렉터리를 찾는다.
    • mac과 동일하게 cd 명령어를 사용하여 폴더를 이동한다.
    • 프로젝트 디렉터리에서 위에 언급한 명령어를 모두 사용해본다.

위의 순서로 실행해보면 된다.

 

 

우선, 현재 필자가 확인할 수 있는 환경에서 말하자면

 

  • Mac os
    • gradle wrapper ~ : gradle command를 찾을 수 없다.
    • chmod +x gradlew : 성공
  • window
    • gradle wrapper ~ : gradle command를 실행할 수 없다.
    • chmod +x gradlew : chmod command를 실행할 수 없다.

라고 나온다.

 

우선 다른 것은 안되고 mac에서는 성공했으니 테스트를 해보았다.

 

 

동일하게 뜬다.

 

여기까지 작업을 하고 눈치챈 것이 있다.

 

가상 머신 환경에서 돌아가고 있고 그곳에서 문제가 되는데 왜 내 로컬에서 작업을 하고 있지?

라는 것이다.

 

그래서 내 로컬에서 작업하는 부분을 생각하지 않고, 정상적으로 성공했다는 게시글과 stackOverFlow 등 여러 가지 글의 yml 파일과 비교하여 어느 점이 다른지 확인해 보았다.

 

달랐던 부분은,

  • JDK 설정하는 부분에서 cache, distribution이 없다.
  • chmod 명령어를 수행할 때 ./gradlew로 선언한다.
  • build 명령어를 수행할 때 gradlew로 선언한다.

정도의 차이가 있었다.

 

따라서 위의 경우 수를 모두 확인해 보았고, 결론부터 말하자면 

모두 정상적으로 동작하지 않았다.

 

하지만, 다른 사람들과 다를 수 있는 부분yml파일에 선언한 경로내 프로젝트 밖에 없기 때문에 프로젝트를 확인해 보았다.

 

각 명령어는 프로젝트 폴더에 gradlew가 위치해야 하고, 그것을 사용해서 명령어를 수행해야 한다.

내 프로젝트의 구조는 Dummy라는 Repo를 만들고, 그 하위예제 프로젝트를 복사해오고, README 파일이 존재한다.

 

여기서 필자의 잘못된 부분을 눈치챘다.

현재 VM환경에서는 Dummy/gradlew를 호출하고 있는 것이고,

실제 프로젝트 구조상으로는 Dummy/CleanArchitectureStudy/gradlew를 호출해야 한다.

 

그렇다면 작성했던 경로를 모두 위처럼 수정해주도록 하자.

 

- name: Grant execute permission for gradlew
  run: chmod +x ./CleanArchitectureStudy/gradlew
- name: Build with Gradle build
  run: ./CleanArchitectureStudy/gradlew build

 

그 후에 빌드를 해보도록 하자.

 

 

명령어로 chmod +x gradlew 호출했던 부분이 통과되고 그다음 Build에서 막혔다.

우선, 지금까지의 문제는 경로 설정의 문제라는 것을 확실히 알 수 있었다.

 

다른 부분을 찾아서 바꿔보고 하는 일은 삽질이 되었지만, 결과적으로 문제를 해결할 수 있었으니 다행이라고 생각한다.

혹시 어떠한 방법을 사용해도 계속해서 문제가 발생하면, 프로젝트를 생성한 폴더 구조를 확인해보고 경로를 재 설정해보길 바란다.

 

그럼 다음 오류 내용을 확인해 보자.

 

. . .

To create a new Gradle build in this directory run 'gradlew init'

. . .

* Try:
32> Run gradlew init to create a new Gradle build in this directory.
33> Run with --stacktrace option to get the stack trace.
34> Run with --info or --debug option to get more log output.

 

뭔가 길게 나오지만, 마지막에 이런 식으로 가이드가 나오게 된다.

init가 정상적으로 되지 않았으니, gradlew init를 사용해서 새로운 gradle 파일을 만들어 보라고 한다.

그렇다면 Step에 gradlew init 명령어를 수행해주는 항목을 추가해주자.

 

- name: Build with Gradle init
  run: ./gradlew init

 

와 같은 항목을 yml 파일에 추가해놓고 다시 커밋을 해보자.

 

 

드디어 정상적으로 빌드가 완료되었다.


우여곡절이 많았지만, 이것으로 드디어 

Github Actions을 프로젝트에 붙이기.

라는 아주 기본적인 설정을 완료하였다.

 

소스 코드의 문제가 아닌, 프로젝트 자체의 구조가 달라서 발생했던 문제인데 코드에서 문제점을 찾으려고 했던 것이 어이가 없기도 하고, 아예 생각도 못했다는 점에서 뒤통수를 맞은 기분이다.

 

기본적인 환경에 대해서 완전히 알고 있지 않은 상태에서 개발 툴을 벗어난 외부 작업을 하려고 하니 놓치고 있었던 문제라고 생각하고, 덕분에 앞으로 CI/CD를 적용함에 있어서 확실하게 생각하고 구현할 수 있을 것이라고 생각한다.

 

다른 작업을 추가한 게 아닌 기본적으로 붙이는 것에 이렇게 많은 시간을 소요할 거라곤 생각하지 못했지만,

드디어 첫 발을 내디뎠다.

이제부터는 기본 설정을 한 것에서 기능을 하나둘씩 붙여 확장해나갈 예정이다.

 

 

 

728x90