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. เบชเปเบฒเบฅเบฑเบšเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบชเบปเบ™เปƒเบˆเบเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบฑเบ‡เบซเบกเบปเบ”;

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ”เป‰เบ—เบตเปˆเบ™เบตเป‰: github.com/antkorwin/github-actions เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เปเปˆเปเบกเปˆเบ™เบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰.

JIRA เปเบฅเบฐเบเบฒเบ™เบงเบฒเบ‡เปเบœเบ™

เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบšเบญเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบฑเบเบˆเบฐเปƒเบŠเป‰ JIRA เป€เบ›เบฑเบ™เบ•เบปเบงเบ•เบดเบ”เบ•เบฒเบกเบšเบฑเบ™เบซเบฒ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบเบฐเบ”เบฒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เปเบฅเบฐเป€เบžเบตเปˆเบกเบšเบฑเบ™เบซเบฒเบ—เปเบฒเบญเบดเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™:

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เป€เบฅเบฑเบเบ™เป‰เบญเบเบ•เปเปˆเบกเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ—เบตเปˆ JIRA เปเบฅเบฐ GitHub เบชเบฒเบกเบฒเบ”เบชเบฐเป€เบซเบ™เบตเปƒเบ™เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™.

เบžเบงเบเป€เบฎเบปเบฒเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบเบฒเบ™เบ›เบฐเบเบญเบšเป‚เบ„เบ‡เบเบฒเบ™

เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบ‚เบญเบ‡โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เปเบกเปˆเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เป‚เบ”เบ mavenโ€‹, เบชเบฐโ€‹เบ™เบฑเป‰เบ™โ€‹เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เบกเบฑเบ™โ€‹เปเบกเปˆเบ™โ€‹เบ‚เป‰เบญเบ™โ€‹เบ‚เป‰เบฒเบ‡โ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹, เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ—เบตเปˆโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เปเบกเปˆเบ™โ€‹เบŠเบธเบ”โ€‹เบ—เบตเปˆโ€‹เบชเบฐโ€‹เบญเบฒเบ” mvnโ€‹.

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป‚เบ”เบเปƒเบŠเป‰ Github Actions, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเปƒเบ™ repository เบญเบฐเบ—เบดเบšเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เบ”เป‰เบงเบเป„เบŸเบฅเปŒ yml เบ›เบปเบเบเบฐเบ•เบด, เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ‚เป‰เบญเบเบกเบฑเบ "เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก yml", เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ - เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบกเบฑเบ™เบขเบนเปˆเปƒเบ™ .github/ directory workflow/ file 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 โ€” เบŠเบตเป‰เบšเบญเบเบงเปˆเบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ™เบตเป‰เบ•เป‰เบญเบ‡เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบเบปเบ”เบ”เบฑเบ™เป„เบ›เบซเบฒเปเบกเปˆเปเบšเบš เปเบฅเบฐเบชเป‰เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡.

เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบงเบฝเบเบ‡เบฒเบ™ (เบงเบฝเบเป€เบฎเบฑเบ”เบ‡เบฒเบ™เบ—เปเบฒ) เปเบฅเบฐโ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ” (เบ‚เบฑเป‰เบ™เบ•เบญเบ™) เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบงเบฝเบโ€‹เบ‡เบฒเบ™โ€‹.

เปเบฅเปˆเบ™-on - เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบ OS เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ, เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เปเบ›เบเบ—เบตเปˆ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบ Mac OS, เปเบ•เปˆเปƒเบ™ repositories เบชเปˆเบงเบ™เบ•เบปเบงเบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฒเบ„เบฒเปเบžเบ‡เบซเบผเบฒเบ (เป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบš Linux).

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เปƒเบŠเป‰เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบญเบทเปˆเบ™เป†เบ„เบทเบ™เปƒเบซเบกเปˆ, เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” / setup-java เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบชเปเบฒเบฅเบฑเบš Java 11.

เบ”เป‰เบงเบเบ„เบงเบฒเบกเบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ‚เบญเบ‡ เบเบฑเบš เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™, เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ•เปเปˆเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™ Maven: run: mvn -B clean package เบ—เบธเบ‡ -B เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบšเปเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป€เบžเบทเปˆเบญเปƒเบซเป‰ maven เบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ–เบฒเบกเบžเบงเบเป€เบฎเบปเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เบเบดเปˆเบ‡เปƒเบซเบเปˆ! เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบ—เบธเบเป†เบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เปƒเบซเป‰เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบเบฑเบšเปเบกเปˆเบšเบปเบ”, เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป‚เบ„เบ‡เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”

