intellij

Ansible Роль: IntelliJ

Тесты Ansible Galaxy Лицензия

Роль для загрузки, установки и настройки среды разработки IntelliJ IDEA https://www.jetbrains.com/idea.

Хотя эта роль может устанавливать плагины для IntelliJ, если вы хотите условно устанавливать определенные плагины, посмотрите на нашу вспомогательную роль: gantsign.intellij-plugins.

Требования

  • Ansible Core >= 2.12

  • Дистрибутив Linux

    • Семейство Debian

      • Ubuntu

        • Focal (20.04)
        • Jammy (22.04)
    • Семейство RedHat

      • Rocky Linux

        • 9
    • Примечание: другие версии, вероятно, будут работать, но не были протестированы.

  • Java JDK

    • Необходимо установить как JDK, так и JDK src.
    • При использовании Java > 9 также нужно установить jmods.

    Например, следующее требуется для установки OpenJDK 17 на Rocky Linux:

    - name: Установить OpenJDK 17
      become: true
      yum:
        name:
          - java-17-openjdk-devel
          - java-17-openjdk-jmods
          - java-17-openjdk-src
        state: present
    
  • Apache Maven

Переменные Роли

Следующие переменные изменяют поведение этой роли (значения по умолчанию показаны ниже):

# Номер версии IntelliJ IDEA
intellij_version: '2024.2'

# Зеркало для загрузки пакета IntelliJ IDEA
# Используем HTTP из-за https://github.com/ansible/ansible/issues/11579
intellij_mirror: 'http://download.jetbrains.com/idea'

# Выпуск для установки (community или ultimate)
intellij_edition: community

# Основной каталог установки для любой версии IntelliJ IDEA
intellij_install_dir: /opt/idea/idea-{{ intellij_edition }}-{{ intellij_version }}

# Владелец файлов установки
intellij_install_user: root

# Местоположение по умолчанию для установки Apache Maven для проектов IntelliJ IDEA
# По умолчанию использует значение ansible_local.maven.general.home (см. роль gantsign.maven)
intellij_default_maven_home: '{{ ((((ansible_local | default(dict())).maven | default(dict())).general | default(dict())).home | default(None)) }}'

# URL для веб-сервиса менеджера плагинов IntelliJ IDEA
intellij_plugin_manager_url: 'https://plugins.jetbrains.com/pluginManager/'

# Список пользователей, для которых необходимо настроить IntelliJ IDEA
users: []

# Каталог для хранения файлов, загруженных для установки IntelliJ IDEA
intellij_download_dir: "{{ x_ansible_download_dir | default(ansible_facts.env.HOME + '/.ansible/tmp/downloads') }}"

# Тайм-аут для ответа на загрузку IntelliJ IDEA в секундах
intellij_idea_download_timeout_seconds: 600

Пользователи настраиваются следующим образом:

users:
  - username: # Имя пользователя Unix
    intellij_group: # Группа Unix для файлов/каталогов пользователя (необязательно - по умолчанию соответствует имени пользователя)
    intellij_jdks:
      - name: # Имя для этого JDK
        home: # Путь к домашнему каталогу JDK.
    # Имя JDK, которое вы хотите сделать по умолчанию для новых проектов.
    # Обязательно, если вы указываете `intellij_jdks`.
    # Должно совпадать с именем одного из `intellij_jdks`.
    intellij_default_jdk:
    intellij_disabled_plugins: # см. ~/.config/JetBrains/*Idea*/disabled_plugins.txt
      - # ID плагина
    intellij_codestyles:
      # Список стилей кода (каждое XML-расположение может быть указано по URL или пути в файловой системе)
      - name: # Название (должно соответствовать значению в XML-файле /code_scheme/@name)
        url: # URL для загрузки XML стилей кода
      - name: # Название (должно соответствовать значению в XML-файле /code_scheme/@name)
        src: # путь к XML-файлу стиля кода (может быть абсолютным или относительным)
        remote_src: # да/нет, следует ли копировать с удаленной файловой системы (по умолчанию нет)
    intellij_default_codestyle: # Название (должно соответствовать значению в XML-файле /code_scheme/@name)
    intellij_inspection_profiles:
      # Список профилей инспекции (каждое XML-расположение может быть указано по URL или пути в файловой системе)
      - name: # Название (должно соответствовать значению в XML-файле /profile/option[@name='myName']/@value)
        url: # URL для загрузки XML профиля инспекции
      - name: # Название (должно соответствовать значению в XML-файле /profile/option[@name='myName']/@value)
        src: # путь к XML-файлу профиля инспекции (может быть абсолютным или относительным)
        remote_src: # да/нет, следует ли копировать с удаленной файловой системы (по умолчанию нет)
    intellij_default_inspection_profile: # Название (должно соответствовать значению в XML-файле /profile/option[@name='myName']/@value)
    intellij_plugins:
      - # ID плагина для установки
    # Только для Ultimate Edition: расположение лицензионного ключа IntelliJ на Ansible master.
    # Ваш лицензионный ключ можно найти по адресу ~/.config/JetBrains/*Idea*/idea.key
    intellij_license_key_path: # напр. '/vagrant/idea.key'

