Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

ЧСсто ΠΌΠΈ сС Π½Π°Π»Π°Π³Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°ΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π² Java. Понякога Π΅ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, понякога Π½Π΅. Наскоро Ρ€Π΅ΡˆΠΈΡ… Π΄Π° ΠΎΠΏΠΈΡ‚Π°ΠΌ Π΄Π° прСмСстя някои ΠΎΡ‚ ΠΌΠΎΠΈΡ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΎΡ‚ Travis-CI ΠΈ TeamCity към GitHub Actions ΠΈ Π΅Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠ·Π»Π΅Π·Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ²Π°.

Какво Ρ‰Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅?

ΠŸΡŠΡ€Π²ΠΎ, ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅, Π½Π΅ΠΊΠ° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Spring boot / Java 11 / Maven. Π—Π° Ρ†Π΅Π»ΠΈΡ‚Π΅ Π½Π° Ρ‚Π°Π·ΠΈ статия ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ няма Π΄Π° сС интСрСсувамС ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ; инфраструктурата ΠΎΠΊΠΎΠ»ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π²Π°ΠΆΠ½Π° Π·Π° нас, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΅Π΄ΠΈΠ½ прост REST API ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ Ρ‰Π΅ Π½ΠΈ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π΅Π½.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ: github.com/antkorwin/github-actions Всички Π΅Ρ‚Π°ΠΏΠΈ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ са ΠΎΡ‚Ρ€Π°Π·Π΅Π½ΠΈ Π² заявкитС Π·Π° изтСглянС Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

JIRA ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½Π΅

Π‘Ρ‚Ρ€ΡƒΠ²Π° си Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Ρ‡Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ JIRA ΠΊΠ°Ρ‚ΠΎ инструмСнт Π·Π° прослСдяванС Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ΠΊΠ° създадСм ΠΎΡ‚Π΄Π΅Π»Π½Π° дъска Π·Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Ρ‚Π°ΠΌ:

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

Малко ΠΏΠΎ-късно Ρ‰Π΅ сС Π²ΡŠΡ€Π½Π΅ΠΌ към Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ интСрСсни Π½Π΅Ρ‰Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ°Ρ‚ JIRA ΠΈ GitHub Π² комбинация.

НиС Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ сглобяванСто Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ΠΠ°ΡˆΠΈΡΡ‚ тСстов ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ Ρ‡Ρ€Π΅Π· maven, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π΅ доста лСсно, всичко, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ, Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ mvn clean.

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Github Actions, Ρ‰Π΅ трябва Π΄Π° създадСм Ρ„Π°ΠΉΠ» Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, описващ нашия Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс, Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ с ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ yml Ρ„Π°ΠΉΠ», Π½Π΅ ΠΌΠΎΠ³Π° Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ харСсвам β€žyml ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅β€œ, Π½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ - ΠΏΡ€Π°Π²ΠΈΠΌ Π³ΠΎ Π² .github/ дирСктория workflow/ Ρ„Π°ΠΉΠ» build.yml, Π² ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ опишСм дСйствията ΠΏΡ€ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° главния ΠΊΠ»ΠΎΠ½:

name: Build

on:
  pull_request:
    branches:
      - '*'
  push:
    branches:
      - 'master'

jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Package
        run: mvn -B clean package -DskipTests

on β€” Ρ‚ΠΎΠ²Π° Π΅ описаниС Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ, Π½Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΡˆΠΈΡΡ‚ скрипт Ρ‰Π΅ бъдС стартиран.

Π½Π°: pull_request/push β€” ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ ΠΏΠΎΡ‚ΠΎΠΊ трябва Π΄Π° сС стартира всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС Π½Π°ΠΏΡ€Π°Π²ΠΈ натисканС към главния ΠΈ сС ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ заявки Π·Π° изтСглянС.

Π‘Π»Π΅Π΄Π²Π° описаниС Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ (Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ мСста) ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ Π·Π° изпълнСниС (ΡΡ‚ΡŠΠΏΠΊΠΈ) Π·Π° всяка Π·Π°Π΄Π°Ρ‡Π°.

Π½Π°Ρ‚ΠΈΡ‡Π°Π½Π΅ - Ρ‚ΡƒΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅ΠΌ Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° ОБ, ΠΈΠ·Π½Π΅Π½Π°Π΄Π²Π°Ρ‰ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄ΠΎΡ€ΠΈ Mac OS, Π½ΠΎ Π² частни Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Ρ‚ΠΎΠ²Π° Π΅ доста скъпо (Π² сравнСниС с Linux).

ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈ Π²ΠΈ позволява Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ дСйствия, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ дСйствиСто actions/setup-java, Π½ΠΈΠ΅ инсталирамС срСдата Π·Π° Java 11.

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° с ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° посочим ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‚Π΅, с ΠΊΠΎΠΈΡ‚ΠΎ стартирамС дСйствиСто, ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ Ρ‚ΠΎΠ²Π° са Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° дСйствиСто.

Всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ остава, Π΅ Π΄Π° стартиратС ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с Maven: run: mvn -B clean package Ρ„Π»Π°Π³ -B ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π½Π΅ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Maven извСднъТ Π΄Π° Π½Π΅ иска Π΄Π° Π½ΠΈ ΠΏΠΈΡ‚Π° Π½Π΅Ρ‰ΠΎ

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

Π‘Ρ‚Ρ€Π°Ρ…ΠΎΡ‚Π΅Π½! Π‘Π΅Π³Π°, всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС Π°Π½Π³Π°ΠΆΠΈΡ€Π°Ρ‚Π΅ с главния, ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π°ΠΏΠΎΡ‡Π²Π°.

АвтоматизиранС Π½Π° тСстовитС стартирания