เบเบฒเบ™เบŠเบธเบกเบ™เบธเบกเปเบกเปˆเบ™เบ”เบต, เปเบ•เปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เป‚เบ„เบ‡เบเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบเบญเบšเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ›เบญเบ”เป„เบž, เปเบ•เปˆเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเปˆเบ™. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบฐเบ”เบงเบเบ—เบตเปˆเบˆเบฐเป€เบšเบดเปˆเบ‡เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบœเปˆเบฒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™ PR - เบ—เปˆเบฒเบ™เบฎเบนเป‰เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบœเปˆเบฒเบ™เปเบฅเบฐเบšเปเปˆเบกเบตเปƒเบœเบฅเบทเบกเบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบฒเบ‚เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบเบฒเบ™เบฅเบงเบก.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เปเบฅเบฐ merge เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบš, เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบžเบตเปˆเบกเบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบฅเบฐเบซเบฑเบ”.

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 เบชเบปเบกเบ—เบปเบšเบเบฑเบš plugin jacoco. codecov เบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡, เปเบ•เปˆเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ token เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

${{ secrets.CODECOV_TOKEN }} - เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ™เบตเป‰เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡, เบ„เบงเบฒเบกเบฅเบฑเบšเปเบกเปˆเบ™เบเบปเบ™เป„เบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ„เบงเบฒเบกเบฅเบฑเบšเปƒเบ™ GitHub, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™ / tokens / hosts / urls เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบญเบทเปˆเบ™เป†เบ—เบตเปˆเบšเปเปˆเบ„เบงเบ™เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบ–เบฒเบ™เบฅเบฐเบซเบฑเบ” repository.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบ•เบปเบงเปเบ›เบ•เปเปˆเบเบฑเบšเบ„เบงเบฒเบกเบฅเบฑเบšเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ repository เปƒเบ™ GitHub:

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบš token เป„เบ”เป‰เบ—เบตเปˆ codecov.io เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบœเปˆเบฒเบ™ GitHub, เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเป‚เบ„เบ‡เบเบฒเบ™เบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰: เบŠเบทเปˆเบœเบนเป‰เปƒเบŠเป‰ GitHub/[เบŠเบทเปˆ repo]. เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบชเปˆเบงเบ™เบ•เบปเบงเป„เบ”เป‰;

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เป€เบžเบตเปˆเบก plugin 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 bot เบˆเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบ•เปˆเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเป€เบžเบตเปˆเบกเป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡:

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เบกเบฒเป€เบžเบตเปˆเบกเป€เบ„เบทเปˆเบญเบ‡เบงเบดเป€เบ„เบฒเบฐเบชเบฐเบ–เบดเบ”

เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เบ‚เป‰เบญเบเบ‚เป‰เบญเบเปƒเบŠเป‰ sonar cloud เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฐเบซเบฑเบ”เบชเบฐเบ–เบดเบ”, เบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš travis-ci. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เป€เบ›เบฑเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบกเบตเป€เบซเบ”เบœเบปเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบเป„เบ›เบซเบฒ GitHub Actions เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™. เบ•เบฐเบซเบผเบฒเบ”เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบขเบฑเบ™, เปเบ•เปˆเป€เบงเบฅเบฒเบ™เบตเป‰เบกเบฑเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบฅเบปเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบญเบญเบเบˆเบฒเบเบ™เบดเป„เบชเบ‚เป‰เบญเบเป„เบ”เป‰เบžเบปเบšเป€เบซเบฑเบ™เบเบฒเบ™เบเบฐเบ—เปเบฒเบ—เบตเปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบฅเบฐเป€เบžเบตเปˆเบกเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ. เปเบ•เปˆเบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒ sonar เบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป‚เบ„เบ‡เบเบฒเบ™เบเปˆเบฝเบงเบเบฑเบš maven เบซเบผเบท gradle. เปเบ™เปˆเบ™เบญเบ™, เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบฝเบ™เบขเบนเปˆเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™, เปเบ•เปˆเบงเปˆเบฒเปƒเบœเบญเปˆเบฒเบ™เบกเบฑเบ™?!

เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฎเบฑเบ”เบกเบฑเบ™เบœเปˆเบฒเบ™ plugin 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 - เบ™เบตเป‰เปเบกเปˆเบ™ token เปƒเบ™เบ•เบปเบงเบ—เบตเปˆ GitHub เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™, เป‚เบ”เบเบเบฒเบ™เบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ‚เบญเบ‡ sonarcloud [bot] เบˆเบฐเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš Git เป€เบžเบทเปˆเบญเบ›เปˆเบญเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡.

Dsonar.projectKey โ€” เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เปƒเบ™ sonarโ€‹, เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เป„เบ”เป‰โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹.

Dsonar.organization โ€” เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบญเบปเบ‡โ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบˆเบฒเบ GitHubโ€‹.

เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เปเบฅเบฐเบฅเปเบ–เป‰เบฒ sonarcloud [bot] เป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™:

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบง

เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹, เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹, เปเบฅเบฐโ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เบ›เปˆเบญเบโ€‹. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™ GitHub Actions เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบงเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™เบซเบผเบฒเบ.

เปƒเบ™เบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบ, เบ‚เป‰เบญเบเบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเบžเบทเป‰เบ™เบ–เบฒเบ™เบฅเบฐเบซเบฑเบ”เบขเบนเปˆเปƒเบ™ bitbucket (เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเปƒเบ™เป€เบฅเบทเปˆเบญเบ‡เบ™เบฑเป‰เบ™ "เบ‚เป‰เบญเบเบ‚เบฝเบ™เปƒเบชเปˆ bitbucket เปƒเบ™เบกเบทเป‰, เบชเบฑเบ™เบเบฒเบเบฑเบš GitHub เปƒเบ™เบ•เบญเบ™เบเบฒเบ‡เบ„เบทเบ™"). เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, bitbucket เบšเปเปˆเบกเบตเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เบ›เปˆเบญเบเบ•เบปเบง. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบญเบเปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒเปƒเบ™ confluence เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เปเบฅเบฐเบ–เบดเป‰เบกเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบ›เปˆเบญเบเบ™เบฑเป‰เบ™, เบ„เบปเป‰เบ™เบซเบฒเบœเปˆเบฒเบ™เบงเบฑเบ‡เบ‚เบญเบ‡เบˆเบดเบ”เปƒเบˆ, เบงเบฝเบเบ‡เบฒเบ™เปƒเบ™ jira, commits เปƒเบ™ repository. เบกเบตเป‚เบญเบเบฒเบ”เบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบœเบดเบ”เบžเบฒเบ”, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบทเบกเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบซเบผเบทเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ›เปˆเบญเบเบญเบญเบเบกเบฒเป€เบกเบทเปˆเบญเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบเบฒเบ™เบˆเบฑเบ”เบ›เบฐเป€เบžเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เป€เบ›เบฑเบ™ - เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบซเบผเบทเบเบฒเบ™เปเบเป‰เป„เบ‚ bug, เบซเบผเบทเบเบฒเบ™เปเบเป‰เป„เบ‚เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบซเบผเบท. เบšเบฒเบ‡โ€‹เบชเบดเปˆเบ‡โ€‹เบšเบฒเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹เป‚เบ„เบ‡โ€‹เบฅเปˆเบฒเบ‡โ€‹.

เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” 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 }}

เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเบ™เบตเป‰เป„เบ›เบˆเบฐเบ–เบทเบเป€เบเบฑเบšเบเปเบฒเปƒเบ™เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบ›เปˆเบญเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” - magic!

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ„เปเบฒเบ–เบฒเบกเบญเบฒเบ”เบˆเบฐเป€เบเบตเบ”เบ‚เบทเป‰เบ™: เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบ–เป‰เบฒเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบฅเบทเบกเปƒเบชเปˆ tags เปƒเบ™ PR? เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ›เบฐเป€เบžเบ”เปƒเบ”เบ—เบตเปˆเบˆเบฐเปƒเบชเปˆเบกเบฑเบ™, เปเบฅเบฐเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบกเบฑเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เป‚เบ”เบเปเบ•เปˆเบฅเบฐ PR เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ. เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบญเบทเปˆเบ™ - เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ›เป‰เบฒเบ - เบกเบฑเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบกเบต tags เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡. เบ–เป‰เบฒเบšเปเปˆเบกเบตเปเบ—เบฑเบเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบงเปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

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'

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เบ•เป‰เบญเบ‡เบ–เบทเบเบซเบกเบฒเบเบ”เป‰เบงเบเบซเบ™เบถเปˆเบ‡เปƒเบ™ tags: type:fix, type:features, type:documentation, type:tests, type:config.

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เบ„เปเบฒโ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบญเบฑเบ”โ€‹เบ•เบฐโ€‹เป‚เบ™โ€‹เบกเบฑเบ”โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เปโ€‹เบ”เบถเบ‡โ€‹

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเปเบฒเบœเบฑเบ”เบเบฑเบšเบซเบปเบงเบ‚เปเป‰เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ•เบดเบœเบปเบ™เบเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบชเบปเบกเบ„เบงเบ™เบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบŠเบฑเปˆเบ™เบ›เป‰เบฒเบเบŠเบทเปˆ, เบกเบฑเบ™เบงเบฒเบ‡ tags เปƒเบ™ PR เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเป„เบŸเบฅเปŒเปƒเบ”เบ—เบตเปˆเบ–เบทเบเบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบซเบกเบฒเบเป€เบ›เบฑเบ™ [เบชเป‰เบฒเบ‡] เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เปƒเบ”เป†เบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต .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/**"

เบ‚เป‰เบญเบเบšเปเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบ™เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบงเบฒเบ‡เบ›เป‰เบฒเบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบเบฑเบšเบเบฒเบ™เบเบฐเบ—เปเบฒเบ—เบตเปˆเบเบงเบ”เบชเบญเบšเบเบฒเบ™เบกเบตเบ›เป‰เบฒเบเบŠเบทเปˆเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™; เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบ‚เบฝเบ™เบเบฒเบ™เบเบฐเบ—เปเบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เบ—เบตเปˆเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ—เบฑเบ‡เบชเบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™. เปเบ•เปˆเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบฎเบนเบšเปเบšเบšเบ™เบตเป‰เบกเบฑเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰;

เบฎเบญเบ”เป€เบงเบฅเบฒเบ™เบณเปƒเบŠเป‰เปเบฅเป‰เบง

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบซเบผเบฒเบเบญเบฑเบ™เบœเปˆเบฒเบ™ GitHub Actions (เบœเปˆเบฒเบ™ ssh, เบœเปˆเบฒเบ™ scp, เปเบฅเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ docker-hub), เปเบฅเบฐเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบงเบปเป‰เบฒเป„เบ”เป‰เบงเปˆเบฒ, เบชเปˆเบงเบ™เบซเบผเบฒเบเบญเบฒเบ”เบˆเบฐ, เบ—เปˆเบฒเบ™เบˆเบฐเบŠเบญเบเบซเบฒเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบญเบฑเบšเป‚เบซเบฅเบ” binary เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เบ—เปเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบซเบเบฒเบšเบ„เบฒเบ. เปเบกเปˆเบ™.

เบ‚เป‰เบญเบเบกเบฑเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡เบเบฒเบ™เบฎเบฑเบเบชเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ”เบฝเบง, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเป„เบ›เปƒเบŠเป‰เบเบฑเบš GitHub Packages (เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบชเปเบฒเบฅเบฑเบšเป€เบ™เบทเป‰เบญเบซเบฒ binary, npm, jar, docker).

Script เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš docker เปเบฅเบฐเป€เบœเบตเบเปเบœเปˆเบกเบฑเบ™เบขเบนเปˆเปƒเบ™ GitHub Packages:

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 docker registry เปเบฅเบฐเบŠเบทเปˆเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบกเบตเป€เบ„เบฑเบ”เบฅเบฑเบšเบšเบฒเบ‡เบญเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบžเบปเบšเป€เบ—เบทเปˆเบญ:

  • เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป€เบŠเบฑเปˆเบ™: echo โ€œ::set-output name=NAME::VALUEโ€ เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เปƒเบ™เบ—เบธเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบญเบทเปˆเบ™เป†.
  • เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบœเปˆเบฒเบ™เบ•เบปเบงเบฅเบฐเบšเบธเบ‚เบญเบ‡เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰: ${{step.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • เบ•เบปเบงเปเบ› GITHUB_REPOSITORY เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบŠเบทเปˆเบ‚เบญเบ‡ repository เปเบฅเบฐเป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡เบ‚เบญเบ‡เบกเบฑเบ™ ("เป€เบˆเบปเป‰เบฒเบ‚เบญเบ‡ / repo-name"). เป€เบžเบทเปˆเบญเบ•เบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เบญเบญเบเบˆเบฒเบเปเบ–เบงเบ™เบตเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบŠเบทเปˆเบ‚เบญเบ‡ repository, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰ syntax bash: ${GITHUB_REPOSITORY#*/}

