앞장에서 우리는 CI/CD 가 필수까진 아니더라도 어떻게 요긴하게 쓰일 수 있는지 확인했었다.
이제 github actions 을 통해 hello world(?) 를 찍어보자.
hello World
만 출력할 것이고, 엄청난 스크린샷들과 같이할 것이므로 막힘을 걱정할 필요는 없다 ㅇㅅㅇ
위의 Actions 버튼을 눌러 github actions 페이지로 접속한다.
(필자의 경우는 급하게 Repository 를 만들고 스크린샷을 찍어서 비어있지만,
독자 분들은 해당 Repository 가 Android 프로젝트 기반이어야 할 것이다.)
처음에 보고 놀랄 수 있다. Android
라는 글씨는 눈을 크게 떠도 보이지 않기 때문이다.
왜인지는 모르겠지만 Android CI 는 숨겨져 있다. Android 인권(?) 을 찾아주십시요 뺴액
스크롤 하다가 아래 More continuous integration workflows
버튼을 눌러보자
이렇게 생긴 카드를 찾아 Set up this workflow
를 눌러보자
Set up this workflow
를 클릭하면 아래와 같은 화면이 나올 것이다.
자세한 내용은 다루지 않을 예정이며 간단하게 예제와 함께 언급만 할 예정이다.
(자세한 내용은 다음 단원에서 다룬다)
github actions 는 yaml
언어를 사용한다. Flutter 의 pubspec.yaml
를 접했던 사람들은 반가울 수도(?) 있다.
경험이 없는 사람들은 새 언어를 해야하냐는 두려움에 빠질 수 있겠지만, 들여쓰기(indentation
)만 주의하면 쉽게 내용을 작성할 수 있다.
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 을 실행하도록 설정한다.
어디서
동작 시킬 것인지, 무엇을
할 것인지에 대한 정보를 이야기한다.
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
를 순차적으로 실행한다
위대로만 두면 그냥 기본 설정대로만 하는 것이므로, 이번 단원의 목표인 hello world 출력
을 해보도록 하자.
- name: Print Hello World
run: echo "Hello World"
위 명령어를 들여쓰기에 맞게 추가해주면 된다.
위와 같이 작성했다면 성공이다.
이후 위와 같이 Start commit
을 눌러 적절한 commit 이름과 내용을 적어주고 Commit new file
를 눌러보자
실제 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
출력까지 완료했다.
이 과정에서 우리는 몇가지를 알 수 있었다.
사실 우리는 앞서 말한 yaml 문법보다 우분투 명령어
에 더 신경써야 한다.
앞으로 우리는 수많은 gradlew 명령어 및 우분투 명령어를 작성하게 될 것이다.
안드로이드 빌드 및 apk 추출 등을 terminal 에서 자주 하는 독자라면 접근이 쉽겠지만 경험이 없다면 이번 기회에 같이 알아가자 :)
난 프로젝트만 바로 만들고 문제가 없을 것
이라 예상하고, 바로 Github 에 연결만 시켰다.
그리고 github actions 작성한 코드를 commit
했다.
그 결과는 무엇이었는가? 바로 실패 였다
난 프로젝트에 문제가 있음을 github actions
을 통해 확인할 수 있었다.
이렇게 사람이 미처 인지하지 못한 내용들을 CI
는 충실하게 알려준다.
맞다. 단순 명령의 순차적 조합
이기 때문에 온갖 작업들을 넣을 수 있다.
하나의 파일에서 다 처리할수도 있지만, 병렬로 처리하기를 원할 경우 따로 파일을 만들어 작업할 수도 있다.
이는 CD 를 다루면서 이야기할 예정이다.
이것도 추후 이야기하겠지만 marketPlace 에 올라와 있는 일종의 라이브러리를 사용했다.
(편의상 라이브러리라 지칭하겠다.)
어마무시하게 많다. 필자도 여기에서 다양한 라이브러리들을 사용했다.
지금 우리가 java 를 설정할 때 사용했던 라이브러리는 Setup Java JDK 이다.
궁금한 독자들은 위 링크로 들어가서 보면 자세한 설명을 볼 수 있을 것이다.
간단하게 Hello World 만 이야기하고 끝날 줄 알았는데 설명이 너무 길어졌다.
다음 단원에는 예시만 설명하고 넘어갔던 on
과 jobs
에 대해 알아보고 CI 에 걸맞게 내용을 수정해보자.
(전체 코드는 1.hello_world tag 에서 확인할 수 있습니다.)