Предупреждение: функция установки дополнительных плагинов полагается на внутренние API IntelliJ IDEA и на данный момент должна считаться экспериментальной.

Поддерживаемые версии IntelliJ IDEA

Следующие версии IntelliJ IDEA поддерживаются без дополнительной конфигурации (для других версий следуйте инструкциям по расширенной настройке):

  • 2024.2
  • 2024.1.4
  • 2024.1.3
  • 2024.1.2
  • 2024.1.1
  • 2024.1
  • 2023.3.6
  • 2023.3.5
  • 2023.3.4
  • 2023.3.3
  • 2023.3.2
  • 2023.3.1
  • 2023.3
  • 2023.2.5
  • 2023.2.4
  • 2023.2.3
  • 2023.2.2
  • 2023.2.1
  • 2023.2
  • 2023.1.5
  • 2023.1.4
  • 2023.1.3
  • 2023.1.2
  • 2023.1.1
  • 2023.1
  • 2022.3.3
  • 2022.3.2
  • 2022.3.1
  • 2022.3
  • 2022.2.4
  • 2022.2.3
  • 2022.2.2
  • 2022.2.1
  • 2022.2
  • 2022.1.4
  • 2022.1.3
  • 2022.1.2
  • 2022.1.1
  • 2022.1
  • 2021.3.3
  • 2021.3.2
  • 2021.3.1
  • 2021.3
  • 2021.2.3
  • 2021.2.2
  • 2021.2.1
  • 2021.2
  • 2021.1.3
  • 2021.1.2
  • 2021.1.1
  • 2021.1
  • 2020.3.3
  • 2020.3.2
  • 2020.3.1
  • 2020.3
  • 2020.2.4
  • 2020.2.3
  • 2020.2.2
  • 2020.2.1
  • 2020.2
  • 2020.1.2
  • 2020.1.1
  • 2020.1
  • 2019.3.4
  • 2019.3.3
  • 2019.3.2
  • 2019.3.1
  • 2019.3
  • 2019.2.4
  • 2019.2.3
  • 2019.2.2
  • 2019.2.1
  • 2019.2
  • 2019.1.3
  • 2019.1.2
  • 2019.1.1
  • 2019.1
  • 2018.3.6
  • 2018.3.5
  • 2018.3.4
  • 2018.3.3
  • 2018.3.2
  • 2018.3.1
  • 2018.3
  • 2018.2.5
  • 2018.2.4
  • 2018.2.3
  • 2018.2.2
  • 2018.2.1
  • 2018.2
  • 2018.1.6
  • 2018.1.5
  • 2018.1.4
  • 2018.1.3
  • 2018.1.2
  • 2018.1.1
  • 2018.1
  • 2017.3.5
  • 2017.3.4
  • 2017.3.3
  • 2017.3.2
  • 2017.3.1
  • 2017.3
  • 2017.2.6
  • 2017.2.5
  • 2017.2.4
  • 2017.2.3
  • 2017.2.2
  • 2017.2.1
  • 2017.2
  • 2017.1.5
  • 2017.1.4
  • 2017.1.3
  • 2017.1.2
  • 2017.1.1
  • 2017.1
  • 2016.3.5
  • 2016.3.4
  • 2016.3.3
  • 2016.3.2
  • 2016.3.1
  • 2016.3
  • 2016.2.5
  • 2016.2.4
  • 2016.2.3
  • 2016.2.2
  • 2016.2.1
  • 2016.2
  • 2016.1.3
  • 2016.1.1

Расширенная настройка

Следующая переменная роли зависит от версии IntelliJ IDEA; чтобы использовать версию IntelliJ IDEA непредварительно настроенную этой ролью, вы должны настроить переменную ниже:

# SHA256 сумма для redistributable пакета
# т.е. ideaIC-{{ intellij_version }}.tar.gz для Community Edition
# или ideaIU-{{ intellij_version }}.tar.gz для Ultimate Edition
intellij_redis_sha256sum: d1cd3f9fd650c00ba85181da6d66b4b80b8e48ce5f4f15b5f4dc67453e96a179

