JavaRush /Java блог /Random UA /Кава-брейк #102. Упаковка Java-додатків за допомогою Mave...

Кава-брейк #102. Упаковка Java-додатків за допомогою Maven та GitHub Actions

Стаття з групи Random UA
Джерело: Dev.to У цій публікації показано, як створювати робочі процеси, які упаковують програму Java за допомогою Maven, а потім зберігають її як артефакт або публікують у GitHub Packages. Кава-брейк #102.  Упаковка Java-додатків за допомогою Maven та GitHub Actions - 1

Середовище розробки

За представленим тут посиланням ви можете знайти репозиторій з вихідним кодом. Це проста програма Spring Boot, яка витягує імена студентів з бази даних. Програма виконує завантаження за допомогою Spring Initializr. Для залежностей ми додали Spring Web, який використовують для створення веб-додатків із використанням Spring MVC. Цей пакет також використовує Apache Tomcat як вбудований контейнер за умовчанням. Ми також використовували Spring Data JDBC для збереження даних у SQL за допомогою простого JDBC, і PostgreSQL Driver, який дозволяє Java-додаткам підключатися до бази даних Postgres з використанням стандартного, незалежного від бази даних Java коду. Для локальної розробки ми можемо запустити екземпляр Postgres із Docker, використовуючи наступну команду:
docker run -d --name postgresDB -p <port>:5432 -e POSTGRES_PASSWORD=<YourPassword>-v /postgresdata:/var/lib/postgresql/data postgres:latest
Spring Boot слід багаторівневою архітектурою, в якій кожен рівень взаємодіє з шаром безпосередньо під або над ним. Ми виконували цю практику і реалізували Controller, Service і Repository всередині нашого додатку та продемонстрували принципи впровадження залежностей. Вихідний код також містить клас StudentConfigякий просто вставляє студента в базу даних. Після успішного настроювання середовища розробки та написання деякого коду ми вирішабо перенести нашу роботу в систему керування вихідним кодом, в даному випадку GitHub. Тепер нам потрібно зібрати код та опублікувати його як пакет Maven. Цей процес можна виконати вручну, але ми хотіли б, щоб він виконувався автоматично, коли зміни вносяться у гілку main. Так ми уникнемо ручних завдань під час публікації нової версії. Як і більшість інших речей, цю проблему можна вирішити кількома способами, і ми будемо використовувати два різні підходи. По-перше, ми опублікуємо наш пакет як артефакт складання та зробимо його доступним для завантаження, а при другому підході ми опублікуємо пакет у репозиторії GitHub Packages Maven .

Зберігання даних робочого процесу у вигляді артефактів

У файлі main.yaml кілька перших рядків повідомляють нам, які події запускають робочий процес. Крім запитів push і pull в основній гілці, ми також додали тег workflow_dispatch , що дозволяє запускати робочий процес вручну. У розділі “Завдання” ми визначабо завдання build , яке запуститься у засобі виконання Ubuntu. Перші два кроки перевіряють основну гілку з GitHub та налаштовують JDK (Java Development Kit). Далі ми створюємо проект та налаштовуємо кеш для Maven:
- name: Build Maven project run: | mvn -B package --file pom.xml -Dmaven.test.skip mkdir staging && cp target/*.jar staging - name: Встановити cache для Maven use: actions/cache@v2 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2
Після завершення складання проміжний каталог міститиме створений файл .jar. Кожне завдання в робочому процесі виконується в новому віртуальному середовищі, що означає, що після виконання завдання build ми не можемо отримати доступ до цього середовища і наш файл .jar зникне. Ось де відбувається наш останній крок, який завантажує артефакти з вашого робочого процесу, дозволяючи вам обмінюватися даними між завданнями та зберігати дані після завершення робочого процесу.
- name: Persist workflow data як artifacts uses: actions/upload-artifact@v2 with: name: github-actions-artifact path: staging
За умовчанням артефакти, створені робочими процесами, зберігаються протягом 90 днів, а потім автоматично видаляються. Ви можете налаштувати термін зберігання, залежно від типу репозиторію. Коли ви налаштовуєте термін зберігання, він застосовується лише до нових артефактів та не має зворотної сабо до існуючих об'єктів. Артефакти можна знайти на вкладці Actions, якщо натиснути потрібний запуск робочого процесу. Кава-брейк #102.  Упаковка Java-додатків за допомогою Maven та GitHub Actions - 2

Публікація у пакетах GitHub

Ви можете налаштувати Apache Maven для публікації пакетів у GitHub Packages та використання пакетів, що зберігаються в GitHub Packages, як залежність у проекті Java. Крім Maven, GitHub Packages пропонує різні реєстри пакетів для часто використовуваних менеджерів пакетів, таких як npm, NuGet, Gradle та RubyGems. Також можна зберігати Docker та інші образи OCI. Завдяки цим функціям ви можете створювати комплексні рішення DevOps і централізувати розробку програмного забезпечення на GitHub. У файлі maven-publish.yaml можна знайти деталі робочого процесу для публікації пакету в GitHub Packages. Як і в попередньому рішенні, ми вказуємо ім'я та події, які запускатимуть робочий процес. Потім у розділі завдань ми вибрали Ubuntu runner як середовище для завдання publishта визначабо дозволи на читання вмісту та запис пакетів.
name: Publish Package to GitHub Packages on: push: branches: [main] jobs: publish: runs-on: ubuntu-latest
На наступних кроках ми перевіряємо основну гілку та налаштовуємо JDK з параметром java-version . Останній крок - публікація пакета, для цього йому потрібен особистий токен доступу для автентифікації. PAT – це конфіденційна інформація, і ми не хочемо зберігати її у вигляді простого тексту, тому ми визначабо секрет на рівні репозиторію та отримали до нього доступ як змінне середовище. Для простоти ми пропустабо випробування під час розгортання.
- name: Publish package run: mvn --batch-mode deploy -Dmaven.test.skip env: GITHUB_TOKEN: ${{ secrets.TOKEN }}
Перед запуском робочого процесу нам також потрібна одна зміна конфігурації у вихідному коді програми. Всередині файлу pom.xml нам потрібно передати інформацію про керування розповсюдженням пакетів.
<project ...> ... <distributionManagement> <repository> <id>github</id> <name>GitHub Packages</name> <url>https://maven.pkg.github.com/cvitaa11/java -spring-demo</url> </repository> </distributionManagement> </project>
Після внесення змін до основної галузі робочий процес запускається автоматично, і ми можемо стежити за виведенням журналу на вкладці Actions на сторінці репозиторію. Коли всі кроки будуть виконані, ми побачимо готовий до використання пакет Maven у нашому репозиторії коду у розділі Packages. Кава-брейк #102.  Упаковка Java-додатків за допомогою Maven та GitHub Actions - 3Кава-брейк #102.  Упаковка Java-додатків за допомогою Maven та GitHub Actions - 4За допомогою цих двох підходів ми успішно вирішабо проблему автоматичної публікації програм Java у вигляді пакетів Maven і продемонстрували використання GitHub Actions та GitHub Packages для створення повного рішення для наскрізної розробки в одному місці.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