БглобяванСто Π΅ Π΄ΠΎΠ±Ρ€ΠΎ, Π½ΠΎ Π² дСйствитСлност Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС сглобСн бСзопасно, Π½ΠΎ Π½Π΅ ΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ слСдващата ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° тСстовитС изпълнСния. ОсвСн Ρ‚ΠΎΠ²Π° Π΅ доста ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° Π³Π»Π΅Π΄Π°Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° тСстовСтС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ PR ΠΏΡ€Π΅Π³Π»Π΅Π΄ - Π·Π½Π°Π΅Ρ‚Π΅ със сигурност, Ρ‡Π΅ тСстовСтС ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΈ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π΅ Π·Π°Π±Ρ€Π°Π²ΠΈΠ» Π΄Π° стартира своя ΠΊΠ»ΠΎΠ½, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ сливанС.

Π©Π΅ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ΠΌ тСстовС ΠΏΡ€ΠΈ създаванС Π½Π° заявка Π·Π° изтСглянС ΠΈ Ρ‰Π΅ сС слССм Π² главния, ΠΊΠ°Ρ‚ΠΎ Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ Π·Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄Π°.

name: Build

on:
  pull_request:
    branches:
      - '*'
  push:
    branches:
      - 'master'

jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Verify
        run: mvn -B clean verify
      - name: Test Coverage
        uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

Π—Π° ΠΏΠΎΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° тСстовС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ codecov Π·Π°Π΅Π΄Π½ΠΎ с плъгина jacoco. codecov ΠΈΠΌΠ° собствСно дСйствиС, Π½ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ Ρ‚ΠΎΠΊΠ΅Π½, Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π½Π°ΡˆΠ°Ρ‚Π° заявка Π·Π° изтСглянС:

${{ secrets.CODECOV_TOKEN }} β€” Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ Ρ‚Π°Π·ΠΈ конструкция ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ вСднъТ, secrets Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° Ρ‚Π°ΠΉΠ½ΠΈ Π² GitHub, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° запишСм Ρ‚Π°ΠΌ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ/Ρ‚ΠΎΠΊΠ΅Π½ΠΈ/хостовС/url ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° към Ρ‚Π°ΠΉΠ½ΠΈ Π² настройкитС Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° GitHub:

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΆΠ΅Ρ‚ΠΎΠ½ Π½Π° codecov.io Π‘Π»Π΅Π΄ ΡƒΠΏΡŠΠ»Π½ΠΎΠΌΠΎΡ‰Π°Π²Π°Π½Π΅ Ρ‡Ρ€Π΅Π· GitHub, Π·Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, трябва само Π΄Π° слСдватС Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π·ΠΈ: ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΠΊΠΎ ΠΈΠΌΠ΅ Π½Π° GitHub/[ΠΈΠΌΠ΅ Π½Π° Ρ€Π΅ΠΏΠΎ]. МоТС Π΄Π° сС Π΄ΠΎΠ±Π°Π²ΠΈ ΠΈ частно Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅; Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, трябва Π΄Π° Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΡ€Π°Π²Π° Π½Π° codecov Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Github.

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ плъгина jacoco към POM Ρ„Π°ΠΉΠ»Π°:

<plugin>
	<groupId>org.jacoco</groupId>
	<artifactId>jacoco-maven-plugin</artifactId>
	<version>0.8.4</version>
	<executions>
		<execution>
			<goals>
				<goal>prepare-agent</goal>
			</goals>
		</execution>
		<!-- attached to Maven test phase -->
		<execution>
			<id>report</id>
			<phase>test</phase>
			<goals>
				<goal>report</goal>
			</goals>
		</execution>
	</executions>
</plugin>
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.22.2</version>
	<configuration>
		<reportFormat>plain</reportFormat>
		<includes>
			<include>**/*Test*.java</include>
			<include>**/*IT*.java</include>
		</includes>
	</configuration>
</plugin>

Π‘Π΅Π³Π° Π±ΠΎΡ‚ΡŠΡ‚ codecov Ρ‰Π΅ въвСдС всяка ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ заявки Π·Π° изтСглянС ΠΈ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π·Π° промяна Π½Π° ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅Ρ‚ΠΎ:

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

НСка Π΄ΠΎΠ±Π°Π²ΠΈΠΌ статичСн Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€

Π’ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ ΠΌΠΎΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ сонарСн ΠΎΠ±Π»Π°ΠΊ Π·Π° Π°Π½Π°Π»ΠΈΠ· Π½Π° статичСн ΠΊΠΎΠ΄, доста лСсно Π΅ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅Ρ‚Π΅ с travis-ci. Π’Π°ΠΊΠ° Ρ‡Π΅ Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½Π° ΡΡ‚ΡŠΠΏΠΊΠ°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°Ρ‚Π΅ към GitHub Actions, Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ. Π•ΠΊΡˆΡŠΠ½ ΠΏΠ°Π·Π°Ρ€ΡŠΡ‚ Π΅ страхотно Π½Π΅Ρ‰ΠΎ, Π½ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ ΠΌΠ°Π»ΠΊΠΎ ΠΌΠ΅ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΠΎ Π½Π°Π²ΠΈΠΊ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎΡ‚ΠΎ дСйствиС ΠΈ Π³ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ… към работния процСс. Но сС ΠΎΠΊΠ°Π·Π°, Ρ‡Π΅ ΡΠΎΠ½Π°Ρ€ΡŠΡ‚ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Ρ€Π°Π±ΠΎΡ‚Π° Ρ‡Ρ€Π΅Π· дСйствиС Π·Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π½Π° maven ΠΈΠ»ΠΈ gradle. Π Π°Π·Π±ΠΈΡ€Π° сС, Ρ‚ΠΎΠ²Π° Π³ΠΎ пишС Π² докумСнтацията, Π½ΠΎ ΠΊΠΎΠΉ Π³ΠΎ Ρ‡Π΅Ρ‚Π΅?!