เบ•เปเปˆเป„เบ›เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš docker:

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 hash เบ‚เบญเบ‡เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒ - GITHUB_SHA เบเบฑเบ‡เบกเบต nuances เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบšเปเบกเปˆเบšเบปเบ”, เปเบ•เปˆเบเบฑเบ‡เบญเบตเบ‡เบ•เบฒเบกเบเบฒเบ™เบชเป‰เบฒเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡. เป€เบซเบ”เบเบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ SHA เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบเบปเบ‡เบเบฑเบš hash เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เปƒเบ™เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ” git, เป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เบเบฐเบ—เปเบฒ / เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰ hash เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™ deadlocking เปƒเบ™ PR.

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เบ–เป‰เบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบต, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ›เบตเบ”เบžเบฒเบเบชเปˆเบงเบ™เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆ (https://github.com/antkorwin/github-actions/packages) เปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบฎเบนเบšเบžเบฒเบš docker เปƒเบซเบกเปˆ:

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบš docker เป„เบ”เป‰.

เบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบเบณเบ™เบปเบ”เบ„เปˆเบฒเป€เบŠเบตเบšเป€เบงเบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ—เบฐเบšเบฝเบ™เบ™เบตเป‰ เปเบฅเบฐเป€เบ›เบตเบ”เบšเปเบฅเบดเบเบฒเบ™เบ„เบทเบ™เปƒเปเปˆ. เบ‚เป‰เบญเบเบญเบฒเบ”เบˆเบฐเป€เบงเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบœเปˆเบฒเบ™เบฅเบฐเบšเบปเบšเบญเบตเบเบ„เบฑเป‰เบ‡เบซเบ™เบถเปˆเบ‡.

เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก

เบ‚เปเปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบเบงเบ”เบชเบธเบ‚เบฐเบžเบฒเบšเบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเปƒเบŠเป‰ GitHub Actions. เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ boot เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ•เบปเบงเบเบฐเบ•เบธเป‰เบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ‚เบฝเบ™ 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 workflow:

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 }}

เบžเบงเบเป€เบฎเบปเบฒเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเป‚เบ—เบฅเบฐเป€เบฅเบเบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบปเป‰เบกเป€เบซเบฅเบงเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เป€เบžเบทเปˆเบญเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ appleboy/telegram-action เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบฎเบฑเบš bot token เปเบฅเบฐ chat id เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™: github.com/appleboy/telegram-action

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เบขเปˆเบฒเบฅเบทเบกเบ‚เบฝเบ™เบ„เบงเบฒเบกเบฅเบฑเบšเปƒเบ™ Github: URL เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐ tokens เบชเปเบฒเบฅเบฑเบš telegram bot.

เบ•เบดเบ”เบ•เบฒเบกเป‚เบšเบ™เบฑเบ” - JIRA เบชเปเบฒเบฅเบฑเบšเบ„เบปเบ™เบ‚เบตเป‰เบเบฝเบ”

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเบฑเบ™เบเบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบเบฑเบšเบ„เบทเบ™เป„เบ› JIRA, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเบฑเบšเบ„เบทเบ™เบกเบฒ. เบซเบผเบฒเบเบฎเป‰เบญเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบขเบทเบ™เบขเบนเปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเป‰เบฒเบ‡เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”, เบฅเบงเบกเบชเบฒเบ‚เบฒ, เปเบ•เปˆเบฅเบทเบกเบฅเบฒเบเบšเบฑเบ™เบซเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ JIRA. เปเบ™เปˆเบ™เบญเบ™, เบ–เป‰เบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบ–เบทเบเป€เบฎเบฑเบ”เบขเบนเปˆเบšเปˆเบญเบ™เบ”เบฝเบง, เบกเบฑเบ™เบˆเบฐเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™, เปเบ•เปˆเบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เปƒเบ™ IDE, เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบชเบฒเบ‚เบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ bitbucket เบซเบผเบท GitHub, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบฅเบฒเบเบงเบฝเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Jira, เบชเปเบฒเบฅเบฑเบšเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ›เบตเบ”เบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเปƒเบซเบกเปˆ. , เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบšเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบญเบทเปˆเบ™เป†. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบˆเบทเปˆเบˆเปเบฒเป„เบ”เป‰เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบ•เปเปˆเป„เบ›, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบšเปเปˆเบกเบตเบˆเบธเบ”เปƒเบ”เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบเบฐเบ”เบฒเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบ•เบญเบ™เป€เบŠเบปเป‰เบฒเบขเบนเปˆเบ—เบตเปˆ standup, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒเบ›เบฑเบšเบ›เบธเบ‡เบเบฐเบ”เบฒเบ™เบงเบฝเบเบ‡เบฒเบ™.

