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.)