НС Π΅ възмоТно Ρ‡Ρ€Π΅Π· дСйствиС, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‡Ρ€Π΅Π· приставката mvn:

name: SonarCloud

on:
  push:
    branches:
      - master
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  sonarcloud:
    runs-on: ubuntu-16.04
    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Analyze with SonarCloud
#       set environment variables:
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
#       run sonar maven plugin:
        run: mvn -B verify sonar:sonar -Dsonar.projectKey=antkorwin_github-actions -Dsonar.organization=antkorwin-github -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN -Dsonar.coverage.jacoco.xmlReportPaths=./target/site/jacoco/jacoco.xml

SONAR_TOKEN - ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π½Π° sonarcloud.io ΠΈ трябва Π΄Π° Π³ΠΎ рСгистриратС Π² Ρ‚Π°ΠΉΠ½ΠΈ. GITHUB_TOKEN - Ρ‚ΠΎΠ²Π° Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½ Ρ‚ΠΎΠΊΠ΅Π½, ΠΊΠΎΠΉΡ‚ΠΎ GitHub Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ sonarcloud[bot] Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π»ΠΈΠ·Π° Π² Git, Π·Π° Π΄Π° Π½ΠΈ оставя ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² заявки Π·Π° изтСглянС.

Dsonar.projectKey β€” ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² сонара, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π² настройкитС Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Dsonar.организация β€” ΠΈΠΌΠ΅ Π½Π° организацията ΠΎΡ‚ GitHub.

ΠŸΡ€Π°Π²ΠΈΠΌ заявка Π·Π° изтСглянС ΠΈ Ρ‡Π°ΠΊΠ°ΠΌΠ΅ sonarcloud[bot] Π΄Π° Π²Π»Π΅Π·Π΅ Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅:

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° освобоТдаванСто

ΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡΡ‚Π° Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π°, тСстовСтС са ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ вСрсия. НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ GitHub Actions ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° вСрсиитС ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-лСсно.

На Ρ€Π°Π±ΠΎΡ‚Π° ΠΈΠΌΠ°ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, чиято ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π° Π΅ Π² bitbucket (всичко Π΅ ΠΊΠ°Ρ‚ΠΎ Π² ΠΎΠ½Π°Π·ΠΈ история β€žΠŸΠΈΡˆΠ° Π² bitbucket ΠΏΡ€Π΅Π· дСня, Π°Π½Π³Π°ΠΆΠΈΡ€Π°ΠΌ сС с GitHub ΠΏΡ€Π΅Π· Π½ΠΎΡ‰Ρ‚Π°β€œ). Π—Π° съТалСниС bitbucket няма Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ инструмСнти Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° вСрсиитС. Π’ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π·Π° всяко ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ трябва Ρ€ΡŠΡ‡Π½ΠΎ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ страница Π² сливанС ΠΈ Π΄Π° Ρ…Π²ΡŠΡ€Π»ΠΈΡ‚Π΅ всички Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ, Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π² Π΄Π²ΠΎΡ€Ρ†ΠΈΡ‚Π΅ Π½Π° ΡƒΠΌΠ°, Π·Π°Π΄Π°Ρ‡ΠΈ Π² jira, Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ. Има ΠΌΠ½ΠΎΠ³ΠΎ шансовС Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π±Ρ€Π°Π²ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ ΠΈΠ»ΠΈ Π΄Π° Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π΅ Π±ΠΈΠ»ΠΎ пуснато миналия ΠΏΡŠΡ‚, понякога просто Π½Π΅ Π΅ ясно ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° класифицира заявка Π·Π° изтСглянС - Π΄Π°Π»ΠΈ Π΅ функция ΠΈΠ»ΠΈ корСкция Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°, ΠΈΠ»ΠΈ тСстовС Π·Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅, ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ инфраструктурно.

Как дСйствията Π½Π° GitHub ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚? Има страхотно дСйствиС - ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Π½Ρ‚ Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ шаблон Π½Π° Ρ„Π°ΠΉΠ» с Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ, Π·Π° Π΄Π° настроитС ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ заявки Π·Π° изтСглянС ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΄Π° Π³ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Ρ‚Π΅ във Ρ„Π°ΠΉΠ»Π° с Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ:

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ шаблон Π·Π° настройка Π½Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ (.github/release-drafter.yml):

name-template: 'v$NEXT_PATCH_VERSION'
tag-template: 'v$NEXT_PATCH_VERSION'
categories:
  - title: ' New Features'
    labels:
      - 'type:features'
# Π² эту ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ собираСм всС PR с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ type:features

  - title: ' Bugs Fixes'
    labels:
      - 'type:fix'
# Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ для ΠΌΠ΅Ρ‚ΠΊΠΈ type:fix ΠΈ Ρ‚.Π΄.

  - title: ' Documentation'
    labels:
      - 'type:documentation'

  - title: ' Configuration'
    labels:
      - 'type:config'

change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
template: |
  ## Changes
  $CHANGES

Π”ΠΎΠ±Π°Π²Π΅Ρ‚Π΅ скрипт Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‡Π΅Ρ€Π½ΠΎΠ²Π° Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ (.github/workflows/release-draft.yml):

name: "Create draft release"

on:
  push:
    branches:
      - master

jobs:
  update_draft_release:
    runs-on: ubuntu-18.04
    steps:
      - uses: release-drafter/release-drafter@v5
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Всички заявки Π·Π° изтСглянС отсСга Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Ρ‰Π΅ сС ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π² Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π·Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ - магия!