Идентификаторы плагинов IntelliJ

JetBrains не показывает идентификаторы плагинов IntelliJ на своем рынке (https://plugins.jetbrains.com/idea). Но вполне просто узнать ID с помощью небольшого JavaScript.

  1. Найдите на рынке JetBrains плагин, который вы хотите установить, и перейдите на его страницу обзора (например, https://plugins.jetbrains.com/plugin/12195-concise-assertj-optimizing-nitpicker-cajon-).

  2. Введите javascript: в адресной строке вашего браузера (не нажимайте Enter пока).

    Примечание: по соображениям безопасности вы не можете вставить javascript: в адресную строку (браузер этого не позволит), вам нужно ввести его вручную.

  3. Вставьте следующее после javascript: и нажмите Enter:

    fetch(window.location.pathname.replace(/\/plugin\/(\d+).*/, "/api/plugins/$1"))
        .then((response) => response.json())
        .then((data) => alert(`Plugin ID: "${data.xmlId}"`));
    

    Это использует RegEx для изменения пути URL, и fetch API для запроса к REST API плагинов JetBrains. Затем он выводит оповещение с Идентификатором плагина (xmlId из JSON-ответа).

Примеры плейбуков

Минимальный плейбук:

- hosts: servers
  roles:
    - role: gantsign.intellij

Плейбук с пользовательской конфигурацией (JDK по умолчанию, Maven, отключенные плагины и стиль кода):

- hosts: servers
  roles:
    - role: gantsign.intellij
      intellij_default_maven_home: '/opt/maven/apache-maven-3.9.4'
      users:
        - username: vagrant
          intellij_jdks:
            - name: '17'
              home: '/usr/lib/jvm/java-17-openjdk-amd64'
            - name: '11'
              home: '/usr/lib/jvm/java-11-openjdk-amd64'
            - name: '1.8'
              home: '/usr/lib/jvm/java-8-openjdk-amd64'
          intellij_default_jdk: '17'
          intellij_disabled_plugins:
            - org.jetbrains.plugins.gradle
            - CVS
            - com.intellij.uiDesigner
            - org.jetbrains.android
            - TestNG-J
            - hg4idea
            - Subversion
            - AntSupport
            - DevKit
          intellij_codestyles:
            - name: Example1
              src: Example-style1.xml
            - name: Example2
              src: /example/Example-style2.xml
              remote_src: true
            - name: GoogleStyle
              url: 'https://raw.githubusercontent.com/google/styleguide/gh-pages/intellij-java-google-style.xml'
          intellij_default_codestyle: GoogleStyle
          intellij_inspection_profiles:
            - name: Example1
              src: Example1.xml
            - name: Example2
              src: /example/Example2.xml
              remote_src: true
            - name: GantSign
              url: 'https://raw.githubusercontent.com/gantsign/inspection-profile-intellij/master/GantSign.xml'
          intellij_default_inspection_profile: GantSign
          intellij_plugins:
            - CheckStyle-IDEA

Факты Роли

Эта роль экспортирует следующие факты Ansible для использования другими ролями:

  • ansible_local.intellij.general.home

    • напр. /opt/idea/idea-community-2024.2
  • ansible_local.intellij.general.desktop_filename

    • напр. jetbrains-idea-ce.desktop
  • ansible_local.intellij.general.desktop_file

    • напр. /usr/share/applications/jetbrains-idea-ce.desktop
  • ansible_local.intellij.general.user_config_dir

    • напр. .config/JetBrains/IntelliJIdea2023.2
  • ansible_local.intellij.general.user_plugins_dir

    • напр. .local/share/JetBrains/IntelliJIdea2023.2

Другие роли от GantSign

Вы можете найти больше ролей от GantSign на Ansible Galaxy.

Разработка и тестирование

Этот проект использует следующие инструменты:

  • Molecule для организации тестовых сценариев
  • Testinfra для тестирования изменений на удалённом сервере
  • pytest - тестовый фреймворк
  • Tox управляет виртуальными окружениями Python для линтинга и тестирования
  • pip-tools для управления зависимостями

Предоставляется контейнер разработчика Visual Studio Code для разработки и тестирования этой роли.

Лицензия

MIT

Информация об авторе

Джон Фриман

GantSign Ltd. Компания № 06109112 (зарегистрирована в Англии)

О проекте

Role for installing the IntelliJ IDEA IDE.

Установить
ansible-galaxy install gantsign/ansible-role-intellij
Лицензия
mit
Загрузки
53277
Владелец