GitHub เบเบฑเบ‡เบˆเบฐเบŠเปˆเบงเบเบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบงเบฝเบเบ‡เบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบ™เบตเป‰; เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปเบกเปˆเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบชเบปเบ™เบ—เบดเบชเบฑเบ™เบเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบŠเบทเปˆเบชเบฒเบ‚เบฒ:

[ะธะผั ะฟั€ะพะตะบั‚ะฐ]-[ะฝะพะผะตั€ ั‚ะฐัะบะฐ]-ะฝะฐะทะฒะฐะฝะธะต

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™ "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 }}

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบš 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, เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบกเปˆเบ™ ID เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเปเบฅเบฐเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบ™ JIRA เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

เปƒเบ™เบ—เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบฒเบเบงเบฝเบเบ•เปˆเบฒเบ‡เป†เป€เบกเบทเปˆเบญเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบšเปเบกเปˆเบšเบปเบ”, เปเบฅเบฐเป€เบซเบ”เบเบฒเบ™เบญเบทเปˆเบ™เป†เบˆเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ GitHub. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เปเบฅเบฐเบ„เบงเบฒเบกเบ›เบฒเบ–เบฐเบซเบ™เบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ—เบตเปˆเบˆเบฐเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบด.

เบเบฒเบ™เบ„เบปเป‰เบ™เบžเบปเบš

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เปเบœเบ™เบงเบฒเบ” DEVOPS เบ„เบฅเบฒเบชเบชเบดเบ, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบเบงเบกเป€เบญเบปเบฒเบ—เบธเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™, เบเบปเบเป€เบงเบฑเป‰เบ™เบšเบฒเบ‡เบ—เบตเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบฐเบเบฒเบเบฒเบก, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เบ•เบฐเบซเบผเบฒเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเป‚เบเบ‡เบเบฑเบšเบฅเบฐเบšเบปเบšเบŠเปˆเบงเบเป€เบซเบผเบทเบญ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปเปˆเบ™เบฑเป‰เบ™เบซเบฑเบ™. เบญเบญเบเบกเบฒเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ” เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบชเบฐเบซเบผเบธเบšเป„เบ”เป‰เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡เบกเบฑเบ™.

Circles of hell เบเบฑเบš GitHub Actions (เบชเป‰เบฒเบ‡เบ—เปเปˆ CI/CD เบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Java)

Pros:

  • เบ•เบฐเบซเบผเบฒเบ”เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป†เป‚เบญเบเบฒเบ”, เบ™เบตเป‰เปเบกเปˆเบ™เป€เบขเบฑเบ™เบซเบผเบฒเบ. เปƒเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบซเบผเบทเบ›เบฐเบเบฒเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เบ‚เบฝเบ™เป‚เบ”เบเบเบปเบ‡เปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™ GitHub.
  • เบเบฒเบ™เป€เบฅเบทเบญเบเปเบžเบฅเบ”เบŸเบญเบกเป€เบ›เบปเป‰เบฒเปเบฒเบเบชเบณเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡: Linux, mac os, windows เป€เบ›เบฑเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเปœเป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบ.
  • เบเบฒเบ™เบซเบธเป‰เบกเบซเปเปˆ Github เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ”เบต, เบกเบฑเบ™เบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เบฎเบฑเบเบชเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ”เบฝเบง, เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ surf เบœเปˆเบฒเบ™เบ›เปˆเบญเบ‡เบขเป‰เบฝเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบฅเบฑเบ”เบชเบฐเบซเบกเบตเบ‚เบญเบ‡เบซเบ™เบถเปˆเบ‡เบซเบผเบทเบชเบญเบ‡เบ„เบฅเบดเบเบซเบ™เบนเปเบฅเบฐเบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบเบฑเบš GitHub Actions. เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™ Docker เปƒเบ™เบชเบฐเบšเบฑเบšเบŸเบฃเบตเบเบฑเบ‡เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบ”เบต.
  • GitHub เป€เบŠเบทเปˆเบญเบ‡เบ„เบงเบฒเบกเบฅเบฑเบšเปƒเบ™เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบชเป‰เบฒเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เปเบฅเบฐ tokens เปเบกเปˆเบ™เบšเปเปˆเบซเบ™เป‰เบฒเบขเป‰เบฒเบ™. เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบฅเบญเบ‡โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒ, เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ„เบงเบฒเบกโ€‹เบฅเบฑเบšโ€‹เปƒเบ™โ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบ—เบตเปˆโ€‹เบšเปโ€‹เบฅเบดโ€‹เบชเบธเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เปƒเบ™ console เป„เบ”เป‰.
  • เบŸเบฃเบตเบชเปเบฒเบฅเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ Open Source

