GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เดœเดพเดตเดฏเดฟเดฒเต† เดจเดฟเตผเดฎเตเดฎเดพเดฃ เดชเดฆเตเดงเดคเดฟเด•เตพเด•เตเด•เดพเดฏเดฟ เดŽเดจเดฟเด•เตเด•เต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดชเตˆเดชเตเดชเต เดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เต‡เดฃเตเดŸเดฟ เดตเดฐเตเด‚. เดšเดฟเดฒเดชเตเดชเต‹เตพ เด‡เดคเต เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เดšเดฟเดฒเดชเตเดชเต‹เตพ เด…เด™เตเด™เดจเต†เดฏเดฒเตเดฒ. Travis-CI, TeamCity เดŽเดจเตเดจเดฟเดตเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดŽเดจเตเดฑเต† เดšเดฟเดฒ เดถเต‡เด–เดฐเดฃเด™เตเด™เตพ เดฎเดพเดฑเตเดฑเดพเตป เดžเดพเตป เด…เดŸเตเดคเตเดคเดฟเดŸเต† เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต, เด‡เดคเดพเดฃเต เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดชเตเดฑเดคเตเดคเตเดตเดจเตเดจเดคเต.

เดžเด™เตเด™เตพ เดŽเดจเตเดคเต เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด‚?

เด†เดฆเตเดฏเด‚, เดจเดฎเตเด•เตเด•เต เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เดจเดฎเตเด•เตเด•เต เดธเตเดชเตเดฐเดฟเด‚เด—เต เดฌเต‚เดŸเตเดŸเต / เดœเดพเดต 11 / เดฎเดพเดตเต†เดจเดฟเตฝ เด’เดฐเต เดšเต†เดฑเดฟเดฏ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด‰เดฃเตเดŸเดพเด•เตเด•เดพเด‚. เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเดจเตเดฑเต† เด‰เดฆเตเดฆเต‡เดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฒเต‹เดœเดฟเด•เตเด•เดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเดฟเดฒเตเดฒ; เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต† เดšเตเดฑเตเดฑเดฟเดชเตเดชเดฑเตเดฑเดฟเดฏเตเดณเตเดณ เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเตผ เดžเด™เตเด™เตพเด•เตเด•เต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ REST API เด•เตบเดŸเตเดฐเต‹เดณเตผ เดฎเดคเดฟเดฏเดพเด•เตเด‚.

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ เด‡เดตเดฟเดŸเต† เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚: github.com/antkorwin/github-actions เดชเตˆเดชเตเดชเต เดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เด˜เดŸเตเดŸเด™เตเด™เดณเตเด‚ เดˆ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเตเดณเตเดณ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเดฟเตฝ เดชเตเดฐเดคเดฟเดซเดฒเดฟเด•เตเด•เตเดจเตเดจเต.

เดœเดฟเดฑเดฏเตเด‚ เด†เดธเต‚เดคเตเดฐเดฃเดตเตเด‚

เดžเด™เตเด™เตพ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด’เดฐเต เด‡เดทเตเดฏเต‚ เดŸเตเดฐเดพเด•เตเด•เดฑเดพเดฏเดฟ JIRA เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดชเดฑเดฏเต‡เดฃเตเดŸเดคเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฎเตเด•เตเด•เต เดˆ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดฌเต‹เตผเดกเต เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดšเต เด†เดฆเตเดฏเดคเตเดคเต† เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เตพ เด…เดตเดฟเดŸเต† เดšเต‡เตผเด•เตเด•เดพเด‚:

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เด•เตเดฑเดšเตเดšเต เด•เดดเดฟเดžเตเดžเต JIRA-เดฏเตเด‚ GitHub-เด‰เด‚ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเดšเตเดšเต เดจเตฝเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เดฐเดธเด•เดฐเดฎเดพเดฏ เด•เดพเดฐเตเดฏเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดžเด™เตเด™เตพ เดฎเดŸเด™เตเด™เตเด‚.

เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เด…เดธเด‚เดฌเตเดฒเดฟ เดžเด™เตเด™เตพ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เดžเด™เตเด™เดณเตเดŸเต† เดŸเต†เดธเตเดฑเตเดฑเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฎเดพเดตเตป เดตเดดเดฟเดฏเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เด‡เดคเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต, เดžเด™เตเด™เตพเด•เตเด•เต เดตเต‡เดฃเตเดŸเดคเต mvn เด•เตเดฒเต€เตป เดชเดพเด•เตเด•เต‡เดœเต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต.

Github เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เดณเตเดŸเต† เดตเตผเด•เตเด•เตเดซเตเดฒเต‹ เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดซเดฏเตฝ เดžเด™เตเด™เตพ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต, เด‡เดคเต เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ 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 โ€” เดฎเดพเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเตเดทเต เดจเดŸเดคเตเดคเตเดฎเตเดชเต‹เดดเตเด‚ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เดดเตเด‚ เดˆ เดตเตผเด•เตเด•เตเดซเตเดฒเต‹ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต†เดจเตเดจเต เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.

เดŸเดพเดธเตเด•เตเด•เตเด•เดณเตเดŸเต† เด’เดฐเต เดตเดฟเดตเดฐเดฃเด‚ เดคเดพเดดเต† เด•เตŠเดŸเตเด•เตเด•เตเดจเตเดจเต (เดœเต‡เดพเดฒเดฟเด•เตพ) เด•เต‚เดŸเดพเดคเต† เดจเดฟเตผเดตเตเดตเดนเดฃ เด˜เดŸเตเดŸเด™เตเด™เดณเตเด‚ (เด˜เดŸเตเดŸเด™เตเด™เตพ) เด“เดฐเต‹ เดœเต‹เดฒเดฟเด•เตเด•เตเด‚.

เดฑเตบ-เด“เตบ - เด‡เดตเดฟเดŸเต† เดจเดฎเตเด•เตเด•เต เดŸเดพเตผเด—เต†เดฑเตเดฑเต เด’เดŽเดธเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดพเด‚, เด…เดคเดฟเดถเดฏเด•เดฐเดฎเต†เดจเตเดจเต เดชเดฑเดฏเดŸเตเดŸเต†, เดจเดฟเด™เตเด™เตพเด•เตเด•เต Mac OS เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดพเด‚, เดŽเดจเตเดจเดพเตฝ เดธเตเดตเด•เดพเดฐเตเดฏ เดถเต‡เด–เดฐเดฃเด™เตเด™เดณเดฟเตฝ เด‡เดคเต เดตเดณเดฐเต† เดšเต†เดฒเดตเต‡เดฑเดฟเดฏเดคเดพเดฃเต (เดฒเดฟเดจเด•เตเดธเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเตเดฎเตเดชเต‹เตพ).

เด‰เดชเดฏเต‡เดพเด—เด™เตเด™เตพ เดฎเดฑเตเดฑเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดตเต€เดฃเตเดŸเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ/เดธเต†เดฑเตเดฑเดชเตเดชเต-เดœเดพเดต เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดœเดพเดต 11-เดจเตเดณเตเดณ เดŽเตปเดตเดฏเต‹เตบเดฎเต†เดจเตเดฑเต เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต† เด•เต‚เดŸเต† เดžเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เดชเตเดฐเดงเดพเดจเดฎเดพเดฏเตเด‚ เด‡เดตเดฏเดพเดฃเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด•เตˆเดฎเดพเดฑเตเดจเตเดจ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เตพ.