Π’ΡƒΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° възникнС Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚: ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ станС, Π°ΠΊΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ забравят Π΄Π° поставят Ρ‚Π°Π³ΠΎΠ²Π΅ Π² PR? Π’ΠΎΠ³Π°Π²Π° Π½Π΅ Π΅ ясно Π² коя катСгория Π΄Π° Π³ΠΎ поставитС ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Ρ‰Π΅ трябва Π΄Π° сС справятС Ρ€ΡŠΡ‡Π½ΠΎ, с всСки PR ΠΏΠΎΠΎΡ‚Π΄Π΅Π»Π½ΠΎ. Π—Π° Π΄Π° ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄Ρ€ΡƒΠ³ΠΎ дСйствиС - label verifier - Ρ‚ΠΎΠΉ провСрява Π·Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π° Ρ‚Π°Π³ΠΎΠ²Π΅ Π² заявката Π·Π° изтСглянС. Ако няма Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ Ρ‚Π°Π³ΠΎΠ²Π΅, Ρ‚ΠΎΠ³Π°Π²Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Ρ‰Π΅ бъдС Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½Π° ΠΈ Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° Ρ‚ΠΎΠ²Π° Π² Π½Π°ΡˆΠ°Ρ‚Π° заявка Π·Π° изтСглянС.

name: "Verify type labels"

on:
  pull_request:
    types: [opened, labeled, unlabeled, synchronize]

jobs:
  triage:
    runs-on: ubuntu-18.04
    steps:
      - uses: zwaldowski/match-label-action@v2
        with:
          allowed: 'type:fix, type:features, type:documentation, type:tests, type:config'

Π‘Π΅Π³Π° всяка заявка Π·Π° изтСглянС трябва Π΄Π° бъдС ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π° с Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅: type:fix, type:features, type:documentation, type:tests, type:config.

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

Автоматично Π°Π½ΠΎΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° заявки Π·Π° изтСглянС

Въй ΠΊΠ°Ρ‚ΠΎ засСгнахмС Ρ‚Π°ΠΊΠ°Π²Π° Ρ‚Π΅ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с заявки Π·Π° изтСглянС, струва си Π΄Π° Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Ρ‚Π°ΠΊΠΎΠ²Π° дСйствиС ΠΊΠ°Ρ‚ΠΎ labeler, Ρ‚ΠΎΠΉ поставя Ρ‚Π°Π³ΠΎΠ²Π΅ Π² PR въз основа Π½Π° Ρ‚ΠΎΠ²Π° ΠΊΠΎΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ са ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ. НапримСр, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°ΠΌΠ΅ ΠΊΠ°Ρ‚ΠΎ [build] всяка заявка Π·Π° изтСглянС, която ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² дирСкторията .github/workflow.

Π‘Π²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π΅ съвсСм просто:

name: "Auto-assign themes to PR"

on:
  - pull_request

jobs:
  triage:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/labeler@v2
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}

НуТдаСм сС ΡΡŠΡ‰ΠΎ ΠΎΡ‚ Ρ„Π°ΠΉΠ», описващ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Ρ‚Π΅ΠΌΠΈΡ‚Π΅ Π½Π° заявката Π·Π° изтСглянС:

theme:build:
  - ".github/**"
  - "pom.xml"
  - ".travis.yml"
  - ".gitignore"
  - "Dockerfile"

theme:code:
  - "src/main/*"

theme:tests:
  - "src/test/*"

theme:documentation:
  - "docs/**"

theme:TRASH:
  - ".idea/**"
  - "target/**"

НС успях Π΄Π° сдвоя дСйствиСто, ΠΊΠΎΠ΅Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ поставя Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ Π² заявки Π·Π° изтСглянС, с дСйствиСто, ΠΊΠΎΠ΅Ρ‚ΠΎ провСрява Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ; match-label Π½Π΅ иска Π΄Π° Π²ΠΈΠΆΠ΄Π° Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΠΎΡ‚ Π±ΠΎΡ‚Π°. ИзглСТда ΠΏΠΎ-лСсно Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ собствСно дСйствиС, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΡ‡Π΅Ρ‚Π°Π²Π° ΠΈ Π΄Π²Π°Ρ‚Π° Π΅Ρ‚Π°ΠΏΠ°. Но Π΄ΠΎΡ€ΠΈ ΠΈ Π² Ρ‚Π°Π·ΠΈ Ρ„ΠΎΡ€ΠΌΠ° Π΅ доста ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅; трябва Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ ΠΎΡ‚ списъка, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ заявка Π·Π° изтСглянС.

Π’Ρ€Π΅ΠΌΠ΅ Π΅ Π·Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

ΠžΠΏΠΈΡ‚Π°Ρ… няколко ΠΎΠΏΡ†ΠΈΠΈ Π·Π° внСдряванС Ρ‡Ρ€Π΅Π· GitHub Actions (Ρ‡Ρ€Π΅Π· ssh, Ρ‡Ρ€Π΅Π· scp ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° docker-hub) ΠΈ ΠΌΠΎΠ³Π° Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ Π½Π°ΠΉ-вСроятно Ρ‰Π΅ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΊΠ°Ρ‡ΠΈΡ‚Π΅ двоичния Ρ„Π°ΠΉΠ» Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, нСзависимо ΠΊΠΎΠ»ΠΊΠΎ ΠΊΡ€ΠΈΠ² Π΅ Π²Π°ΡˆΠΈΡΡ‚ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π΅.

Π₯арСса ΠΌΠΈ опцията Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° цялата инфраструктура Π½Π° Π΅Π΄Π½ΠΎ място, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ΠΊΠ° Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π² GitHub (Ρ‚ΠΎΠ²Π° Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅, npm, jar, docker).

Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π·Π° създаванС Π½Π° Π΄ΠΎΠΊΠ΅Ρ€ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π² GitHub ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ:

