Github Actions 으로 Android CI/CD 구축한 썰 만들어보기 [2. Hello World]

ricky_0_k·2021년 11월 21일
2
post-thumbnail

앞장에서 우리는 CI/CD 가 필수까진 아니더라도 어떻게 요긴하게 쓰일 수 있는지 확인했었다.
이제 github actions 을 통해 hello world(?) 를 찍어보자.
hello World 만 출력할 것이고, 엄청난 스크린샷들과 같이할 것이므로 막힘을 걱정할 필요는 없다 ㅇㅅㅇ

1. 적용할 프로젝트에서 Actions 클릭


위의 Actions 버튼을 눌러 github actions 페이지로 접속한다.
(필자의 경우는 급하게 Repository 를 만들고 스크린샷을 찍어서 비어있지만,
독자 분들은 해당 Repository 가 Android 프로젝트 기반이어야 할 것이다.)

2. Android CI 선택하기

처음에 보고 놀랄 수 있다. Android 라는 글씨는 눈을 크게 떠도 보이지 않기 때문이다.

왜인지는 모르겠지만 Android CI 는 숨겨져 있다. Android 인권(?) 을 찾아주십시요 뺴액
스크롤 하다가 아래 More continuous integration workflows 버튼을 눌러보자

이렇게 생긴 카드를 찾아 Set up this workflow 를 눌러보자

3. 기본 설정 완료한 후 commit 하기

Set up this workflow 를 클릭하면 아래와 같은 화면이 나올 것이다.

1. 만들어진 내용 간단하게만 분석하기

자세한 내용은 다루지 않을 예정이며 간단하게 예제와 함께 언급만 할 예정이다.
(자세한 내용은 다음 단원에서 다룬다)

1. yaml

github actions 는 yaml 언어를 사용한다. Flutter 의 pubspec.yaml 를 접했던 사람들은 반가울 수도(?) 있다.
경험이 없는 사람들은 새 언어를 해야하냐는 두려움에 빠질 수 있겠지만, 들여쓰기(indentation)만 주의하면 쉽게 내용을 작성할 수 있다.

2. on

어떤 브랜치(ex. master) 에 어떤 작업(ex. push, pull_request) 을 할 때
github actions 을 동작시킬 것인지에 대한 정보를 이야기한다.

예제로 이해해보자.

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

위의 경우에는 master 에 push 하는 경우, master 로 향하는 Pull request(이하 PR) 이 만들어지는 경우 github actions 을 실행하도록 설정한다.

3. jobs

어디서 동작 시킬 것인지, 무엇을 할 것인지에 대한 정보를 이야기한다.

  • runs-on : 어느 OS 환경에서 실행하는지 이야기한다. (ex. ubuntu, OSX, Window 등)
  • steps : 순차적으로 실행시킬 내용들 목록을 이야기한다

예제로 이해해보자.

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'adopt'
        cache: gradle

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

위의 경우에는 ubuntu 에서 실행한다.
그리고 java 11 설정, gradlew 에 접근할 수 있도록 chmod 설정, gradlew build 를 순차적으로 실행한다

4. Hello World

위대로만 두면 그냥 기본 설정대로만 하는 것이므로, 이번 단원의 목표인 hello world 출력을 해보도록 하자.

    - name: Print Hello World
      run: echo "Hello World"

위 명령어를 들여쓰기에 맞게 추가해주면 된다.

위와 같이 작성했다면 성공이다.


이후 위와 같이 Start commit 을 눌러 적절한 commit 이름과 내용을 적어주고 Commit new file 를 눌러보자

4. 결과 확인

실제 commit 을 완료하고 Actions 로 들어가보자

무언가 CI 가 실행되고 있음을 확인할 수 있다. 이제 저 항목을 선택하고 들어가볼까?


들어가 보면 뭔가 실행되는 듯 하고 build 를 클릭해보자. 아무 build 나 눌러도 결과는 같다.


