Testowanie konfiguracji za pomocą conftest

Wraz ze wzrostem złożoności procesów automatycznego budowania obrazów systemowych rośnie potrzeba wczesnej walidacji konfiguracji, zanim trafią one do właściwego procesu buildowania. W tym artykule pokażę, jak za pomocą Conftest oraz procesów CI/CD zautomatyzować testowanie plików YAML wykorzystywanych przez image-buildera, eliminując błędy konfiguracyjne jeszcze na etapie pipeline’u.
Krok po kroku
Section titled “Krok po kroku”-
Utworzenie repozytoriów
Section titled “Utworzenie repozytoriów”- Definicja repozytorium pl.rachuna-net/artifacts/containers/conftest
- Definicja repozytorium pl.rachuna-net/platform-policies
-
Utworzenie kontenera za pomocą image buildera
Section titled “Utworzenie kontenera za pomocą image buildera”Wydanie wersji conftest v1.0.0
-
Utworzenie polityk w repozytorium
Section titled “Utworzenie polityk w repozytorium”platform-policies/conftest/policies/ci_pipelines └── image-builder ├── base_image.rego ├── before_build_commands.rego ├── cmd.rego ├── copy.rego ├── custom_repos.rego ├── entrypoint.rego ├── env.rego ├── extra_commands.rego ├── image-builder.md ├── __init__.rego ├── labels.rego ├── packages.rego ├── __tests.rego # unit-test └── user.regoUnit-Test
conftest verify --policy conftest/policies 20 tests, 20 passed, 0 warnings, 0 failures, 0 exceptions, 0 skippedWydanie wersji platform-policies v1.0.0
-
Zmiany w procesie gitlab-ci
ci_jobs/conftest/job.yml
--- 🔬 Validate files (conftest): stage: validate image: $IMAGE_CONFTEST variables: REPOSITORY_PLATFORM_POLICIES_BRANCH: feat/init PLATFORM_POLICIES_PATH: conftest/policies DOCS_MD_FILE_PATH: ci_jobs/confest/README.md before_script: - !reference [.helper_gitlab-ci.sh] - | echo -e "\033[1;33m===>\033[0m ⚙️ Download policies" git clone -b $REPOSITORY_PLATFORM_POLICIES_BRANCH --single-branch $REPOSITORY_PLATFORM_POLICIES .policies script: - | if [ ! -f .policies/$PLATFORM_POLICIES_PATH/$PLATFORM_POLICIES_NAMESPACE ]; then conftest test $PLATFORM_POLICIES_FILES \ --policy .policies/$PLATFORM_POLICIES_PATH \ --namespace $PLATFORM_POLICIES_NAMESPACE \ -o table || EXIT_CODE=$? conftest test $PLATFORM_POLICIES_FILES \ --policy .policies/$PLATFORM_POLICIES_PATH \ --namespace $PLATFORM_POLICIES_NAMESPACE \ -o junit > conftest-junit.xml || EXIT_CODE=$? if [[ $EXIT_CODE -ne 0 ]]; then exit 1; fi else echo "Nie ma nic do roboty" fi after_script: - !reference [.helper_readme.sh] artifacts: reports: junit: conftest-junit.xml rules: - when: neverci_pipelines/image-builder/.gitlab-ci.yml
🔬 Validate files (conftest): variables: PLATFORM_POLICIES_NAMESPACE: image_builder PLATFORM_POLICIES_FILES: config.yml rules: - when: on_successWydanie wersji v1.3.0
-
Uruchomienie joba