เดฎเดพเดตเต†เดจเดฟเตฝ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดฌเดฟเตฝเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต: run: mvn -B clean package เดชเดคเดพเด• -B เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดจเต‹เตบ-เด‡เดจเตเดฑเดฑเดพเด•เตเดŸเต€เดตเต เดฎเต‹เดกเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต†เดจเตเดจเต เดชเดฑเดฏเตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดฎเดพเดตเตป เดชเต†เดŸเตเดŸเต†เดจเตเดจเต เดžเด™เตเด™เดณเต‹เดŸเต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดšเต‹เดฆเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เด•เตŠเดณเตเดณเดพเด‚! เด‡เดชเตเดชเต‹เตพ, เดจเดฟเด™เตเด™เตพ เดฎเดพเดธเตเดฑเตเดฑเดฑเต‹เดŸเต เดชเตเดฐเดคเดฟเดœเตเดžเดพเดฌเดฆเตเดงเดฎเดพเด•เตเด•เตเดฎเตเดชเต‹เดดเต†เดฒเตเดฒเดพเด‚, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดฌเดฟเตฝเดกเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต.

เดŸเต†เดธเตเดฑเตเดฑเต เดฒเต‹เดžเตเดšเตเด•เตพ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด…เดธเด‚เดฌเตเดฒเดฟ เดจเดฒเตเดฒเดคเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏเดฟ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เดชเด•เตเดทเต‡ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดฟเดฒเตเดฒ. เด…เดคเดฟเดจเดพเตฝ, เด…เดŸเตเดคเตเดค เด˜เดŸเตเดŸเด‚ เดŸเต†เดธเตเดฑเตเดฑเต เดฑเดฃเตเดฃเตเด•เตพ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจเดคเดพเดฃเต. เด•เต‚เดŸเดพเดคเต†, เดจเดฟเด™เตเด™เตพ เด’เดฐเต 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 เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. codecov-เดจเต เด…เดคเดฟเดจเตเดฑเต‡เดคเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเดฎเตเดฃเตเดŸเต, เดŽเดจเตเดจเดพเตฝ เดžเด™เตเด™เดณเตเดŸเต† เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตโ€Œเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด‡เดคเดฟเดจเต เด’เดฐเต เดŸเต‹เด•เตเด•เตบ เด†เดตเดถเตเดฏเดฎเดพเดฃเต:

${{ secrets.CODECOV_TOKEN }} โ€” เดžเด™เตเด™เตพ เดˆ เดจเดฟเตผเดฎเตเดฎเดพเดฃเด‚ เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เดคเดตเดฃ เด•เดพเดฃเตเด‚, เดฐเดนเดธเตเดฏเด™เตเด™เตพ GitHub-เตฝ เดฐเดนเดธเตเดฏเด™เตเด™เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดธเด‚เดตเดฟเดงเดพเดจเดฎเดพเดฃเต, เดจเดฎเตเด•เตเด•เต เด…เดตเดฟเดŸเต† เดชเดพเดธเตโ€Œเดตเต‡เดกเตเด•เตพ / เดŸเต‹เด•เตเด•เดฃเตเด•เตพ / เดนเต‹เดธเตเดฑเตเดฑเตเด•เตพ / url เด•เดณเตเด‚ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เด•เต‹เดกเต เดฌเต‡เดธเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เดชเดพเดŸเดฟเดฒเตเดฒเดพเดคเตเดค เดฎเดฑเตเดฑเต เดกเดพเดฑเตเดฑเดฏเตเด‚ เดŽเดดเตเดคเดพเด‚.

GitHub-เดฒเต† เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฐเดนเดธเตเดฏเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดšเต‡เตผเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เดŽเดจเตเดจ เดตเดฟเดฒเดพเดธเดคเตเดคเดฟเตฝ เดŸเต‹เด•เตเด•เตบ เดฒเดญเดฟเด•เตเด•เตเด‚ codecov.io GitHub เดตเดดเดฟเดฏเตเดณเตเดณ เด…เด‚เด—เต€เด•เดพเดฐเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚, เด’เดฐเต เดชเตŠเดคเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพ เด‡เดคเตเดชเต‹เดฒเตเดณเตเดณ เด’เดฐเต เดฒเดฟเด™เตเด•เต เดชเดฟเดจเตเดคเตเดŸเดฐเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต: GitHub เด‰เดชเดฏเต‹เด•เตเดคเตƒเดจเดพเดฎเด‚/[เดฑเดฟเดชเตเดชเต‹ เดชเต‡เดฐเต]. เด’เดฐเต เดธเตเดตเด•เดพเดฐเตเดฏ เดถเต‡เด–เดฐเดฃเดตเตเด‚ เดšเต‡เตผเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต; เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ Github-เดฒเต† เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต เด•เต‹เดกเตโ€Œเด•เต‹เดตเต เด…เดตเด•เดพเดถเด™เตเด™เตพ เดจเตฝเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

POM เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต jacoco เดชเตเดฒเด—เดฟเตป เดšเต‡เตผเด•เตเด•เตเด•:

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

เด‡เดชเตเดชเต‹เตพ เด•เต‹เดกเตโ€Œเด•เต‹เดตเต เดฌเต‹เดŸเตเดŸเต เดžเด™เตเด™เดณเตเดŸเต† เด“เดฐเต‹ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเด‚ เดจเตฝเด•เตเด•เดฏเตเด‚ เด’เดฐเต เด•เดตเดฑเต‡เดœเต เดฎเดพเดฑเตเดฑ เด—เตเดฐเดพเดซเต เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚:

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด…เดจเดฒเตˆเดธเตผ เดšเต‡เตผเด•เตเด•เดพเด‚

เดŽเดจเตเดฑเต† เด’เดŸเตเดŸเตเดฎเดฟเด•เตเด• เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเดฟเดฒเตเด‚ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เดกเต เดตเดฟเดถเด•เดฒเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ เดธเต‹เดฃเดพเตผ เด•เตเดฒเต—เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เดŸเตเดฐเดพเดตเดฟเดธเต-เดธเดฟเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต. เด…เดคเดฟเดจเดพเตฝ GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดฎเตˆเด—เตเดฐเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ เด‡เดคเต เด’เดฐเต เดฏเตเด•เตเดคเดฟเดธเดนเดฎเดพเดฏ เด˜เดŸเตเดŸเดฎเดพเดฃเต. เด†เด•เตเดทเตป เดฎเดพเตผเด•เตเด•เดฑเตเดฑเต เด’เดฐเต เดฐเดธเด•เดฐเดฎเดพเดฏ เด•เดพเดฐเตเดฏเดฎเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เด‡เดคเตเดคเดตเดฃ เด…เดคเต เดŽเดจเตเดจเต† เด…เตฝเดชเตเดชเด‚ เดจเดฟเดฐเดพเดถเดชเตเดชเต†เดŸเตเดคเตเดคเดฟ, เด•เดพเดฐเดฃเด‚ เดถเต€เดฒเด‚ เด•เดพเดฐเดฃเด‚ เดŽเดจเดฟเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดžเดพเตป เด•เดฃเตเดŸเต†เดคเตเดคเดฟ เดตเตผเด•เตเด•เตเดซเตเดฒเต‹เดฏเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเดคเตเดคเต. เดŽเดจเตเดจเดพเตฝ เดฎเดพเดตเต†เตป เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด—เตเดฐเต‡เดกเดฟเตฝ เดชเตเดฐเต‹เดœเด•เตเดŸเตเด•เตพ เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดฒเต‚เดŸเต† เดธเต‹เดฃเดพเตผ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด‡เดคเต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เดชเด•เตเดทเต‡ เด†เดฐเดพเดฃเต เด‡เดคเต เดตเดพเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเต?!