필자는 들어가는 도중 실패 메시지를 확인할 수 있었다.
만약 동작중이라면 여전히 노란 progressbar 가 실행되고 있을 것이다.
아니 바로 실패라니 내용을 확인해볼까?

에러 내용을 확인해보니 android min sdk 가 잘못 맞춰진 것 같다.

실제 프로젝트에서도 확인해보니 동일한 문제가 발생하고 있었다.


필자의 경우 sdk Version 이 잘못 맞춰져 있어 30 으로 설정되었던 내용을 31로 설정했다.


이후 master 로 변경된 내용을 반영하고 push 를 한다


일전에 우리는 on 에서 master 로 push 할 경우에도 인지하도록 되어 있는 걸 확인했으므로 github actions 에 정상적으로 잡힌 것을 확인할 수 있다. 결과를 기다려보자

정상적으로 빌드도 완료되고, 우리가 적은 echo 명령어도 잘 동작된 것을 확인할 수 있다.

TMI : commit 메시지가 이상하네요 sdk version 오류 수정 으로 하지 않으셨나요?

필자가 프로젝트내에서 pull 받고 push 해야하는 걸 깜빡해서 필자의 commit 메시지는 저렇게 보여지고 있다.
독자 여러분들은 github actions commit 하시고 프로젝트에서 pull 받고 진행하는 걸 잊지 마세요 :)

정리

우리는 간단하게 github actions 를 설정하고 Hello World 출력까지 완료했다.
이 과정에서 우리는 몇가지를 알 수 있었다.

1. echo 는 ubuntu 명령어 아닌가요? 설마..

사실 우리는 앞서 말한 yaml 문법보다 우분투 명령어에 더 신경써야 한다.
앞으로 우리는 수많은 gradlew 명령어 및 우분투 명령어를 작성하게 될 것이다.
안드로이드 빌드 및 apk 추출 등을 terminal 에서 자주 하는 독자라면 접근이 쉽겠지만 경험이 없다면 이번 기회에 같이 알아가자 :)

2. 어쩌다보니 CI 의 장점을 확인했네요

난 프로젝트만 바로 만들고 문제가 없을 것이라 예상하고, 바로 Github 에 연결만 시켰다.
그리고 github actions 작성한 코드를 commit 했다.

그 결과는 무엇이었는가? 바로 실패 였다
난 프로젝트에 문제가 있음을 github actions 을 통해 확인할 수 있었다.

사람이 인지하지 못한 프로젝트의 문제를 github actions 이 알려주었다.

이렇게 사람이 미처 인지하지 못한 내용들을 CI 는 충실하게 알려준다.

3. CI 이외에 다른 것도 할 수 있을 것 같은데요?

맞다. 단순 명령의 순차적 조합이기 때문에 온갖 작업들을 넣을 수 있다.
하나의 파일에서 다 처리할수도 있지만, 병렬로 처리하기를 원할 경우 따로 파일을 만들어 작업할 수도 있다.
이는 CD 를 다루면서 이야기할 예정이다.

4. java 는 어떻게 설정할 수 있었나요?

이것도 추후 이야기하겠지만 marketPlace 에 올라와 있는 일종의 라이브러리를 사용했다.
(편의상 라이브러리라 지칭하겠다.)

어마무시하게 많다. 필자도 여기에서 다양한 라이브러리들을 사용했다.
지금 우리가 java 를 설정할 때 사용했던 라이브러리는 Setup Java JDK 이다.
궁금한 독자들은 위 링크로 들어가서 보면 자세한 설명을 볼 수 있을 것이다.

결론

간단하게 Hello World 만 이야기하고 끝날 줄 알았는데 설명이 너무 길어졌다.
다음 단원에는 예시만 설명하고 넘어갔던 onjobs 에 대해 알아보고 CI 에 걸맞게 내용을 수정해보자.

(전체 코드는 1.hello_world tag 에서 확인할 수 있습니다.)

profile
valuable 을 추구하려 노력하는 개발자

0개의 댓글