Cons:

  • YML, เบ”เบต, เบ‚เป‰เบญเบเบšเปเปˆเบกเบฑเบเบฅเบฒเบง. เป€เบกเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบเบฐเปเบชเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบฎเบฑเบ”เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบ‚เป‰เบญเบเบกเบตเปเบกเปˆเบ™ "เปเบเป‰เป„เบ‚เบฎเบนเบšเปเบšเบš yml", เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบˆเบปเป‰เบฒเบฅเบทเบกเปƒเบชเปˆเปเบ–เบšเบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เบซเบ™เบถเปˆเบ‡, เบซเบผเบทเป€เบˆเบปเป‰เบฒเบ‚เบฝเบ™เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบœเบดเบ”. เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบเบฒเบ™เบ™เบฑเปˆเบ‡เบขเบนเปˆเบ—เบฒเบ‡เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบซเบ™เป‰เบฒเบˆเปเบ—เบตเปˆเบกเบต protractor เปเบฅเบฐเป„เบกเป‰เบšเบฑเบ™เบ—เบฑเบ”เบšเปเปˆเปเบกเปˆเบ™เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบžเปเปƒเบˆเบ—เบตเปˆเบชเบธเบ”.
  • DEBUG, debugging the flow with commits, run a rebuild, and outputing to the console is not เบชเบฐเบ”เบงเบเบชเบฐ เป€เปเบต เป„เบ›, เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ” โ€œเป€เบˆเบปเป‰เบฒเป€เบฎเบฑเบ”เป€เบเบตเบ™โ€ เบซเบผเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเป€เบ„เบตเบเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš IDEA เบ—เบตเปˆเบชเบฐเบ”เบงเบ, เป€เบกเบทเปˆเบญเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เปเบเป‰เบšเบฑเบ™เบซเบฒเบซเบเบฑเบ‡เป„เบ”เป‰ .
  • เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เปƒเบ”เปเบ”เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบซเปเปˆเบกเบฑเบ™เบขเบนเปˆเปƒเบ™ Docker, เปเบ•เปˆเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆ javascript เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบˆเบฒเบเบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡, เปเบ™เปˆเบ™เบญเบ™, เบ™เบตเป‰เปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ‚เบญเบ‡เบฅเบปเบ”เบŠเบฒเบ”, เปเบ•เปˆเบ‚เป‰เบญเบเบˆเบฐเบกเบฑเบเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เปเบ—เบ™ js.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เปเป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เบงเปˆเบฒ repository เบ—เบตเปˆเบกเบตเบชเบฐเบ„เบดเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰: github.com/antkorwin/github-actions

เบญเบฒเบ—เบดเบ”เบ•เปเปˆเป„เบ›เบ‚เป‰เบญเบเบˆเบฐเบชเบฐเปเบ”เบ‡เบเบฑเบš เบฅเบฒเบเบ‡เบฒเบ™ เปƒเบ™เบเบญเบ‡เบ›เบฐเบŠเบธเบก Heisenbug 2020 Piter. เบ‚เป‰เบญเบเบˆเบฐเบšเบญเบเป€เบˆเบปเป‰เบฒเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบงเบดเบ—เบตเบเบฒเบ™เบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบเบฐเบเบฝเบกเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เปเบ•เปˆเบเบฑเบ‡เปเบšเปˆเบ‡เบ›เบฑเบ™เบ„เบงเบฒเบกเบฅเบฑเบšเบ‚เบญเบ‡เบ‚เป‰เบญเบเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Java!

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster