Daily Build and Smoke Test
◼︎ 이점
이 간단한 프로세스는 몇 가지 중요한 이점을 제공한다.
- 통합 위험을 최소화 : 팀 프로젝트가 직면하는 가장 큰 위험 중 하나는 여러 팀원이 개별적으로 작업하던 코드를 결합하거나 '통합'할 때 그 결과물인 복합 코드가 제대로 작동하지 않는다는 것이다. 프로젝트 후반에 비호환성이 발견되면 통합이 더 일찍 이루어졌을 때보다 디버깅 시간이 더 오래 걸리거나, 프로그램 인터페이스를 변경해야 하거나, 시스템의 주요 부분을 다시 설계하고 다시 구현해야 할 수도 있다. 극단적인 경우에는 통합 오류로 인해 프로젝트가 취소되는 경우도 있다. 일일 빌드 및 스모크 테스트 프로세스는 통합 오류를 작고 관리하기 쉬운 수준으로 유지하며 통합 문제가 발생하는 것을 방지한다.
- 품질 저하 위험을 최소화 : 통합에 실패하거나 문제가 발생할 위험과 관련하여 품질 저하가 발생할 위험이 있다. 매일 모든 코드를 최소한의 스모크 테스트로 테스트하면 품질 문제로 인해 프로젝트가 중단되는 것을 방지할 수 있다.
- 더 쉬운 결함 진단을 지원 : 매일 제품을 빌드하고 테스트하면 특정 날짜에 제품이 고장난 이유를 쉽게 파악할 수 있다. 17일째에는 작동하던 제품이 18일째에 고장난 경우, 두 빌드 사이에 어떤 일이 발생하여 제품이 고장난 것으로 추정할 수 있다.
- 팀 사기 향상 : 제품이 작동하는 것을 보면 사기가 엄청나게 높아진다. 제품이 어떤 기능을 하는지는 거의 중요하지 않는다. 개발자는 사각형이 표시되는 것을 보는 것만으로도 흥분할 수 있다! 일일 빌드를 사용하면 매일 조금씩 더 많은 제품이 작동하므로 사기가 높아질 것 이다.
Daily Build and Smoke Test 프로세스 자동화
◼︎ 환경
- Model : MacBook Pro (14-inch, 2021)
- CPU : Apple M1 Pro
- MENORY : 16GB
- DISK : 512 GB SSD
- OS : macOS 13.2.1 (22D68)
- TOOLS : Visual Studio Code, Java 11, Gradle
- Version Control : GitHub
- Programming Language : Java
Daily Build adn Smoke Test 프로세스의 기본 아이디어는 단순히 제품을 빌드하고 매일 테스트하는 것이다. GitHub 을 사용하고 있다면 GitHub Actions 을 사용하여 아주 쉽게 프로세스를 자동화 할 수 있다.
Source – https://docs.github.com/en/actions |
- YAML (YAML Ain't Markup Language) 파일을 사용 테스트 실행, Docker 이미지 빌드, 서버에 코드 배포 등 .. 실행할 작업의 순서를 지정하는 워크플로우를 정의한다.
- Pull Requests, 커밋 또는 릴리즈와 같은 다양한 이벤트에 의해 동작이 시작될 수 있으며, Linux, Windows 또는 macOS와 같은 다양한 운영 체제에서 실행할 수 있다.
- 워크플로에서 바로 사용이 가능한 AWS, Google Cloud 또는 Slack 등 타사 도구 및 서비스와의 통합도 지원한다.
- 워크플로는 GitHub가 제공하는 Linux, Windows 및 macOS 등 가상 머신에서 실행하거나 자체 데이터 센터 또는 클라우드 인프라에서 호스팅 러너를 설치하여 사용할 수 있다.
Gradle 을 사용하는 Java 스프링 부트 프로젝트를 자동으로 빌드하고 테스트하는 경우를 생각해보자.
① 프로젝트 레파지토리에서 .github/workflows/gradle.yml 워크플로우 파일 생성.Customizing when workflow runs are triggered
Running your jobs on different operating systems
- Red Hat Enterprise Linux 7 or later
- CentOS 7 or later
- Oracle Linux 7 or later
- Fedora 29 or later
- Debian 9 or later
- Ubuntu 16.04 or later
- Linux Mint 18 or later
- openSUSE 15 or later
- SUSE Enterprise Linux (SLES) 12 SP2 or later
- Windows 7 64-bit
- Windows 8.1 64-bit
- Windows 10 64-bit
- Windows Server 2012 R2 64-bit
- Windows Server 2016 64-bit
- Windows Server 2019 64-bit
- Windows Server 2022 64-bit
- macOSmacOS 10.13 (High Sierra) or later
- x64 - Linux, macOS, Windows.
- ARM64 - Linux, macOS, Windows (currently in beta).
- ARM32 - Linux.
레파지토리, 조직 또는 엔터프라이즈에 자체 호스팅 러너를 추가할 수 있다. 레파지토리 러너 추가는 아래와 같은 절차로 진행한다.
❶ 레파지토리 메인 > 세팅 탭 > 좌측 메뉴에서 runners 선택
❸ 러너 이미지와 아키텍처를 선택하고 안내에 따라 해당 호스트에서 러너를 설치하고 실행한다.
(참고로 장비는 오라클 클라우드에서 무료로 제공하는 VM 인스턴스를 사용하였다. )
라벨명 'self-hosted-oracle' 으로 등록 |
❹ 마지막으로 편의를 위하여 서비스로 설치하고 실행한다.
➜ Configuring the self-hosted runner application as a service
❺ 레파지토리 메인 > 세팅 탭 > 좌측 메뉴에서 runners 선택하면 추가된 러너를 확인 할 수 있다.
❻ 추가된 러너로 워크플로우를 실행하기 위하여 프로젝트 레파지토리 .github/workflows/gradle.yml 파일을 아래와 같이 수정하고 start commit 하면 워크플로우가 등록한 러너에서 실행된다.
jobs:
GitHub 제공 러너, Mac Mini 에 설치한 러너, Oracle Cloud VM 에 설치한 러너 에서 각각 실행한 결과 GitHub 제공 러너 (1m42s), 맥미니 호스트 러너(4m32s ), Oracle Cloud VM 호스트 러너(23m51s) 순으로 실행 속도가 나타났다.
주의할 점은 GitHub Actions 이 14일 동안 실행되지 않으면 GitHub 에서 자동 삭제된다.
⑷ 워크플로우 상태 노출 하기
마지막 워크플로우 실행 결과를 레파지토리 README 파일을 수정하여 노출할 수 있는데 이를 통하여마지막 빌드 결과를 확인하고 바로 조치할 수 있다.
❶ 레파지토리 메인 > Actions 탭 > 좌측 메뉴에서 앞서 등록한 Java CI with Gradle 선택
❷ Java CI with Gradle 워크플로우 실행 결과 상세 이동
❸ Create status badge 클릭 생성된 markdown 텍스트를 복사하고 README.md 파일에 내용을 추가한다.
댓글 없음:
댓글 쓰기