(Github Actions) github actions으로 스프링 빌드하기

2022. 12. 16. 03:36CI | CD

반응형

몇 개의 프로젝트를 github actions으로 배포하면서 

좋은 경험인 것 같아서 이를 공유하려고 합니다.

 

What is github actions?

Github actions(이하 깃헙 액션)는 Github에서 제공하는 CI/CD 툴입니다.

 

CI는 Continuous Integeration의 약자로 지속적 통합을 의미하고
CD는 Continuous delivery/deployment의 약자로 지속적 제공/배포(를) 의미합니다.

 

.yml파일로 쉽게 작성할 수 있고, Github프로젝트 내에서 손쉽게 설정할 수 있고 어떤 언어이든 상관없이 설정이 가능하다는 점이 장점입니다.

 

 

🧐어떻게 사용할 수 있나?


 

 

빌드하고 싶은 리포지토리에 들어가면 이런 배너가 있습니다.

 

그 중 Actions버튼을 클릭하면

 

 

이렇게 레포지토리에 추천하는 여러 Action들을 보여주는데요,

저는 C++가 주로 사용된 레포지토리이기 때문에 C++과 관련한 Action이 가장 상단에 있는 걸 볼 수 있습니다.

 

 

만약 자바로 작성된 레포지토리라면

 

 

이런 Action들을 볼 수 있을 것입니다.

 

 

우리는 스프링 프로젝트를 빌드할 것이기 때문에 Gradle프로젝트라면 Java with Gradle, Maven 프로젝트라면

Java with Maven을 클릭하면 됩니다.

(저는 Gradle 프로젝트이기 때문에 Java with Gradle을 선택할게요)

 

 

 

Java with Gradle을 선택하면 이렇게 yml을 파일을 작성하는 화면이 나옵니다.

 

 

 

 

 

요소에 관해서 하나하나 설명을 드리면,

 

name은 이 Action의 이름입니다.

 

기본 설정은 Java CI with Gradle이라고 되어 있는데, 본인이 짓고 싶은 이름으로 설정하면 됩니다.

만약 빌드가 아니라 Test의 용도라면 'Gradle Test'와 같은 이름으로 명명하면 되겠죠.

 

 

 

 

 

 

 

다음 나오는 on, push, pull_request는 이름에서 유추가 가능합니다.

위 사진에 나와있는 설정은 "main 브랜치에 push 했을 때 혹은 main브랜치에 pull request가 생성됐을 때 실행하라."입니다.

 

만약 다른 브랜치에 대한 설정을 추가하고 싶다면, main 브랜치처럼 따옴표로 감싸, 리스트 안에 추가하면 됩니다.

 

 

 

 

 

 

 

permissions은 이 action에 대한 권한을 설정할 수 있습니다.

기본 설정으로는 content를 읽는 용으로 설정되어 있네요.

 

 

권한에 대한 지원이 필요하다면 아래 문서를 참고해보세요.

 

Assigning permissions to jobs - GitHub Docs

Overview You can use permissions to modify the default permissions granted to the GITHUB_TOKEN, adding or removing access as required, so that you only allow the minimum required access. For more information, see "Authentication in a workflow." You can use

docs.github.com

 

 

다음은 가장 중요한 Jobs입니다.

 

Jobs 바로 자식 요소를 보면 build라는 이름을 가진 job을 확인할 수 있습니다.

 

언뜻 보기에는 build라는 이름이 특정한 동작을 지칭하는 것이 아닌가 하는 생각이 들 수 있는데요,

 

 

build는 job의 이름을 명명한 것입니다.

 

만약 우리가 수행할 job이 build가 아니라 test에 관한 job이라면 이름을 test로 변경하면 되겠죠?

 

 

다음으로 나오는 runs-on은 아래의 명령이 실행되는 환경을 뜻합니다.

주로 ubuntu 환경이 될 것이고, 다른 환경을 지정하는 것도 가능합니다.

 

예를 들어, "나는 꼭 mac os에서 다음 job을 실행해야 한다." 라면 macos-latest를 사용하면 됩니다.

물론 특정 버전을 명시하는 것도 가능합니다.

 

jobs:
	build:
    	runs-on: macos-11
        step:
        	...

이런 식으로 말이죠.

 

latest를 사용한다면, 현재 깃헙액션에서 어떤 버전이 latest로 지정되어 있는지 확인이 필요합니다.

 

대부분의 경우에는 큰 문제가 없겠지만, 특정 버전에서만 빌드되는 앱일 수 있으니까요.

 

 

 

 

 

 

 

그리고 아래에는 위에 명명한 'build'라는 job을 수행하기 위한 step들을 나열해야 합니다.

 

기본 step은 uses, name, uses, with 등으로 구성되어 있네요.

 

설정된 첫 번째 step은 JDK를 11 버전으로 설정하는 것입니다.

 

 

 

?? 이런 상세한 동작은 어디서 확인이 가능한가요??

 

 

 

GitHub Marketplace: actions to improve your workflow

Find the actions that help your team build better, together.

github.com

 

 

Github에서는 여러 동작들을 이런 market place에서 제공해주고 있습니다.

물론 대부분 사용자에 의해서 만들어진 오픈소스 저작물입니다.

 

 

여기에서 원하는 것을 찾을 수 있습니다.

 

 

 

그리거 대망의 마지막 스텝인 Gradle입니다.

 

Gradle 역시 마켓플레이스에서 찾을 수 있고, 여러 방식으로 사용 가능합니다.

 

 

기본으로 설정된 명령은 build 명령인데요,

arguments는 ./gradlew 바로 다음에 나오는 명령입니다.

 

 

그렇기 때문에 bootRun, build, test 같은 기본 명령어들이 나올 수 있겠죠.

 

 

주로 프로젝트를 배포하거나 빌드할 때 환경을 분리해서 많이 사용하는데요,

환경이 분리됐을 경우

 

 - name: gradle build
   uses: gradle/gradle-build-action@v2
   env:
     SPRING_PROFILES_ACTIVE: 사용된 환경
   with:
     arguments: build

 

이렇게 사용할 수 있습니다.

 

env는 이름 그대로 환경변수이기 때문에, 외부 주입이 필요한 OS상의 변수들 역시 주입이 가능합니다.

 

 

 

그러면 최종적으로 최초의 yml 사진과 같은 파일이 완성되는 것이죠.

 

 

 

🧐나가며


지금까지 깃헙 액션으로 Gradle 프로젝트를 빌드하는 것을 실습했습니다.

 

깃헙 액션은 단순히 빌드뿐만 아니라 자동화된 테스트, 배포 등 다양하게 활용 가능하고,

무엇보다 github자체에서 쉽게 활용할 수 있기에 자주 사용되곤 합니다.

 

 

다음에는 AWS상에 배포하는 실습에 관한 글을 작성해보겠습니다.

 

 

 

 

반응형