Jenkins + JsHint(JsLint) или смотрим метрики javaScript на Jenkins-е

    Здравствуйте. Получил такое задание, в принципе все ясно из названия темы.
    О том как я этого достиг, шаг за шагом, будет следующий пост.
    Если что не так — критика приветствуется, это было так сказать исследовательское задание, и перед началом работы над ним у меня не было понятия о данном инструменте, зачем он и так д…
    В процессе исследования многие вопросы прояснились.


    Суть задания поподробней.
    Нужно было чтоб в проекте на Jenkins-e отображался график и небольшая статистика по метрикам JavaScript-кода из проекта.
    При этом обязательным условием в качестве анализа js-кода было использование только JsHint, тоисть JsLint не проходит.

    Начался сбор информации, так как такое слово я услышал впервые. У Jenkins-а есть огромная библиотека плагинов и соответственно кто-то уже задавался данным вопросом. Так что сначала искался Jenkins-plugin.
    Плагин был успешно найден, но прикрутить его к серверу мне не получилось.
    Вот линк на плагин, там же и есть информация как его прикручивать.
    http://www.boxuk.com/labs/jslint-jenkins-plugin/

    Дальше поиск меня привел к nodeJs и его плагину(npm) jshint.
    Дальше шаг за шагом, что нужно сделать, чтоб получить на Jenkins-е анализ кода с помощью JsHint.

    1. Инсталлируем nodejs

    2. Устанавливаем jshint-npm:
      npm install -g jshint
      Документация:
      https://npmjs.org/package/jshint

    3. Для игнорирования не нужных папок и файлов создаем в root-папке проекта (где лежит pom.xml) файл с названием
      .jshintignore
      к примеру мы хотим проигнорировать все файлы из следующей директории src/main/webapp/resources/js/lib/
      то в файле .jshintignore так и напишем
      src/main/webapp/resources/js/lib/

    4. Файл .jshintignore можно конфигурировать с помощью регулярных выражений «minimatch»
      https://github.com/isaacs/minimatch

    5. Инсталлируем Violation-Plugin для Jenkins, он поддерживает(читает) различные метрики кода в том числе jslint/jshint
      https://wiki.jenkins-ci.org/display/JENKINS/Violations

    6. После инсталляции плагина, пере запускаем Jenkins, заходим в конфигурацию проекта и там находим флажок «violations».
      Открываем и видим, что он уже может прочитать xml-файл с jslint метриками кода.

    7. Ну и наконец самая главная команда, ради которой все эти пляски с бубном затевались.
      Эту команду пишем в конфигурации проекта как «запустить shell-команду».
      jshint ./src/main/webapp/resources/js --jslint-reporter > ./target/jslint.xml
      запускаем ранее установленный jshint-npm как параметр передаем папку с js фалами для анализа, при этом говорим, что нам отчет нужно формировать в стиле jslint, так как наш violation-plugin может читать только jslint-report. и удачно все пишем в файл по указанному пути.

    8. В violation-plugin указываем путь к нашему
      ./target/jslint.xml

    9. Все, готово! Можно запускать и радоваться графиком и статистикой.


    Надеюсь кому-то пригодится.
    Всех новичков прошу ко мне, буду стараться регулярно что-то писать: j-web-dev.blogspot.com/
    P.S. За блог сильно не пинайте, никто профессионалом не рождается. )
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 12

      +1
      > Все, готово! Можно запускать и радоваться графиком и статистикой.

      В качестве логического завершения можно было бы показать этот пресловутый график и статистику.
        0
        ))) Танцы с бубнами, были 3 недели назад, я локально сделал пример, задокументировал, и удалил наработки исследования. Так что не смогу прикрепить скрин.
        0
        Пользуюсь тем же набором плагинов с теми же настроками. Проблема: Jenkins (точнее Violations) не показывакт детальный отчет о найденых ошибка JSHint. Показывается только количество ошибок в каждом файле. При клике на имя файла на странице с отчетом открывается пустая страница — ни текст ошибк, ни номераё строки не выводится. Не сталкивались с такой проблемой?
          0
          Пока не могу ответить, так как не знаю прикрутили ли уже на главном сервере это. Этим занимаются другие люди, и очевидно что будет такая же ошибка. Думаю если вылезет, то передо мной будет такой же вопрос. Ответ на вопрос — нет, не сталкивался.

          А тот плагин что я в начале поста указывал, прикручивать не пробовали? У меня не прикрутился, возможно я делал что-то не так…
            0
            Нет, нам этот плагин не очень подходит — внутри у него жестко зашитый форк JSLint с не менее жестко забитыми правилами, нам же нужен JSHint с кастомным конфигом.
              0
              Можно попробовать этот путь и потом свернуть. ))
              Имею в виду, что в итоге(в конце) можно просто скармливать плагину jshint.xml, может он себя поведет по другому чем обычный «violation plugin».
              Это просто идея, может там такое не возможно, не помню.
            +1
            Не знаю актуально для вас еще это, но я нашел решение.

            Нужно в выходном файле в тегах file заменить путь на абсолютный

            sed -E 's?<file name="(.*)\?">?<file name="'`pwd`'/\1">?' target/jshint.xml > target/jshint-proper.xml
            


            и использовать уже измененный файл.
              0
              Ухуххх, спасибо, пока что не актуально, но уверен, что может быть актуально. )))
            0
            может я что-то упустил, но зачем инсталить nodejs?
              0
              JSHint CLI через него запускается
              0
              чётко! всё установил по вашему описанию и наслаждаюсь.
                0
                Пожалуйста. ))

              Only users with full accounts can post comments. Log in, please.