name: Deploy docker image

on:
  push:
    branches:
      - 'master'

jobs:

  build_docker_image:
    runs-on: ubuntu-18.04
    steps:

#     Build JAR:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Package
        run: mvn -B clean compile package -DskipTests

#     Set global environment variables:
      - name: set global env
        id: global_env
        run: |
          echo "::set-output name=IMAGE_NAME::${GITHUB_REPOSITORY#*/}"
          echo "::set-output name=DOCKERHUB_IMAGE_NAME::docker.pkg.github.com/${GITHUB_REPOSITORY}/${GITHUB_REPOSITORY#*/}"

#     Build Docker image:
      - name: Build and tag image
        run: |
          docker build -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:latest" -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:${GITHUB_SHA::8}" .

      - name: Docker login
        run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}

#     Publish image to github package repository:
      - name: Publish image
        env:
          IMAGE_NAME: $GITHUB_REPOSITORY
        run: docker push "docker.pkg.github.com/$GITHUB_REPOSITORY/${{ steps.global_env.outputs.IMAGE_NAME }}"

ΠŸΡŠΡ€Π²ΠΎ, трябва Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ JAR Ρ„Π°ΠΉΠ»Π° Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ изчислявамС ΠΏΡŠΡ‚Ρ Π΄ΠΎ докСрския Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π½Π° GitHub ΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π’ΡƒΠΊ ΠΈΠΌΠ° няколко Ρ‚Ρ€ΠΈΠΊΠ°, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ смС сС Π½Π°Ρ‚ΡŠΠΊΠ½Π°Π»ΠΈ:

  • конструкция ΠΊΠ°Ρ‚ΠΎ: echo β€œ::set-output name=NAME::VALUE” Π²ΠΈ позволява Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ стойността Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Π½Π° във всички останали ΡΡ‚ΡŠΠΏΠΊΠΈ.
  • ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ стойността Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π°, Π·Π°Π΄Π°Π΄Π΅Π½Π° Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Ρ‡Ρ€Π΅Π· ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π½Π° Ρ‚Π°Π·ΠΈ ΡΡ‚ΡŠΠΏΠΊΠ°: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° GITHUB_REPOSITORY ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ ΠΈ нСговия собствСник (β€žowner/repo-nameβ€œ). Π—Π° Π΄Π° ΠΈΠ·Ρ€Π΅ΠΆΠ΅ΠΌ всичко ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π΄ с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ bash синтаксис: ${GITHUB_REPOSITORY#*/}

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ Π΄ΠΎΠΊΠ΅Ρ€ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ:

docker build -t "docker.pkg.github.com/antkorwin/github-actions/github-actions:latest"

Π’Π»Π΅Π·Ρ‚Π΅ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°:

docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}

И ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² GitHub Packages Repository:

docker push "docker.pkg.github.com/antkorwin/github-actions/github-actions"

Π—Π° Π΄Π° посочим вСрсията Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ Ρ†ΠΈΡ„Ρ€ΠΈ ΠΎΡ‚ SHA Ρ…Π΅ΡˆΠ° Π½Π° ΠΊΠΎΠΌΠΈΡ‚Π° - GITHUB_SHA Ρ‚ΡƒΠΊ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ° нюанси, Π°ΠΊΠΎ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ Π½Π΅ само ΠΏΡ€ΠΈ сливанС Π² master, Π½ΠΎ ΠΈ спорСд ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° заявка Π·Π° изтСглянС ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅, Ρ‚ΠΎΠ³Π°Π²Π° SHA ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π° Π½Π° Ρ…Π΅ΡˆΠ°, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π² хронологията Π½Π° git, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ дСйствиСто action/checkout ΠΏΡ€Π°Π²ΠΈ свой собствСн ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½ Ρ…Π΅Ρˆ, Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ΠΈ дСйствия Π² PR.

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