เด’เดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดฒเต‚เดŸเต† เด‡เดคเต เดธเดพเดงเตเดฏเดฎเดฒเตเดฒ, เด…เดคเดฟเดจเดพเตฝ เดžเด™เตเด™เตพ เด‡เดคเต 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 เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดฌเดฟเตฝเดฑเตเดฑเต-เด‡เตป เดŸเต‹เด•เตเด•เดฃเดพเดฃเต, เด‡เดคเดฟเดจเตเดฑเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต† เดธเต‹เดฃเดพเตผเด•เตเดฒเต—เดกเดฟเดจเต[bot] Git-เดฒเต‡เด•เตเด•เต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚, เด…เดคเต เดžเด™เตเด™เตพเด•เตเด•เต เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเดฟเตฝ เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เตเด‚.

Dsonar.projectKey - เดธเต‹เดฃเดพเดฑเดฟเดฒเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดชเต‡เดฐเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเตฝ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚.

Dsonar.organization - GitHub-เตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดธเตเดฅเดพเดชเดจเดคเตเดคเดฟเดจเตเดฑเต† เดชเต‡เดฐเต.

เดžเด™เตเด™เตพ เด’เดฐเต เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดจเดŸเดคเตเดคเตเด•เดฏเตเด‚ เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเดฟเตฝ เดธเต‹เดฃเดพเตผเด•เตเดฒเต—เดกเต[เดฌเต‹เดŸเตเดŸเต] เดตเดฐเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เดฑเดฟเดฒเต€เดธเต เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต

เดฌเดฟเตฝเดกเต เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตโ€Œเดคเต, เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ เดฑเตบ เดšเต†เดฏเตโ€Œเดคเต, เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฑเดฟเดฒเต€เดธเต เดšเต†เดฏเตเดฏเดพเด‚. GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดฑเดฟเดฒเต€เดธเต เดฎเดพเดจเต‡เดœเตโ€Œเดฎเต†เดจเตเดฑเต เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดฎเต†เดจเตเดจเต เดจเต‹เด•เตเด•เดพเด‚.

