Skip to content
GitLabGitHub

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.


  1. Utworzenie kontenera za pomocą image buildera

    Section titled “Utworzenie kontenera za pomocą image buildera”

    Wydanie wersji conftest v1.0.0

  2.   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.rego

    Unit-Test

    conftest verify --policy conftest/policies
    
    20 tests, 20 passed, 0 warnings, 0 failures, 0 exceptions, 0 skipped

    Wydanie wersji platform-policies v1.0.0

  3. 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: never

    ci_pipelines/image-builder/.gitlab-ci.yml

    🔬 Validate files (conftest):
    variables:
      PLATFORM_POLICIES_NAMESPACE: image_builder
      PLATFORM_POLICIES_FILES: config.yml
    rules:
      - when: on_success

    Wydanie wersji v1.3.0

  4. Uruchomienie joba