Ако всичко Π²ΡŠΡ€Π²ΠΈ Π΄ΠΎΠ±Ρ€Π΅, отваряйки сСкцията с ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ (https://github.com/antkorwin/github-actions/packages) Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΠΎΠΊΠ΅Ρ€:

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ списък с вСрсии Π½Π° Π΄ΠΎΠΊΠ΅Ρ€ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

ΠžΡΡ‚Π°Π²Π° само Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ нашия ΡΡŠΡ€Π²ΡŠΡ€ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ ΠΈ Π΄Π° рСстартирамС услугата. ВСроятно Ρ‰Π΅ говоря Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° направя Ρ‚ΠΎΠ²Π° Ρ‡Ρ€Π΅Π· systemd Π΄Ρ€ΡƒΠ³ ΠΏΡŠΡ‚.

ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³

НСка Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΅Π΄Π½Π° проста опция Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° GitHub Actions. ΠΠ°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ ΠΈΠΌΠ° Π·Π°Π΄Π²ΠΈΠΆΠ²Π°Ρ‰ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄ΠΎΡ€ΠΈ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° пишСм API, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ ΠΌΡƒ; Π²Π΅Ρ‡Π΅ смС Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ всичко Π·Π° ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²ΠΈΡ‚Π΅. ΠŸΡ€ΠΎΡΡ‚ΠΎ трябва Π΄Π° ΠΈΠ·Π΄ΡŠΡ€ΠΏΠ°Ρ‚Π΅ хоста: SERVER-URL:PORT/actuator/health

$ curl -v 127.0.0.1:8080/actuator/health

> GET /actuator/health HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.61.1
> Accept: */*

< HTTP/1.1 200
< Content-Type: application/vnd.spring-boot.actuator.v3+json
< Transfer-Encoding: chunked
< Date: Thu, 04 Jun 2020 12:33:37 GMT

{"status":"UP"}

Всичко, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ, Π΅ Π΄Π° напишСм Π·Π°Π΄Π°Ρ‡Π° Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° cron ΠΈ Π°ΠΊΠΎ извСднъТ Π½Π΅ Π½ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ извСстиС Ρ‡Ρ€Π΅Π· Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌΠ°.

ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΠΊΠ° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° стартирамС Ρ€Π°Π±ΠΎΡ‚Π΅Π½ процСс Π½Π° cron:

on:
  schedule:
    - cron:  '*/5 * * * *'

ΠŸΡ€ΠΎΡΡ‚ΠΎ Π΅, Π΄ΠΎΡ€ΠΈ Π½Π΅ ΠΌΠΎΠ³Π° Π΄Π° повярвам, Ρ‡Π΅ Π² Github ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ сС вписват Π² webhooks. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈΡ‚Π΅ са Π² докумСнтацията: help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

НСка ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Ρ€ΡŠΡ‡Π½ΠΎ Ρ‡Ρ€Π΅Π· curl:

jobs:
  ping:
    runs-on: ubuntu-18.04
    steps:

      - name: curl actuator
        id: ping
        run: |
          echo "::set-output name=status::$(curl ${{secrets.SERVER_HOST}}/api/actuator/health)"

      - name: health check
        run: |
          if [[ ${{ steps.ping.outputs.status }} != *"UP"* ]]; then
            echo "health check is failed"
            exit 1
          fi
          echo "It's OK"

ΠŸΡŠΡ€Π²ΠΎ записвамС Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ Π΅ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Π½Π° заявката, Π² слСдващата ΡΡ‚ΡŠΠΏΠΊΠ° провСрявамС Π΄Π°Π»ΠΈ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π΅ UP ΠΈ Π°ΠΊΠΎ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Ρ‚Π°ΠΊΠ°, ΠΈΠ·Π»ΠΈΠ·Π°ΠΌΠ΅ с Π³Ρ€Π΅ΡˆΠΊΠ°. Ако трябва Π΄Π° β€žΠ·Π°Ρ‚Ρ€ΡƒΠΏΠ°Ρ‚Π΅β€œ дСйствиС с Ρ€ΡŠΡ†Π΅Ρ‚Π΅ си, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠ·Ρ…ΠΎΠ΄ 1 - подходящо ΠΎΡ€ΡŠΠΆΠΈΠ΅.

  - name: send alert in telegram
    if: ${{ failure() }}
    uses: appleboy/telegram-action@master
    with:
      to: ${{ secrets.TELEGRAM_TO }}
      token: ${{ secrets.TELEGRAM_TOKEN }}
      message: |
        Health check of the:
        ${{secrets.SERVER_HOST}}/api/actuator/health
        failed with the result:
        ${{ steps.ping.outputs.status }}

Π˜Π·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Π΄ΠΎ telegram само Π°ΠΊΠΎ дСйствиСто Π΅ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ°. Π—Π° Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ appleboy/telegram-action; ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ Π·Π° Π±ΠΎΡ‚ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π° Ρ‡Π°Ρ‚ Π² докумСнтацията: github.com/appleboy/telegram-action

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

НС забравяйтС Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² Ρ‚Π°ΠΉΠ½ΠΈΡ‚Π΅ Π½Π° Github: URL Π·Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Π·Π° Π±ΠΎΡ‚Π° Π·Π° Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌΠ°.

Бонус пСсСн - JIRA Π·Π° ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²ΠΈΡ‚Π΅

ΠžΠ±Π΅Ρ‰Π°Ρ…, Ρ‡Π΅ Ρ‰Π΅ сС Π²ΡŠΡ€Π½Π΅ΠΌ Π² JIRA ΠΈ сС Π²ΡŠΡ€Π½Π°Ρ…ΠΌΠ΅. Π‘Ρ‚ΠΎΡ‚ΠΈΡ†ΠΈ ΠΏΡŠΡ‚ΠΈ съм наблюдавал ситуация ΠΏΡ€ΠΈ изправянС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ са Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ функция, сляли са ΠΊΠ»ΠΎΠ½, Π½ΠΎ са Π·Π°Π±Ρ€Π°Π²ΠΈΠ»ΠΈ Π΄Π° прСмСстят ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² JIRA. Π Π°Π·Π±ΠΈΡ€Π° сС, Π°ΠΊΠΎ всичко Ρ‚ΠΎΠ²Π° бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π½Π° Π΅Π΄Π½ΠΎ място, Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎ-лСсно, Π½ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½ΠΈΠ΅ пишСм ΠΊΠΎΠ΄ Π² IDE, сливамС ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π² bitbucket ΠΈΠ»ΠΈ GitHub ΠΈ слСд Ρ‚ΠΎΠ²Π° плъзгамС Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ Π² Jira, Π·Π° Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌ Π½ΠΎΠ²ΠΈ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ , понякога Π²Π»ΠΈΠ·Π°ΠΉΡ‚Π΅ ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΈ Ρ‚.Π½. ΠšΠΎΠ³Π°Ρ‚ΠΎ си спомнитС ΠΏΠ΅Ρ€Ρ„Π΅ΠΊΡ‚Π½ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ слСд Ρ‚ΠΎΠ²Π°, Ρ‚ΠΎΠ³Π°Π²Π° няма смисъл Π΄Π° отварятС Π΄ΡŠΡΠΊΠ°Ρ‚Π° ΠΎΡ‚Π½ΠΎΠ²ΠΎ. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Ρ‚ΠΎΠ²Π° Π½Π° сутринта ΠΏΡ€ΠΈ изправянС трябва Π΄Π° ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π°Π±Π»ΠΎΡ‚ΠΎ със Π·Π°Π΄Π°Ρ‡ΠΈ.

GitHub ΡΡŠΡ‰ΠΎ Ρ‰Π΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π² Ρ‚Π°Π·ΠΈ Ρ€ΡƒΡ‚ΠΈΠ½Π½Π° Π·Π°Π΄Π°Ρ‡Π°; ΠΊΠ°Ρ‚ΠΎ Π·Π° Π½Π°Ρ‡Π°Π»ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° плъзгамС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π² ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° code_review, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΎΠ΄Π°Π΄Π΅ΠΌ заявка Π·Π° изтСглянС. Всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π΅ Π΄Π° слСдватС конвСнцията Π·Π° ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½Π΅ Π½Π° ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅:

[имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°]-[Π½ΠΎΠΌΠ΅Ρ€ таска]-Π½Π°Π·Π²Π°Π½ΠΈΠ΅

Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€žGitHub Actionsβ€œ Π΅ GA, Ρ‚ΠΎΠ³Π°Π²Π° GA-8-jira-bot ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠ»ΠΎΠ½ Π·Π° изпълнСниС Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° GA-8.

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡΡ‚Π° с JIRA Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‡Ρ€Π΅Π· дСйствия ΠΎΡ‚ Atlassian, Ρ‚Π΅ Π½Π΅ са ΠΏΠ΅Ρ€Ρ„Π΅ΠΊΡ‚Π½ΠΈ, трябва Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ някои ΠΎΡ‚ тях ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ работят Π·Π° ΠΌΠ΅Π½. Но Π½ΠΈΠ΅ Ρ‰Π΅ обсъдим само Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ работят ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ.

ΠŸΡŠΡ€Π²ΠΎ трябва Π΄Π° Π²Π»Π΅Π·Π΅Ρ‚Π΅ Π² JIRA, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ дСйствиСто: atlassian/gajira-login

jobs:
  build:
    runs-on: ubuntu-latest
    name: Jira Workflow
    steps:
      - name: Login
        uses: atlassian/gajira-login@master
        env:
          JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
          JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
          JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}

Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΠΊΠ΅Π½ Π² JIRA, ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π° Π΅ описано Ρ‚ΡƒΠΊ: confluence.atlassian.com/cloud/api-tokens-938839638.html

