Перейти к содержанию

▍Ansible Lint

Проверка корректности синтаксиса Ansible-lint в Gitlab

Ansible-lint — это утилита для проверки корректности синтаксиса плейбука и стиля кода, которую можно интегрировать в CI-сервис. В нашем случае мы внедряем её в gitlab-ci для проверки плейбуков.

Для начала у нас должен быть настроен сам Gitlab c Gitlab-runner. После чего можно приступить к созданию простенького контейнера с самим ansible-lint:

Dockerfile

FROM alpine:3.18

RUN apk --no-cache add \
    ansible \
    ansible-core \
    ansible-lint \
    py3-pip \
    py3-jinja2 \
    py3-jmespath \
    yamllint

RUN pip3 install black

WORKDIR /code/

Собираем и пушим в свой локальный Registry

docker build -t daffin/ansible-lint .
docker tag daffin/ansible-lint:alpine registry.example.ru/ansible-lint
docker push registry.example.ru/ansible-lint

Добавим файл CI и файлы настроек линтеров в директорию с конфигами ansible.

Пример CI в Gitlab

nano .gitlab-ci.yml
stages:
  - ansible-lint

ansible-lint:
  stage: ansible-lint
  tags: [docker]
  only:
    - /^main$/
  image:
    name: registry.example.ru/ansible-lint
  before_script:
    - echo "$CI_REGISTRY_PASSWORD" docker login $CI_REGISTRY --username $CI_REGISTRY_USER --password-stdin
    - mkdir /root/.docker && echo $DOCKER_AUTH_CONFIG > $HOME/.docker/config.json
    - chmod 700 $(pwd) # FIX [WARNING]: Ansible is being run in a world writable directory
  script:
    - yamllint -f colored -c .yamllint . ; ansible-lint -c .ansible-lint --force-color .
Первые две строки после before_script нужны для авторизации в свой Registry, если использовать образ с docker hub, то можно их убрать.

Пример .ansible-lint

exclude_paths:
  - ./.git/
  - ./.github/
  - ./molecule/
parseable: true
quiet: true
use_default_rules: true
verbosity: 1
skip_list:
  - name[template]
  - no-handler

Пример .yamllint

---
ignore: |
  ./.git/
  .github/*
  molecule/*

extends: default

rules:
  braces:
    max-spaces-inside: 1
    level: error
  brackets:
    max-spaces-inside: 1
    level: error
  colons:
    max-spaces-after: -1
    level: error
  commas:
    max-spaces-after: -1
    level: error
  comments: disable
  comments-indentation: disable
  document-start: disable
  empty-lines:
    max: 2
    max-start: 2
    max-end: 2
  hyphens:
    level: error
  indentation: disable
  key-duplicates: enable
  line-length:
    max: 2480
    level: warning
  new-line-at-end-of-file: enable
  new-lines:
    type: unix
  trailing-spaces: enable
  truthy: enable

Теперь если запушить настройки ansible с нашими новыми файлами .gitlab-ci.yml, .ansible-lint, .yamllint в Gitlab, то должно запуститься задание в разделе CI/CD. Здесь же мы увидим ошибки, если они будут, а они скорее всего будут 😎

Ansible Lint в GitLab

Берём текст ошибки и идём на сайт Ansible Lint Documentation, где указаны рекомендации как правильно должен выглядеть синтаксис и правим. По итогу должно получиться так:

Ansible Lint в GitLab

Дополнительно можно прикрутить бейджик со статусом сборки в README.md

[![build status](http://gitlab.example.ru/projectname/badges/main/pipeline.svg)](http://domain.example.com/projectname/commits/main)

Взять его можно в настройках проекта, в разделе CI/CD Pipelines:

Gitlab badges

Gitlab badges

Копируем markdown и добавляем в README.md в корне проекта, коммитим, теперь статус проверки отображается на главной странице:

Gitlab status

К началу