DevOps 및 Agile 방법론은 협업, 자동화 및 지속적인 개선을 강조함으로써 소프트웨어 개발을 변화시켰습니다. DevOps 원칙을 제 설계와 프로젝트에 적용하는 것은 효율성과 신뢰성을 향상시키는 게임 체인저였습니다. 이 글에서는 기존 임베디드 시스템 프로젝트에 대한 지속적 통합(CI) 워크플로우를 설정하는 방법을 살펴볼 것입니다. 이 프로젝트는 ATmega328P 마이크로컨트롤러를 사용합니다. 이 글을 마치면 이러한 실천 방법이 개발 프로세스를 간소화하고 품질이 더 높은 제품을 제공하는 방법을 볼 수 있을 것입니다.
DevOps는 소프트웨어 개발(Dev)과 IT 운영(Ops)을 지속적인 흐름으로 연결하는 일련의 실천 방법으로, 소프트웨어 세계에서 인기를 얻었습니다. 소프트웨어 세계에서는 소프트웨어를 개발하고 운영 팀에게 고객에게 배포하기 위해 "벽 너머로 던지는" 것이 일반적이었습니다. DevOps는 그 벽을 허물고 전체 프로세스를 자동화하는 방법을 도입했습니다. 하드웨어 세계에서는 제품 개발과 생산 사이에 유사점을 발견하며, 설계를 제조 엔지니어링 팀에게 "벽 너머로 던져" 생산을 위해 모든 것이 준비되도록 합니다.
임베디드 제품 설계에서는 여전히 소프트웨어를 생산을 통해 진행해야 하지만, 그 어느 때보다 빠르게 움직이고 가능한 최고의 품질을 제공하는 도전에 직면해 있습니다. DevOps 원칙을 사용하여 이러한 도전을 해결하고자 합니다.
DevOps 원칙을 적용함으로써 우리는 빌드-테스트-배포 패러다임 내에서 Agile 방법론을 사용하여 빠르게 반복하고 생산에 출시하고자 하는 추가 기능을 개발할 수 있습니다.
“빌드, 테스트, 배포”는 DevOps를 논할 때 자주 듣게 되는 일련의 단어입니다. 임베디드 시스템에서도 우리는 배포가 생산(그리고 그 다음에 최종 고객에게)으로 이어지기 때문에 같은 작업을 합니다. 프로젝트의 저장소에서는 임베디드 DevOps의 종단 간 워크플로우를 주도하기 위해 Gitlab CI를 사용하고 있습니다. 소프트웨어를 컴파일하거나 대상에서 테스트를 실행하거나 공식 패키지로 릴리스하는 등의 특정 작업을 수행하는 “파이프라인”이라고 불리는 것을 사용합니다. Gitlab에서 파이프라인은 이렇게 순차적으로 실행되는 작업의 집합입니다:
그림 1: Gitlab에서 ATmega328P DevOps 워크플로우와 함께 사용된 파이프라인 예시
CI 스크립트(.gitlab-ci.yml 파일)의 분석을 통해 이것이 어떻게 작동하는지에 대한 아이디어를 제공합니다.
몇 가지 사소한 세부 사항이 이 워크플로우를 기본적인 DevOps 구현에서 원활하게 실행되고 잘 문서화되며 쉽게 관찰할 수 있는 시스템으로 전환합니다. CI 워크플로우 내에 중요하게 지적할 몇 가지 미묘한 세부 사항이 있습니다.
if [ "$CI_COMMIT_REF_SLUG" == "$CI_DEFAULT_BRANCH" ]; then
export IMAGE_TAG=$CI_REGISTRY_IMAGE/$IMAGE_TYPE:latest
else
export IMAGE_TAG=$CI_REGISTRY_IMAGE/$IMAGE_TYPE:$CI_COMMIT_REF_SLUG
fi
이 로직은 메인 브랜치(즉, 병합 요청이 성공적으로 통과한 후)에서 빌드된 Docker 이미지만 "latest" 태그를 사용하도록 설정합니다. 이는 성공적인 병합 요청만이 모든 사람과 모든 파이프라인이 가져가는 최신 및 최고의 도커 이미지를 게시하도록 보장합니다.
그림 2: 병합 요청 내의 코드 커버리지
이 스크린샷에서, Gitlab은 하드웨어 인 더 루프를 사용하여 대상에서 실행된 테스트를 요약합니다:
그림 3: 대상에서 실행된 테스트 요약
마지막으로, 우리의 코드가 단위 테스트와 대상에서 모두 검증되면, 게시 및 릴리스 단계는 생산 팀이 사용할 수 있는 멋진 패키지를 생성합니다:
그림 4: 소프트웨어 패키지 릴리스
이 모든 자동화된 단계를 통해 우리는 애자일 방식으로 새로운 기능을 반복적으로 출시할 수 있습니다. 많은 기능을 개발하여 QA 부서로 보내고, 그 후 생산 팀의 패키지 릴리스 검토를 기다릴 필요가 없습니다. 여기서 모든 것이 단일 워크플로우에서 일어나며 완전히 자동화됩니다.
이 기사에서는 ATmega328P 마이크로컨트롤러를 사용하여 임베디드 시스템 개발에 DevOps 및 Agile 방법론을 적용하는 방법을 탐구했습니다. Gitlab에서 CI 워크플로우를 구현하는 이점에 대해 논의했으며, 이에는 자동화, 빠른 빌드 시간, 효율적인 테스팅이 포함됩니다. CI 스크립트를 분해하고 각 단계를 설명함으로써, 효율성과 제품 품질을 향상시키는 강력하고 간소화된 개발 프로세스를 만드는 방법을 보여주었습니다. 이 실용적인 가이드(및 저장소 내의 소스 코드)를 따르면 여러분도 자체 임베디드 DevOps 워크플로우를 설정할 수 있어야 합니다.
프로젝트의 소스 코드는 여기에서 찾을 수 있습니다:https://gitlab.com/embedded-designs/atmega328p-serial-led-control.