Π˜Π·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π½Π° Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° ΠΎΡ‚ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΠΎΠ½Π°:

  - name: Find Issue
    id: find_issue
    shell: bash
    run: |
      echo "::set-output name=ISSUE_ID::$(echo ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}')"
      echo brach name: $GITHUB_HEAD_REF
      echo extracted issue: ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}'

  - name: Check Issue
    shell: bash
    run: |
      if [[ "${{steps.find_issue.outputs.ISSUE_ID}}" == "" ]]; then
        echo "Please name your branch according to the JIRA issue: [project_key]-[task_number]-branch_name"
        exit 1
      fi
      echo succcessfully found JIRA issue: ${{steps.find_issue.outputs.ISSUE_ID}}

Ако Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ Π² ΠΏΠ°Π·Π°Ρ€Π° Π½Π° GitHub, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ дСйствиС Π·Π° Ρ‚Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π°, Π½ΠΎ Π°Π· Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° напиша ΡΡŠΡ‰ΠΎΡ‚ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ grep, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΠΎΠ½Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π° дСйствиС ΠΎΡ‚ Atlassian Π½Π΅ искашС Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ моя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎ никакъв Π½Π°Ρ‡ΠΈΠ½ , Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄ Ρ‚Π°ΠΌ - ΠΏΠΎ-дълго, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ с Ρ€ΡŠΡ†Π΅Ρ‚Π΅ си.

Всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ остава, Π΅ Π΄Π° прСмСститС Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π² ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° β€žΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π°β€œ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ заявка Π·Π° изтСглянС:

  - name: Transition issue
    if: ${{ success() }}
    uses: atlassian/gajira-transition@master
    with:
      issue: ${{ steps.find_issue.outputs.ISSUE_ID }}
      transition: "Code review"

Има спСциално дСйствиС Π·Π° Ρ‚ΠΎΠ²Π° Π² GitHub, всичко, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅, Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ°, ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² JIRA, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ ΠΏΠΎ-Π³ΠΎΡ€Π΅.

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

По ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠ»ΡŠΠ·Π³Π°Ρ‚Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΈ сливанС Π² главния ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΡΡŠΠ±ΠΈΡ‚ΠΈΡ ΠΎΡ‚ работния процСс Π½Π° GitHub. ΠšΠ°Ρ‚ΠΎ цяло всичко зависи ΠΎΡ‚ Π²Π°ΡˆΠ΅Ρ‚ΠΎ Π²ΡŠΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€ΡƒΡ‚ΠΈΠ½Π½ΠΈΡ‚Π΅ процСси.

Π”Π°Π½Π½ΠΈ

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ класичСската Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠ° Π½Π° DEVOPS, Π½ΠΈΠ΅ смС ΠΏΠΎΠΊΡ€ΠΈΠ»ΠΈ всички Π΅Ρ‚Π°ΠΏΠΈ, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π° опСрацията, мисля, Ρ‡Π΅ Π°ΠΊΠΎ ΠΎΠΏΠΈΡ‚Π°Ρ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ някакво дСйствиС Π½Π° ΠΏΠ°Π·Π°Ρ€Π° Π·Π° интСграция със систСмата Π·Π° ΠΏΠΎΠΌΠΎΡ‰, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ΠΌ, Ρ‡Π΅ Ρ‚Ρ€ΡŠΠ±ΠΎΠΏΡ€ΠΎΠ²ΠΎΠ΄ΡŠΡ‚ сС ΠΎΠ±ΡŠΡ€Π½Π° трябва Π΄Π° бъдС Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ ΠΈ Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС правят Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ въз основа Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° ΠΌΡƒ.

