Custom executor에서 LXD 사용하기
LXD를 사용하여 빌드마다 컨테이너를 생성하고 완료 후 정리하는 Custom executor 드라이버 구성 방법을 설명합니다.
이 예제에서는 LXD를 사용하여 빌드마다 컨테이너를 생성하고 완료 후 정리합니다. 이 예제는 각 단계에 bash 스크립트를 사용합니다. 고유한 이미지를 지정할 수 있으며, 이는 CI_JOB_IMAGE 로 노출됩니다. 단순성을 위해 이 예제에서는 ubuntu:22.04 이미지를 사용합니다. 여러 이미지를 지원하려면 executor를 수정해야 합니다. 이 스크립트에는 다음과 같은 필수 소프트웨어가 필요합니다: LXD GitLab Runner 구성 # [[runners]] name = "lxd-driver" url = "https://gitlab.example.com" token = "xxxxxxxxxxx" executor = "custom" builds_dir = "/builds" cache_dir = "/cache" [runners.custom] prepare_exec = "/opt/lxd-driver/prepare.sh" # lxd 컨테이너를 생성하고 의존성을 다운로드하는 bash 스크립트 경로. run_exec = "/opt/lxd-driver/run.sh" # 컨테이너 내부에서 스크립트를 실행하는 bash 스크립트 경로. cleanup_exec = "/opt/lxd-driver/cleanup.sh" # 컨테이너를 삭제하는 bash 스크립트 경로. Base # 각 단계인 prepare , run , cleanup 은 이 스크립트를 사용하여 스크립트 전반에서 사용되는 변수를 생성합니다. 이 스크립트는 다른 스크립트와 동일한 디렉터리, 이 경우 /opt/lxd-driver/ 에 위치해야 합니다. # !/usr/bin/env bash # /opt/lxd-driver/base.sh CONTAINER_ID="runner-$CUSTOM_ENV_CI_RUNNER_ID-project-$CUSTOM_ENV_CI_PROJECT_ID-concurrent-$CUSTOM_ENV_CI_CONCURRENT_PROJECT_ID-$CUSTOM_ENV_CI_JOB_ID" Prepare # prepare 스크립트는 다음을 수행합니다: 동일한 이름의 컨테이너가 실행 중이면 삭제합니다. 컨테이너를 시작하고 시작될 때까지 대기합니다. 필수 의존성 을 설치합니다. # !/usr/bin/env bash # /opt/lxd-driver/prepare.sh currentDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" source ${currentDir}/base.sh # base에서 변수 가져오기. set -eo pipefail # 모든 오류를 트랩하고 시스템 오류로 표시합니다. trap "exit $SYSTEM_FAILURE_EXIT_CODE" ERR start_container () { if lxc info "$CONTAINER_ID" >/dev/null 2>/dev/null ; then echo 'Found old container, deleting' lxc delete
