YAML 빌드팩: 구성 리포지토리 자동 유효성 검사
우리 회사에서는 Git을 사용하여 서비스 및 도구를 원격으로 구성합니다. 700개 이상의 구성 저장소가 있습니다 🚀
다음 사항에 유의하세요.
Configuration changes are error-prone. Making sure any change in configuration doesn’t break the system is important to avoid critical incidents[1].
그래서:
사용자로서 변경 사항이 올바른 형식인지 확인하여 잘못된 구성 파일로 인해 시스템 문제가 발생하지 않도록 합니다.
CI/CD는 변경 사항을 *main *브랜치에 병합하기 전에 모든 종류의 검사를 적용하는 데 사용할 수 있지만, 이를 만들기 위해 Action 또는 GitLab-CI(사용하는 도구에 따라 다름)를 도입하는 비용이 발생합니다. 일어나다. 여기서 큰 비용은 적절한 CI 정의를 갖도록 모든 리포지토리를 업데이트하려는 것입니다.
YAML 검사기
최근에 우리는 BitBucket에서 GitLab으로 마이그레이션했습니다. BitBucket에서는 작업을 수행하는 YAML Validator Pre-Receive hook[2]를 사용하고 있었지만 안타깝게도 GitLab에서 유사한 기능을 쉽게 사용할 수 있는 방법이 없습니다.
GitLab의 대안
GitLab 자동 DevOps
GitLab Auto DevOps[4]는 구성 리포지토리를 변경할 필요가 없기 때문에 문제를 해결하는 데 사용할 수 있는 좋은 후보였습니다.
GitLab Auto DevOps is a collection of pre-configured features and integrations that work together to support your software delivery process.
GitLab DevOps는 빌드팩[5]을 기반으로 합니다.
A Buildpack is a set of executables that inspects your app source code and creates a plan to build and run your application.
기존 Buildpack에는 중간에 YAML 유효성 검사기가 없으므로 일부 사용자 지정 없이는 기본 GitLab DevOps가 자동으로 적합하지 않습니다[6]
자동 테스트: YAML 유효성 검사기 빌드팩
GitLab Auto DevOps — Auto Test[7]를 사용하려면 구성 파일(Yaml 기반)을 검증하기 위한 Buildpack이 필요합니다. 이 작업을 수행하기 위해 Yamllint-buildpack[8]이 도입되었습니다 💻
발각
YAML 빌드팩을 실행하려면 저장소가 일치하는지 먼저 확인합니다. 리포지토리에 YAML 파일이 포함되어 있으면 Buildpack 이름을 인쇄하고 그렇지 않으면 스크립트를 종료합니다.
#!/usr/bin/env bash
set -eo pipefail
ymlFilesArray=$(find "${1:?}" -maxdepth 1 -regex ".*.[yml|yaml]" | grep -v '^$')
if [ ${#ymlFilesArray[@]} -gt 0 ]; then
echo "freenow/yamllint"
exit 0
else
(>&2 echo "Could not find yaml/yml files")
exit 1
fi
테스트 컴파일
이 단계는 테스트를 위한 저장소를 준비하는 것입니다. 테스트를 실행하기 전에 필요한 컴파일이 없으므로 테스트 컴파일 스크립트가 비어 있습니다. Herokuish가 성공적으로 실행되려면 파일이 반드시 존재해야 합니다.
테스트
이 스크립트는 yamllint를 사용하여 YAML 유효성 검사를 적용하는 것입니다.
yamllint 검사를 실행하려면:
Pip
yamllint
yamllint
확인 전체 스크립트:
#!/usr/bin/env bash
# bin/test <build-dir> <env-dir>
set -eo pipefail
echo "---> yamllint check..."
# GET ARGS
BP_DIR=$(cd $(dirname $0)/..; pwd)
# absolute path
BUILD_DIR=$1
ENV_DIR=$2
# CREATE THE LAYER DIRECTORY
pythonlayer="$ENV_DIR"/python
mkdir -p "$pythonlayer"
# DOWNLOAD PYTHON
echo "---> Downloading and extracting Python"
python_url=https://s3-external-1.amazonaws.com/heroku-buildpack-python/heroku-18/runtimes/python-3.10.0.tar.gzwget -q -O - "$python_url" | tar -xzf - -C "$pythonlayer"
# MAKE PYTHON AVAILABLE TO THIS SCRIPT
export PATH="$pythonlayer"/bin:$PATH
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}"$pythonlayer/lib"
# INSTALL PIP
echo "---> Installing pip"
python -m ensurepip --upgrade
# INSTALL YAMLLINT
echo "---> Installing yamllint"
pip3 install yamllint
# RUN YAMLLINT
echo "---> Validating yaml/yml files"
yamllint -c "$BP_DIR/config/yamllint-config" $BUILD_DIR
echo "---> [success] yaml/yml validation"
추가 구성
GitLab은 기본적으로 필요하지 않은 작업을 기본적으로 활성화합니다. 이로 인해 GitLab
variables
을 사용하여 이러한 작업을 비활성화하고 아래 변수를 false
로 설정해야 합니다.그리고 가장 중요한 변수는 Buildpack URL을 참조하는
BUILDPACK_URL
입니다 :-)참조:
[1] https://surfingcomplexity.blog/2021/05/29/why-do-config-changes-keep-coming-up-in-major-incidents/
[2] https://marketplace.atlassian.com/apps/1213552/yaml-validator-hook
[3] https://docs.gitlab.com/ee/administration/server_hooks.html
[4] https://docs.gitlab.com/ee/topics/autodevops/
[5] https://buildpacks.io/
[6] https://docs.gitlab.com/ee/topics/autodevops/customize.html
[7] https://docs.gitlab.com/ee/topics/autodevops/stages.html#auto-test
[8] https://github.com/freenowtech/yamllint-buildpack
Reference
이 문제에 관하여(YAML 빌드팩: 구성 리포지토리 자동 유효성 검사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mohammedalics/yaml-buildpack-auto-validate-configuration-repositories-co9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)