Circles of hell с GitHub Actions (ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Π·Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚)

плюсовС:

  • ΠŸΠ°Π·Π°Ρ€ с Π³ΠΎΡ‚ΠΎΠ²ΠΈ дСйствия Π·Π° всички случаи, Ρ‚ΠΎΠ²Π° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΡ‚ΠΈΠ½ΠΎ. Π’ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ тях ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π΄Π° Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ‚Π΅ изходния ΠΊΠΎΠ΄, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈΠ»ΠΈ Π΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ заявка Π·Π° функция Π΄ΠΎ Π°Π²Ρ‚ΠΎΡ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ Π½Π° GitHub.
  • Π˜Π·Π±ΠΎΡ€ΡŠΡ‚ Π½Π° Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π·Π° сглобяванС: Linux, mac os, windows Π΅ доста интСрСсна функция.
  • Github Packages Π΅ страхотно Π½Π΅Ρ‰ΠΎ, ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΅ Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚Π΅ цялата инфраструктура Π½Π° Π΅Π΄Π½ΠΎ място, Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° ΡΡŠΡ€Ρ„ΠΈΡ€Π°Ρ‚Π΅ ΠΏΡ€Π΅Π· Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ†ΠΈ, всичко Π΅ Π² радиус ΠΎΡ‚ Π΅Π΄Π½ΠΎ ΠΈΠ»ΠΈ Π΄Π²Π΅ кликвания Π½Π° ΠΌΠΈΡˆΠΊΠ°Ρ‚Π° ΠΈ Π΅ ΠΈΠ΄Π΅Π°Π»Π½ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΎ с GitHub Actions. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€ Π½Π° Docker Π² Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½Π°Ρ‚Π° вСрсия ΡΡŠΡ‰ΠΎ Π΅ Π΄ΠΎΠ±Ρ€ΠΎ прСдимство.
  • GitHub ΠΊΡ€ΠΈΠ΅ Ρ‚Π°ΠΉΠ½ΠΈ Π² рСгистрационни Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ Π·Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° всичкитС си СкспСримСнти Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ успях Π΄Π° видя Ρ‚Π°ΠΉΠ½Π°Ρ‚Π° Π² чистата ΠΉ Ρ„ΠΎΡ€ΠΌΠ° Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°.
  • Π‘Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎ Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄

ΠΏΡ€ΠΎΡ‚ΠΈΠ²:

  • YML, Π΄ΠΎΠ±Ρ€Π΅, Π½Π΅ Π³ΠΎ харСсвам. ΠšΠΎΠ³Π°Ρ‚ΠΎ работя с Ρ‚Π°ΠΊΡŠΠ² ΠΏΠΎΡ‚ΠΎΠΊ, Π½Π°ΠΉ-чСсто срСщаното ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° Π°Π½Π³Π°ΠΆΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌ, Π΅ β€žΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° yml Ρ„ΠΎΡ€ΠΌΠ°Ρ‚β€œ, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ забравятС Π΄Π° поставитС Ρ€Π°Π·Π΄Π΅Π» някъдС ΠΈΠ»ΠΈ Π³ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠ΅Π½ Ρ€Π΅Π΄. ΠšΠ°Ρ‚ΠΎ цяло сСдСнСто ΠΏΡ€Π΅Π΄ Π΅ΠΊΡ€Π°Π½ с транспортир ΠΈ Π»ΠΈΠ½ΠΈΠΉΠΊΠ° Π½Π΅ Π΅ Π½Π°ΠΉ-приятното изТивяванС.
  • DEBUG, отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΏΠΎΡ‚ΠΎΠΊΠ° с Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚ΠΈ, стартиранС Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ към ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ Π΅ ΠΏΠΎ-скоро ΠΎΡ‚ катСгорията β€žΠΏΡ€Π΅ΠΊΠ°Π»ΡΠ²Π°Ρ‚Π΅β€œ; свикнали стС Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с ΡƒΠ΄ΠΎΠ±Π½Π° IDEA, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄Π΅Π±ΡŠΠ³Π²Π°Ρ‚Π΅ всичко .
  • ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ дСйствиСто си Π²ΡŠΡ€Ρ…Ρƒ всичко, Π°ΠΊΠΎ Π³ΠΎ ΠΎΠ±Π²ΠΈΠ΅Ρ‚Π΅ Π² Docker, Π½ΠΎ само javascript сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ, Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Ρ‚ΠΎΠ²Π° Π΅ Π²ΡŠΠΏΡ€ΠΎΡ Π½Π° вкус, Π½ΠΎ Π±ΠΈΡ… ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Π» Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ вмСсто js.

НСка Π²ΠΈ напомня, Ρ‡Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ с всички скриптовС Π΅ Ρ‚ΡƒΠΊ: github.com/antkorwin/github-actions

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° сСдмица Ρ‰Π΅ участвам с Π΄ΠΎΠΊΠ»Π°Π΄ Π½Π° конфСрСнцията Heisenbug 2020 Piter. Π©Π΅ Π²ΠΈ ΠΊΠ°ΠΆΠ° Π½Π΅ само ΠΊΠ°ΠΊ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° Π½Π° тСстови Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΈ Ρ‰Π΅ сподСля ΠΌΠΎΠΈΡ‚Π΅ Ρ‚Π°ΠΉΠ½ΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ Π² Java прилоТСния!

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com