GitHub Actions란?
GitHub Actions의 도큐먼트를 보면 GitHub Actions는 CI/CD와 같은 workflow를 자동화 할 수 있는 도구라고 설명되어 있는데, 쉽게 말해 GitHub 내 어떤 이벤트(push, pull, merge ...)가 발생하면 해당 이벤트에 대해 정해진 동작을 실행하게 하는 도구라고 이해하시면 될 것이다.
GitHub Actions에는 event, trigger, job, step, uses, name ... 등 여러가지 키워드들이 많은데요, 코드와 주석으로 함께 설명하도록 하겠다.
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 명령어도 잘 동작된 것을 확인할 수 있다.
정리
우리는 간단하게 github actions 를 설정하고 Hello World 출력까지 완료했다.
이 과정에서 우리는 몇가지를 알 수 있었다.
1. echo 는 ubuntu 명령어 아닌가요? 설마..
사실 우리는 앞서 말한 yaml 문법보다 우분투 명령어에 더 신경써야 한다.
앞으로 우리는 수많은 gradlew 명령어 및 우분투 명령어를 작성하게 될 것이다.
안드로이드 빌드 및 apk 추출 등을 terminal 에서 자주 하는 독자라면 접근이 쉽겠지만 경험이 없다면 이번 기회에 같이 알아가자 :)
2. 어쩌다보니 CI 의 장점을 확인했네요
난 프로젝트만 바로 만들고 문제가 없을 것이라 예상하고, 바로 Github 에 연결만 시켰다.
그리고 github actions 작성한 코드를 commit 했다.
그 결과는 무엇이었는가? 바로 실패 였다
난 프로젝트에 문제가 있음을 github actions 을 통해 확인할 수 있었다.
이렇게 사람이 미처 인지하지 못한 내용들을 CI 는 충실하게 알려준다.
3. CI 이외에 다른 것도 할 수 있을 것 같은데요?
맞다. 단순 명령의 순차적 조합이기 때문에 온갖 작업들을 넣을 수 있다.
하나의 파일에서 다 처리할수도 있지만, 병렬로 처리하기를 원할 경우 따로 파일을 만들어 작업할 수도 있다.
이는 CD 를 다루면서 이야기할 예정이다.
4. java 는 어떻게 설정할 수 있었나요?
이것도 추후 이야기하겠지만 marketPlace 에 올라와 있는 일종의 라이브러리를 사용했다.
(편의상 라이브러리라 지칭하겠다.)
어마무시하게 많다. 필자도 여기에서 다양한 라이브러리들을 사용했다.
지금 우리가 java 를 설정할 때 사용했던 라이브러리는 Setup Java JDK 이다.
궁금한 독자들은 위 링크로 들어가서 보면 자세한 설명을 볼 수 있을 것이다.
결론
간단하게 Hello World 만 이야기하고 끝날 줄 알았는데 설명이 너무 길어졌다.
다음 단원에는 예시만 설명하고 넘어갔던 on 과 jobs 에 대해 알아보고 CI 에 걸맞게 내용을 수정해보자.
(전체 코드는 1.hello_world tag 에서 확인할 수 있습니다.)
'Android > CI, CD' 카테고리의 다른 글
Android앱에 Fastlane과 Firebase App Distribution을 통한 CD 자동배포 적용하기 (1) | 2024.01.07 |
---|---|
안드로이드 CI/CD (4) - GithubActions을 통한 CI/CD 예시 (1) | 2024.01.06 |
안드로이드 CI/CD (3) - GithubActions을 통한 CI/CD [on, job, workflow] (0) | 2024.01.06 |
안드로이드 CI/CD (1) - 개념 (1) | 2024.01.06 |