เดœเต‹เดฒเดฟเดธเตเดฅเดฒเดคเตเดคเต, เดฌเดฟเดฑเตเดฑเตเดฌเด•เตเด•เดฑเตเดฑเดฟเตฝ เด•เต‹เดกเต เดฌเต‡เดธเต เด‰เดณเตเดณ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพ เดŽเดจเดฟเด•เตเด•เตเดฃเตเดŸเต (เดŽเดฒเตเดฒเดพเด‚ เด† เดธเตเดฑเตเดฑเต‹เดฑเดฟเดฏเดฟเดฒเต† เดชเต‹เดฒเต†เดฏเดพเดฃเต "เดžเดพเตป เดชเด•เตฝ เดธเดฎเดฏเดคเตเดคเต เดฌเดฟเดฑเตเดฑเตเดฌเด•เตเด•เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดŽเดดเตเดคเตเดจเตเดจเต, เดฐเดพเดคเตเดฐเดฟเดฏเดฟเตฝ GitHub เดฒเต‡เด•เตเด•เต เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•"). เดจเดฟเตผเดญเดพเด—เตเดฏเดตเดถเดพเตฝ, เดฌเดฟเดฑเตเดฑเตเดฌเด•เตเด•เดฑเตเดฑเดฟเดจเต เดฌเดฟเตฝเดฑเตเดฑเต-เด‡เตป เดฑเดฟเดฒเต€เดธเต เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต เดŸเต‚เดณเตเด•เตพ เด‡เดฒเตเดฒ. เด‡เดคเตŠเดฐเต เดชเตเดฐเดถเตโ€Œเดจเดฎเดพเดฃเต, เด•เดพเดฐเดฃเด‚ เด“เดฐเต‹ เดฑเดฟเดฒเต€เดธเดฟเดจเตเด‚ เดจเดฟเด™เตเด™เตพ เดธเตเดตเดฎเต‡เดงเดฏเดพ เด’เดฐเต เดชเต‡เดœเต เดธเด‚เด—เดฎเดธเตเดฅเดพเดจเดคเตเดคเต เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฑเดฟเดฒเต€เดธเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดŽเดฒเตเดฒเดพ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเตเด‚ เด…เดตเดฟเดŸเต† เดŽเดฑเดฟเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด•, เดฎเดจเดธเตเดธเดฟเดจเตเดฑเต† เด•เตŠเดŸเตเดŸเดพเดฐเด™เตเด™เดณเดฟเดฒเต‚เดŸเต† เดคเดฟเดฐเดฏเตเด•, เดœเดฟเดฑเดฏเดฟเดฒเต† เดœเต‹เดฒเดฟเด•เตพ, เดถเต‡เด–เดฐเดคเตเดคเดฟเตฝ เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเด•. เด’เดฐเต เดคเต†เดฑเตเดฑเต เดตเดฐเตเดคเตเดคเดพเตป เดจเดฟเดฐเดตเดงเดฟ เด…เดตเดธเดฐเด™เตเด™เดณเตเดฃเตเดŸเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดฎเดฑเด•เตเด•เดพเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด•เดดเดฟเดžเตเดž เดคเดตเดฃ เดฑเดฟเดฒเต€เดธเต เดšเต†เดฏเตโ€Œเดค เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดจเตฝเด•เดพเด‚, เดšเดฟเดฒเดชเตเดชเต‹เตพ เด’เดฐเต เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเต† เดŽเดจเตเดคเดพเดฏเดฟ เดคเดฐเด‚เดคเดฟเดฐเดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เดตเตเดฏเด•เตเดคเดฎเดฒเตเดฒ - เด‡เดคเต เด’เดฐเต เดธเดตเดฟเดถเต‡เดทเดคเดฏเต‹ เดฌเด—เต เดชเดฐเดฟเดนเดพเดฐเดฎเต‹ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดŽเดกเดฟเดฑเตเดฑเดฟเด‚เด—เต เดŸเต†เดธเตเดฑเตเดฑเตเด•เดณเต‹, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดธเต—เด•เดฐเตเดฏเด™เตเด™เตพ .

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดžเด™เตเด™เดณเต† เดŽเด™เตเด™เดจเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚? เด’เดฐเต เดฎเดฟเด•เดšเตเดš เดชเตเดฐเดตเตผเดคเตเดคเดจเดฎเตเดฃเตเดŸเต - เดฑเดฟเดฒเต€เดธเต เดกเตเดฐเดพเดซเตเดฑเตเดฑเตผ, เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดตเดฟเดญเดพเด—เด™เตเด™เตพ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดฑเดฟเดฒเต€เดธเต เดจเต‹เดŸเตเดŸเตเดธเต เดซเดฏเดฒเดฟเตฝ เด…เดตเดฏเต† เดธเตเดตเดฏเดฎเต‡เดต เด—เตเดฐเต‚เดชเตเดชเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเด‚ เด’เดฐเต เดฑเดฟเดฒเต€เดธเต เดจเต‹เดŸเตเดŸเตเดธเต เดซเดฏเตฝ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดธเดœเตเดœเดฎเดพเด•เตเด•เดพเตป เด‡เดคเต เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต:

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เด’เดฐเต เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต (.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-เตฝ เดŸเดพเด—เตเด•เตพ เด‡เดŸเดพเตป เดฎเดฑเดจเตเดจเดพเดฒเต‹? เด…เดชเตเดชเต‹เตพ เดเดคเต เดตเดฟเดญเดพเด—เดคเตเดคเดฟเดฒเดพเดฃเต เด‡เดคเต เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเต‡เดฃเตเดŸเดคเต†เดจเตเดจเต เดตเตเดฏเด•เตเดคเดฎเดฒเตเดฒ, เดตเต€เดฃเตเดŸเตเด‚ เด“เดฐเต‹ เดชเดฟเด†เดฑเดฟเดฒเตเด‚ เดตเต†เดตเตเดตเต‡เดฑเต† เดจเดฟเด™เตเด™เตพ เด‡เดคเต เดธเตเดตเดฎเต‡เดงเดฏเดพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดฟเดตเดฐเตเด‚. เดˆ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป, เดžเด™เตเด™เตพเด•เตเด•เต เดฎเดฑเตเดฑเตŠเดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ - เดฒเต‡เดฌเตฝ เดตเต†เดฐเดฟเดซเดฏเตผ - เด‡เดคเต เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเดฒเต† เดŸเดพเด—เตเด•เดณเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต. เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŸเดพเด—เตเด•เตพ เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดชเดฐเดฟเดถเต‹เดงเดจ เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเด‚, เดžเด™เตเด™เดณเตเดŸเต† เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเดฟเตฝ เด‡เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เดžเด™เตเด™เตพ เด•เดพเดฃเตเด‚.

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'

เด‡เดชเตเดชเต‹เตพ เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเตเตพ-เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดŸเดพเด—เตเด•เดณเดฟเตฝ เด’เดจเตเดจเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดŸเดฏเดพเดณเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚: เดŸเตˆเดชเตเดชเต: เดซเดฟเด•เตเดธเต, เดคเดฐเด‚: เดซเต€เดšเตเดšเดฑเตเด•เตพ, เดคเดฐเด‚: เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป, เดคเดฐเด‚: เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ, เดคเดฐเด‚: เด•เต‹เตบเดซเดฟเด—เตผ.

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดŸเต† เดธเตเดตเดฏเดฎเต‡เดตเดฏเตเดณเตเดณ เดตเตเดฏเดพเด–เตเดฏเดพเดจเด‚

เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเดณเตเดณ เดซเดฒเดชเตเดฐเดฆเดฎเดพเดฏ เดตเตผเด•เตเด•เต เดŽเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ เดžเด™เตเด™เตพ เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดตเดฟเดทเดฏเดคเตเดคเดฟเตฝ เดธเตเดชเตผเดถเดฟเดšเตเดšเดคเดฟเดจเดพเตฝ, เดฒเต‡เดฌเดฒเตผ เดชเต‹เดฒเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฎเต‚เดฒเตเดฏเดตเดคเตเดคเดพเดฃเต, เดเดคเต เดซเดฏเดฒเตเด•เตพ เดฎเดพเดฑเตเดฑเดฟเดฏเต†เดจเตเดจเดคเดฟเดจเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เด‡เดคเต เดชเดฟเด†เตผ เดŸเดพเด—เตเด•เตพ เด‡เดŸเตเดจเตเดจเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเดฒเต† เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจ เดเดคเตŠเดฐเต เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเตเด‚ เดจเดฎเตเด•เตเด•เต [เดฌเดฟเตฝเดกเต] เด†เดฏเดฟ เด…เดŸเดฏเดพเดณเดชเตเดชเต†เดŸเตเดคเตเดคเดพเด‚ .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/**"

เด†เดตเดถเตเดฏเดฎเดพเดฏ เดฒเต‡เดฌเดฒเตเด•เดณเตเดŸเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเดตเตเดฎเดพเดฏเดฟ เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเดฟเตฝ เดฒเต‡เดฌเดฒเตเด•เตพ เดธเตเดตเดฏเดฎเต‡เดต เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดœเต‹เดŸเดฟเดฏเดพเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดžเดพเตป เดตเดฟเดœเดฏเดฟเดšเตเดšเดฟเดฒเตเดฒ; เดฌเต‹เดŸเตเดŸเต เดšเต‡เตผเดคเตเดค เดฒเต‡เดฌเดฒเตเด•เตพ เด•เดพเดฃเดพเตป เดฎเดพเดšเตเดšเต-เดฒเต‡เดฌเตฝ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เดฐเดฃเตเดŸเต เด˜เดŸเตเดŸเด™เตเด™เดณเตเด‚ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดŽเดดเตเดคเตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต. เดŽเดจเตเดจเดพเตฝ เดˆ เดซเต‹เดฎเดฟเตฝ เดชเต‹เดฒเตเด‚ เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดตเดณเดฐเต† เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฃเต; เด’เดฐเต เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพ เดฒเดฟเดธเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดฐเต เดฒเต‡เดฌเตฝ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเต

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

GitHub เด†เด•เตโ€Œเดทเดจเตเด•เตพ เดตเดดเดฟ (ssh เดตเดดเดฟ, scp เดตเดดเดฟเดฏเตเด‚ เดกเต‹เด•เตเด•เตผ-เดนเดฌเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเด‚) เดžเดพเตป เดจเดฟเดฐเดตเดงเดฟ เดตเดฟเดจเตเดฏเดพเดธ เด“เดชเตเดทเดจเตเด•เตพ เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเต, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตˆเดชเตเดชเตโ€Œเดฒเตˆเตป เดŽเดคเตเดฐ เดตเดณเดžเตเดžเดคเดพเดฃเต†เด™เตเด•เดฟเดฒเตเด‚, เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เดฌเตˆเดจเดฑเดฟ เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดตเดดเดฟ เดจเดฟเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเตเดฎเต†เดจเตเดจเต เดŽเดจเดฟเด•เตเด•เต เดชเดฑเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚. เด†เดฃเต.

เดฎเตเดดเตเดตเตป เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเดฑเตเด‚ เด’เดฐเดฟเดŸเดคเตเดคเต เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด“เดชเตเดทเตป เดŽเดจเดฟเด•เตเด•เต เด‡เดทเตเดŸเดชเตเดชเต†เดŸเตเดŸเต, เด…เดคเดฟเดจเดพเตฝ GitHub เดชเดพเด•เตเด•เต‡เดœเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เดŽเด™เตเด™เดจเต† เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดจเต‹เด•เตเด•เดพเด‚ (เด‡เดคเต เดฌเตˆเดจเดฑเดฟ เด‰เดณเตเดณเดŸเด•เตเด•เด‚, npm, เดœเดพเตผ, เดกเต‹เด•เตเด•เตผ เดŽเดจเตเดจเดฟเดตเดฏเตเด•เตเด•เตเดณเตเดณ เด’เดฐเต เดถเต‡เด–เดฐเดฎเดพเดฃเต).

เด’เดฐเต เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด…เดคเต 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 เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเตเดŸเต†เดฏเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เด‰เดŸเดฎเดฏเตเดŸเต†เดฏเตเด‚ เดชเต‡เดฐเต (โ€œเด‰เดŸเดฎ/เดฑเดฟเดชเตเดชเต‹-เดชเต‡เดฐเตโ€) เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเตเดŸเต† เดชเต‡เดฐเตŠเดดเดฟเด•เต† เดˆ เดตเดฐเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดฒเตเดฒเดพเด‚ เดฎเตเดฑเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เดฌเดพเดทเต เดตเดพเด•เตเดฏเด˜เดŸเดจ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚: ${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, เดจเดฟเด™เตเด™เตพ เดฎเดพเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดจเตเดธเดฐเดฟเดšเตเดšเต เด…เดคเตเดคเดฐเด‚ เดฌเดฟเตฝเดกเตเด•เตพ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เด‡เดตเดฟเดŸเต†เดฏเตเด‚ เดธเต‚เด•เตเดทเตเดฎเดคเด•เดณเตเดฃเตเดŸเต. เด‡เดตเดจเตเดฑเต, เดคเตเดŸเตผเดจเตเดจเต Git เดšเดฐเดฟเดคเตเดฐเดคเตเดคเดฟเตฝ เดจเดฎเตเดฎเตพ เด•เดพเดฃเตเดจเตเดจ เดนเดพเดทเตเดฎเดพเดฏเดฟ SHA เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเตเดจเตเดจเดฟเดฒเตเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚, เด•เดพเดฐเดฃเด‚ PR-เดฒเต† เดกเต†เดกเตโ€Œเดฒเต‹เด•เตเด•เต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เด’เดดเดฟเดตเดพเด•เตเด•เดพเตป เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ/เดšเต†เด•เตเด•เต—เดŸเตเดŸเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด…เดคเดฟเดจเตเดฑเต‡เดคเดพเดฏ เดคเดจเดคเดพเดฏ เดนเดพเดทเต เด‰เดฃเตเดŸเดพเด•เตเด•เตเดจเตเดจเต.

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเดพเตฝ, เดถเต‡เด–เดฐเดฃเดคเตเดคเดฟเตฝ เดชเดพเด•เตเด•เต‡เดœเตเด•เดณเตเดŸเต† เดตเดฟเดญเดพเด—เด‚ (https://github.com/antkorwin/github-actions/packages) เดคเตเดฑเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดชเตเดคเดฟเดฏ เดกเต‹เด•เตเด•เตผ เดšเดฟเดคเตเดฐเด‚ เด•เดพเดฃเตเด‚:

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เด…เดตเดฟเดŸเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเดฟเดจเตเดฑเต† เดชเดคเดฟเดชเตเดชเตเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเตเด‚ เด•เดพเดฃเดพเตป เด•เดดเดฟเดฏเตเด‚.

เดˆ เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เดณเตเดŸเต† เดธเต†เตผเดตเตผ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดคเต เดธเต‡เดตเดจเด‚ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เด…เดตเดถเต‡เดทเดฟเด•เตเด•เตเดจเตเดจเดคเต. systemd เดตเดดเดฟ เด‡เดคเต เดŽเด™เตเด™เดจเต† เดšเต†เดฏเตเดฏเดพเดฎเต†เดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดžเดพเตป เดฎเดฑเตเดฑเตŠเดฐเดฟเด•เตเด•เตฝ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.

เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เด†เดฐเต‹เด—เตเดฏ เดชเดฐเดฟเดถเต‹เดงเดจ เดŽเด™เตเด™เดจเต† เดจเดŸเดคเตเดคเดพเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเดณเดฟเดคเดฎเดพเดฏ เด’เดฐเต เด“เดชเตเดทเตป เดจเต‹เด•เตเด•เดพเด‚. เดžเด™เตเด™เดณเตเดŸเต† เดฌเต‚เดŸเตเดŸเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต เด’เดฐเต เด†เด•เตเดฏเตเดตเต‡เดฑเตเดฑเตผ เด‰เดฃเตเดŸเต, เด…เดคเดฟเดจเดพเตฝ เด…เดคเดฟเดจเตเดฑเต† เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดธเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต 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"}

เด•เตเดฐเต‹เตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเต†เตผเดตเตผ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เด’เดฐเต เดŸเดพเดธเตเด•เต เดŽเดดเตเดคเตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดžเด™เตเด™เตพเด•เตเด•เต เดตเต‡เดฃเตเดŸเดคเต, เดชเต†เดŸเตเดŸเต†เดจเตเดจเต เด…เดคเต เดžเด™เตเด™เตพเด•เตเด•เต เด‰เดคเตเดคเดฐเด‚ เดจเตฝเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดตเดดเดฟ เด’เดฐเต เด…เดฑเดฟเดฏเดฟเดชเตเดชเต เด…เดฏเดฏเตเด•เตเด•เตเด‚.

เด†เดฆเตเดฏเด‚, เด’เดฐเต เด•เตเดฐเต‹เตบ เดตเตผเด•เตเด•เตเดซเตเดฒเต‹ เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดจเต‹เด•เตเด•เดพเด‚:

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

เด‡เดคเต เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฃเต, เดตเต†เดฌเตโ€Œเดนเตเด•เตเด•เตเด•เตพเด•เตเด•เต เด’เดŸเตเดŸเตเด‚ เดšเต‡เดฐเดพเดคเตเดค เด‡เดตเดจเตเดฑเตเด•เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต Github-เตฝ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจเต เดŽเดจเดฟเด•เตเด•เต เดตเดฟเดถเตเดตเดธเดฟเด•เตเด•เดพเตป เดชเต‹เดฒเตเด‚ เด•เดดเดฟเดฏเตเดจเตเดจเดฟเดฒเตเดฒ. เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เด‰เดฃเตเดŸเต: 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"

เด†เดฆเตเดฏเด‚, เด…เดญเตเดฏเตผเดคเตเดฅเดจเดฏเต‹เดŸเต เดธเต†เตผเดตเตผ เดชเตเดฐเดคเดฟเด•เดฐเดฟเดšเตเดšเดคเต เดžเด™เตเด™เตพ เด’เดฐเต เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดฒเต‡เด•เตเด•เต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดŸเตเดคเตเดค เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดธเต เดฏเตเดชเดฟ เด†เดฃเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต, เด…เด™เตเด™เดจเต†เดฏเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด’เดฐเต เดชเดฟเดถเด•เต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดชเตเดฑเดคเตเดคเตเด•เดŸเด•เตเด•เตเดจเตเดจเต. เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เตˆเด•เดณเดพเตฝ เด’เดฐเต เดชเตเดฐเดตเตผเดคเตเดคเดจเดคเตเดคเต† "เดฎเดฑเดฏเตเด•เตเด•เดพเตป" เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เดชเดฟเดจเตเดจเต† เดชเตเดฑเดคเตเดคเตเด•เดŸเด•เตเด•เตเด• 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 เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต; เด’เดฐเต เดฌเต‹เดŸเตเดŸเต เดŸเต‹เด•เตเด•เดฃเตเด‚ เดšเดพเดฑเตเดฑเต เดเดกเดฟเดฏเตเด‚ เดŽเด™เตเด™เดจเต† เดจเต‡เดŸเดพเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดพเดฏเดฟเด•เตเด•เดพเด‚: github.com/appleboy/telegram-action

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

Github-เดฒเต† เดฐเดนเดธเตเดฏเด™เตเด™เดณเดฟเตฝ เดŽเดดเตเดคเดพเตป เดฎเดฑเด•เตเด•เดฐเตเดคเต: เดธเต†เตผเดตเดฑเดฟเดจเดพเดฏเตเดณเตเดณ URL, เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดฌเต‹เดŸเตเดŸเดฟเดจเตเดณเตเดณ เดŸเต‹เด•เตเด•เดฃเตเด•เตพ.

เดฌเต‹เดฃเดธเต เดŸเตเดฐเดพเด•เตเด•เต - เดฎเดŸเดฟเดฏเดจเตเดฎเดพเตผเด•เตเด•เตเดณเตเดณ JIRA

เดžเด™เตเด™เตพ เดœเดฟเดฑเดฏเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเดฎเต†เดจเตเดจเต เดžเดพเตป เดตเดพเด—เตเดฆเดพเดจเด‚ เดšเต†เดฏเตเดคเต, เดžเด™เตเด™เตพ เดฎเดŸเด™เตเด™เดฟ. เดกเดตเดฒเดชเตเดชเตผเดฎเดพเตผ เด’เดฐเต เดซเต€เดšเตเดšเตผ เด‰เดฃเตเดŸเดพเด•เตเด•เดฟเดฏเดชเตเดชเต‹เตพ, เด’เดฐเต เดฌเตเดฐเดพเดžเตเดšเต เดฒเดฏเดฟเดชเตเดชเดฟเดšเตเดšเดชเตเดชเต‹เตพ เดธเตเดฑเตเดฑเดพเตปเดกเต-เด…เดชเตเดชเตเด•เดณเดฟเตฝ เดจเต‚เดฑเตเด•เดฃเด•เตเด•เดฟเดจเต เดคเดตเดฃ เดžเดพเตป เด’เดฐเต เดธเดพเดนเดšเดฐเตเดฏเด‚ เดจเดฟเดฐเต€เด•เตเดทเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เดชเด•เตเดทเต‡ เดชเตเดฐเดถเตเดจเด‚ JIRA-เดฏเดฟเดฒเต‡เด•เตเด•เต เดตเดฒเดฟเดšเตเดšเดฟเดŸเดพเตป เดฎเดฑเดจเตเดจเต. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด‡เดคเต†เดฒเตเดฒเดพเด‚ เด’เดฐเดฟเดŸเดคเตเดคเต เดšเต†เดฏเตเดคเดพเตฝ, เด…เดคเต เดŽเดณเตเดชเตเดชเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚, เดชเด•เตเดทเต‡ เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ IDE-เดฏเดฟเตฝ เด•เต‹เดกเต เดŽเดดเตเดคเตเดจเตเดจเต, เดถเดพเด–เด•เตพ เดฌเดฟเดฑเตเดฑเตเดฌเด•เตเด•เดฑเตเดฑเดฟเดฒเต‹ GitHub-เดฒเต‹ เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเด•, เดคเตเดŸเตผเดจเตเดจเต เดŸเดพเดธเตเด•เตเด•เตเด•เตพ เดœเดฟเดฑเดฏเดฟเดฒเต‡เด•เตเด•เต เดตเดฒเดฟเดšเตเดšเดฟเดŸเตเด•, เด‡เดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดชเตเดคเดฟเดฏ เดตเดฟเตปเดกเต‹เด•เตพ เดคเตเดฑเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. , เดšเดฟเดฒเดชเตเดชเต‹เตพ เดตเต€เดฃเตเดŸเตเด‚ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเตเด• เดคเตเดŸเด™เตเด™เดฟเดฏเดต. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ เดŽเดจเตเดคเดพเดฃเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต†เดจเตเดจเต เดจเดฟเด™เตเด™เตพ เดจเดจเตเดจเดพเดฏเดฟ เด“เตผเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดฌเต‹เตผเดกเต เดตเต€เดฃเตเดŸเตเด‚ เดคเตเดฑเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เด…เตผเดคเตเดฅเดฎเดฟเดฒเตเดฒ. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เดฐเดพเดตเดฟเดฒเต† เด’เดฐเต เดธเตเดฑเตเดฑเดพเตปเดกเดชเตเดชเดฟเตฝ เดจเดฟเด™เตเด™เตพ เดŸเดพเดธเตโ€Œเด•เต เดฌเต‹เตผเดกเต เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดธเดฎเดฏเด‚ เดšเต†เดฒเดตเดดเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดˆ เดชเดคเดฟเดตเต เดŸเดพเดธเตโ€Œเด•เตเด•เดฟเตฝ GitHub เดžเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เตเด‚; เดคเตเดŸเด•เตเด•เด•เตเด•เดพเตผเด•เตเด•เดพเดฏเดฟ, เดžเด™เตเด™เตพ เด’เดฐเต เดชเตเตพ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เดธเตเดตเดฏเดฎเต‡เดต code_review เด•เต‹เดณเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดตเดฒเดฟเดšเตเดšเดฟเดŸเดพเด‚. เดฌเตเดฐเดพเดžเตเดšเต เดจเดพเดฎเด•เดฐเดฃ เด•เตบเดตเต†เตปเดทเตป เดชเดฟเดจเตเดคเตเดŸเดฐเตเด• เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดจเดฟเด™เตเด™เตพ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต:

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

เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด•เต€ "GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ" GA เด†เดฃเต†เด™เตเด•เดฟเตฝ, เดชเดฟเดจเตเดจเต† GA-8-jira-bot GA-8 เดŸเดพเดธเตเด•เต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เดถเดพเด–เดฏเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚.

เดœเดฟเดฑเดฏเตเดฎเดพเดฏเตเดณเตเดณ เดธเด‚เดฏเต‹เดœเดจเด‚ เด…เดฑเตเดฑเตเดฒเดพเดธเดฟเดฏเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเดฟเดฒเต‚เดŸเต†เดฏเดพเดฃเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต, เด…เดต เดคเดฟเด•เดžเตเดžเดคเดฒเตเดฒ, เด…เดตเดฏเดฟเตฝ เดšเดฟเดฒเดคเต เดŽเดจเดฟเด•เตเด•เต เดตเต‡เดฃเตเดŸเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เดจเตเดจเต เดžเดพเตป เดชเดฑเดฏเดฃเด‚. เดŽเดจเตเดจเดพเตฝ เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดตเดฏเตเด‚ เดธเดœเต€เดตเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดตเดฏเตเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เดžเด™เตเด™เตพ เดšเตผเดšเตเดšเดšเต†เดฏเตเดฏเต‚.

เด†เดฆเตเดฏเด‚ เดจเดฟเด™เตเด™เตพ เด†เด•เตเดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 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-เดฏเดฟเดฒเต† เด…เด‚เด—เต€เด•เดพเดฐเดตเตเด‚ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต.

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เด…เดคเตเดชเต‹เดฒเต†, เดฎเดพเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดŸเดพเดธเตโ€Œเด•เตเด•เตเด•เดณเตเด‚ GitHub เดตเตผเด•เตเด•เตเดซเตเดฒเต‹เดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฎเดฑเตเดฑเต เด‡เดตเดจเตเดฑเตเด•เดณเตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเดฒเดฟเดšเตเดšเดฟเดŸเดพเดจเดพเด•เตเด‚. เดชเตŠเดคเตเดตเต‡, เด‡เดคเต†เดฒเตเดฒเดพเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดญเดพเดตเดจเดฏเต†เดฏเตเด‚ เดชเดคเดฟเดตเต เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เตพ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเดจเตเดณเตเดณ เด†เด—เตเดฐเดนเดคเตเดคเต†เดฏเตเด‚ เด†เดถเตเดฐเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เด•เดฃเตเดŸเต†เดคเตเดคเดฒเตเด•เตพ

เดจเดฟเด™เตเด™เตพ เด•เตเดฒเดพเดธเดฟเด•เต DEVOPS เดกเดฏเด—เตเดฐเด‚ เดจเต‹เด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดžเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต เด’เดดเดฟเด•เต† เดŽเดฒเตเดฒเดพ เด˜เดŸเตเดŸเด™เตเด™เดณเตเด‚ เด•เดตเตผ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เดจเดฟเด™เตเด™เตพ เดถเตเดฐเดฎเดฟเดšเตเดšเดพเตฝ, เดนเต†เตฝเดชเตเดชเต-เดกเต†เดธเตโ€Œเด•เต เดธเดฟเดธเตเดฑเตเดฑเดตเตเดฎเดพเดฏเดฟ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดพเตผเด•เตเด•เดฑเตเดฑเดฟเตฝ เดšเดฟเดฒ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดชเตˆเดชเตเดชเต เดฒเตˆเตป เดคเดฟเดฐเดฟเดžเตเดžเตเดตเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเด‚. เดธเดฎเด—เตเดฐเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เดคเตเดคเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดจเดฟเด—เดฎเดจเด™เตเด™เดณเดฟเตฝ เดŽเดคเตเดคเดฟเดšเตเดšเต‡เดฐเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเดพเด‚.

GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดจเดฐเด•เดคเตเดคเดฟเดจเตเดฑเต† เดธเตผเด•เตเด•เดฟเดณเตเด•เตพ (เด’เดฐเต เดœเดพเดต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เด’เดฐเต CI/CD เดชเตˆเดชเตเดชเตเดฒเตˆเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเต)

เดชเตเดฐเต‹เดธเต:

  • เดŽเดฒเตเดฒเดพ เด…เดตเดธเดฐเด™เตเด™เดณเดฟเดฒเตเด‚ เดฑเต†เดกเดฟเดฎเต†เดฏเตเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดณเตเดณ เดฎเดพเตผเด•เตเด•เดฑเตเดฑเตเดชเตเดฒเต‡เดธเต, เด‡เดคเต เดตเดณเดฐเต† เดฐเดธเด•เดฐเดฎเดพเดฃเต. เด…เดตเดฏเดฟเตฝ เดฎเดฟเด•เตเด•เดคเดฟเดฒเตเด‚, เดธเดฎเดพเดจเดฎเดพเดฏ เด’เดฐเต เดชเตเดฐเดถเตเดจเด‚ เดŽเด™เตเด™เดจเต† เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ GitHub เดถเต‡เด–เดฐเดฃเดคเตเดคเดฟเตฝ เดจเต‡เดฐเดฟเดŸเตเดŸเต เด’เดฐเต เดซเต€เดšเตเดšเตผ เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดฐเดšเดฏเดฟเดคเดพเดตเดฟเดจเต เดŽเด™เตเด™เดจเต† เดชเต‹เดธเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเด‚ เดŽเดจเตเดจเต เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเต‹เดดเตเดธเต เด•เต‹เดกเต เดจเต‹เด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต.
  • เด…เดธเด‚เดฌเตเดฒเดฟเด•เตเด•เดพเดฏเดฟ เดŸเดพเตผเด—เต†เดฑเตเดฑเต เดชเตเดฒเดพเดฑเตเดฑเตเดซเต‹เด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเต: Linux, mac OS, windows เดŽเดจเตเดจเดฟเดต เดตเดณเดฐเต† เดฐเดธเด•เดฐเดฎเดพเดฏ เด’เดฐเต เดธเดตเดฟเดถเต‡เดทเดคเดฏเดพเดฃเต.
  • Github เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด’เดฐเต เดฎเดนเดคเตเดคเดพเดฏ เด•เดพเดฐเตเดฏเดฎเดพเดฃเต, เดฎเตเดดเตเดตเตป เด‡เตปเดซเตเดฐเดพเดธเตเดŸเตเดฐเด•เตเดšเดฑเตเด‚ เด’เดฐเดฟเดŸเดคเตเดคเต เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฃเต, เดจเดฟเด™เตเด™เตพ เดตเตเดฏเดคเตเดฏเดธเตเดค เดตเดฟเตปเดกเต‹เด•เดณเดฟเดฒเต‚เดŸเต† เดธเตผเดซเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ, เดŽเดฒเตเดฒเดพเด‚ เด’เดจเตเดจเต‹ เดฐเดฃเตเดŸเต‹ เดฎเต—เดธเต เด•เตเดฒเดฟเด•เตเด•เตเด•เดณเตเดŸเต† เดชเดฐเดฟเดงเดฟเดฏเดฟเดฒเดพเดฃเต, เด•เต‚เดŸเดพเดคเต† GitHub เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดฎเดพเดฏเดฟ เดคเดฟเด•เดšเตเดšเตเด‚ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดธเต—เดœเดจเตเดฏ เดชเดคเดฟเดชเตเดชเดฟเดฒเต† เดกเต‹เด•เตเด•เตผ เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด‚ เด’เดฐเต เดจเดฒเตเดฒ เดจเต‡เดŸเตเดŸเดฎเดพเดฃเต.
  • GitHub เดฌเดฟเตฝเดกเต เดฒเต‹เด—เตเด•เดณเดฟเตฝ เดฐเดนเดธเตเดฏเด™เตเด™เตพ เดฎเดฑเดฏเตเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเดพเตฝ เดชเดพเดธเตโ€Œเดตเต‡เดกเตเด•เดณเตเด‚ เดŸเต‹เด•เตเด•เดฃเตเด•เดณเตเด‚ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เด…เดคเตเดฐ เดญเดฏเดพเดจเด•เดฎเดฒเตเดฒ. เดŽเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เดชเดฐเต€เด•เตเดทเดฃเด™เตเด™เดณเดฟเดฒเตเด‚, เด•เตบเดธเต‹เดณเดฟเตฝ เดฐเดนเดธเตเดฏเด‚ เด…เดคเดฟเดจเตเดฑเต† เดถเตเดฆเตเดงเดฎเดพเดฏ เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด•เดพเดฃเดพเตป เดŽเดจเดฟเด•เตเด•เต เด•เดดเดฟเดžเตเดžเดฟเดฒเตเดฒ.
  • เด“เดชเตเดชเตบ เดธเต‹เดดเตเดธเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เตพเด•เตเด•เต เดธเต—เดœเดจเตเดฏเด‚

เดชเดฐเดฟเด—เดฃเดจ:

  • YML, เดถเดฐเดฟ, เดŽเดจเดฟเด•เตเด•เต เด…เดตเดจเต† เด‡เดทเตเดŸเดฎเดฒเตเดฒ. เด…เดคเตเดคเดฐเด‚ เด’เดฐเต เด’เดดเตเด•เตเด•เดฟเดจเตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดŽเดจเตเดฑเต† เดเดฑเตเดฑเดตเตเด‚ เดธเดพเดงเดพเดฐเดฃเดฎเดพเดฏ เด•เดฎเตเดฎเดฟเดฑเตเดฑเต เดธเดจเตเดฆเต‡เดถเด‚ "yml เดซเต‹เตผเดฎเดพเดฑเตเดฑเต เดถเดฐเดฟเดฏเดพเด•เตเด•เตเด•" เด†เดฃเต, เดคเตเดŸเตผเดจเตเดจเต เดจเดฟเด™เตเด™เตพ เดŽเดตเดฟเดŸเต†เดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เด’เดฐเต เดŸเดพเดฌเต เด‡เดŸเดพเตป เดฎเดฑเด•เตเด•เตเด•เดฏเต‹ เดคเต†เดฑเตเดฑเดพเดฏ เดตเดฐเดฟเดฏเดฟเตฝ เดŽเดดเตเดคเตเด•เดฏเต‹ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดชเตŠเดคเตเดตเต‡, เด’เดฐเต เดชเตเดฐเตŠเดŸเตเดŸเด•เตเดฑเตเดฑเดฑเตเด‚ เดญเดฐเดฃเดพเดงเดฟเด•เดพเดฐเดฟเดฏเตเดฎเดพเดฏเดฟ เด’เดฐเต เดธเตเด•เตเดฐเต€เดจเดฟเดจเต เดฎเตเดจเตเดจเดฟเตฝ เด‡เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดเดฑเตเดฑเดตเตเด‚ เดธเตเด–เด•เดฐเดฎเดพเดฏ เด…เดจเตเดญเดตเดฎเดฒเตเดฒ.
  • เดกเต€เดฌเด—เต เดšเต†เดฏเตเดฏเตเด•, เด•เดฎเตเดฎเดฟเดฑเตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดดเตเด•เตเด•เต เดกเต€เดฌเด—เต เดšเต†เดฏเตเดฏเตเด•, เด’เดฐเต เดฑเต€เดฌเดฟเตฝเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•, เด•เตบเดธเต‹เดณเดฟเดฒเต‡เด•เตเด•เต เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจเดฟเดต เดŽเดฒเตเดฒเดพเดฏเตโ€Œเดชเตเดชเต‹เดดเตเด‚ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดฒเตเดฒ, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต "เดจเดฟเด™เตเด™เตพ เด…เดฎเดฟเดคเดฎเดพเดฏเดฟ เดšเต†เดฏเตเดคเต" เดŽเดจเตเดจ เดตเดฟเดญเดพเด—เดคเตเดคเดฟเตฝ เด•เต‚เดŸเตเดคเดฒเดพเดฃเต; เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดคเตเด‚ เดกเต€เดฌเด—เต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเดฎเตเดชเต‹เตพ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เดเดกเดฟเดฏ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพ เดชเดคเดฟเดตเดพเดฃเต. .
  • เดกเต‹เด•เตเด•เดฑเดฟเตฝ เดชเตŠเดคเดฟเดžเตเดžเดพเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดดเตเดคเดพเตป เด•เดดเดฟเดฏเตเด‚, เดŽเดจเตเดจเดพเตฝ เดœเดพเดตเดพเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดฎเดพเดคเตเดฐเดฎเต‡ เดชเตเดฐเดพเดฆเต‡เดถเดฟเด•เดฎเดพเดฏเดฟ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเตเดณเตเดณเต‚, เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚ เด‡เดคเต เด…เดญเดฟเดฐเตเดšเดฟเดฏเตเดŸเต† เด•เดพเดฐเตเดฏเดฎเดพเดฃเต, เดชเด•เตเดทเต‡ js-เดจเต เดชเด•เดฐเด‚ เดฎเดฑเตเดฑเต†เดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดžเดพเตป เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด‚.

เดŽเดฒเตเดฒเดพ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เดณเตเดฎเตเดณเตเดณ เดถเต‡เด–เดฐเด‚ เด‡เดตเดฟเดŸเต† เด‰เดฃเตเดŸเต†เดจเตเดจเต เดžเดพเตป เดจเดฟเด™เตเด™เดณเต† เด“เตผเดฎเตเดฎเดฟเดชเตเดชเดฟเด•เตเด•เดŸเตเดŸเต†: github.com/antkorwin/github-actions

เด…เดŸเตเดคเตเดค เด†เดดเตเดš เดžเดพเตป เด•เต‚เดŸเต† เดชเต†เตผเดซเต‹เด‚ เดšเต†เดฏเตเดฏเตเด‚ เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต Heisenbug 2020 Piter เด•เต‹เตบเดซเดฑเตปเดธเดฟเตฝ. เดŸเต†เดธเตเดฑเตเดฑเต เดกเดพเดฑเตเดฑ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เตเดฎเตเดชเต‹เตพ เดคเต†เดฑเตเดฑเตเด•เตพ เดŽเด™เตเด™เดจเต† เด’เดดเดฟเดตเดพเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดœเดพเดต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเดฒเต† เดกเดพเดฑเตเดฑเดพ เดธเต†เดฑเตเดฑเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดฐเดนเดธเตเดฏเด™เตเด™เดณเตเด‚ เดžเดพเตป เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเตเด‚!

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com