ืืขืชืื ืงืจืืืืช ืื ื ืฆืจืื ืืื ืืช ืฆืื ืืจ ืืื ืืืช ืคืจืืืงืืื ืื'ืืืื. ืืคืขืืื ืื ืงืื ืคืชืื ืืืคืขืืื ืื. ืืืืจืื ื ืืืืืชื ืื ืกืืช ืืืขืืืจ ืืืง ืืืืืืจืื ืฉืื ื-Travis-CI ื-TeamCity ื-GitHub Actions, ืืื ืื ืฉืืฆื ืืื.
ืื ื ืขืฉื ืืืืืืืืช?
ืจืืฉืืช, ืื ืื ื ืฆืจืืืื ืคืจืืืงื ืฉื ืขืฉื ืืืืืืืืช, ืืืื ื ืขืฉื ืืคืืืงืฆืื ืงืื ื ื-Spring boot/Java 11/Maven. ืืฆืืจื ืืืืจ ืื ืื ื ืชืขื ืืื ืืื ืืืืืืงืช ืืืคืืืงืฆืื, ืืชืฉืชืืช ืืกืืื ืืืคืืืงืฆืื ืืฉืืื ืื ื, ืื ืฉืืงืจ REST API ืคืฉืื ืืกืคืืง ืื ื.
ืืชื ืืืื ืืจืืืช ืืช ืืืงืืจืืช ืืื:
JIRA ืืชืื ืื
ืืืื ืืืืจ ืฉืืืจื ืืื ืื ื ืืฉืชืืฉืื ื-JIRA ืืืขืงื ืืืจ ืืขืืืช, ืื ืืืื ื ืืฆืืจ ืืื ื ืคืจื ืืคืจืืืงื ืืื ืื ืืกืืฃ ืฉื ืืช ืืืขืืืช ืืจืืฉืื ืืช:
ืงืฆืช ืืืืืจ ืืืชืจ ื ืืืืจ ืืืืื ืืืจืื ืืขื ืืื ืื JIRA ื-GitHub ืืืืืื ืืืฆืืข ืืฉืืืื.
ืื ื ืืืคืืื ืืช ืืืจืืื ืืืืืืืืืช ืฉื ืืคืจืืืงื
ืคืจืืืงื ืืืืืงื ืฉืื ื ื ืื ื ืืืืฆืขืืช maven, ืื ืื ืืืชื ืื ืคืฉืืื, ืื ืื ืฉืื ืื ื ืฆืจืืืื ืื ืืช ืืืืืื ืื ืงืืื ืฉื mvn.
ืืื ืืขืฉืืช ืืืช ืืืืฆืขืืช Github Actions, ื ืฆืืจื ืืืฆืืจ ืืืืืจ ืงืืืฅ ืืืชืืจ ืืช ืืจืืืช ืืขืืืื ืฉืื ื, ืื ืืืื ืืืืขืฉืืช ืขื ืงืืืฅ 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, ืืื ืืืืืจืื ืคืจืืืื ืื ืื ืืงืจ (ืืืฉืืืื ืืืื ืืงืก).
ืฉืืืืฉืื ืืืคืฉืจ ืื ืืขืฉืืช ืฉืืืืฉ ืืืืจ ืืคืขืืืืช ืืืจืืช, ืืืฉื, ืืืืฆืขืืช ืคืขืืืช actions/setup-java ืื ื ืืชืงืื ืื ืืช ืืกืืืื ืขืืืจ Java 11.
ืืืืฆืขืืช ืขื ืื ื ืืืืืื ืืฆืืื ืืช ืืคืจืืืจืื ืฉืืืืฆืขืืชื ืื ื ืืคืขืืืื ืืช ืืคืขืืื, ืืขืฆื ืืื ืืืืขืื ืื ืฉืืืขืืจื ืืคืขืืื.
ืื ืื ืฉื ืืชืจ ืืื ืืืคืขืื ืืช ืื ืืืช ืืคืจืืืงื ืขื Maven: run: mvn -B clean package
ืืื -B ืืืืจ ืฉืื ืื ื ืฆืจืืืื ืืฆื ืื ืืื ืืจืืงืืืื ืืื ืฉืืืืื ืืคืชืข ืื ืืจืฆื ืืฉืืื ืืืชื ื ืืฉืื
ืืืื! ืืขืช, ืืื ืคืขื ืฉืืชื ืืชืืืื ืืืืกืืจ, ืื ืืืช ืืคืจืืืงื ืืชืืืื.
ืืืืืืฆืื ืฉื ืืฉืงืืช ืืืืงื
ืืจืืื ืืืื, ืืื ืืืฆืืืืช, ืคืจืืืงื ืืืื ืืืืืช ืืืจืื ืืืืื, ืืื ืื ืืขืืื. ืืื, ืืฉืื ืืื ืืื ืืืคืื ืืช ืจืืฆืืช ืืืืืงื ืืืืืืืืืืช. ืื ืืกืฃ, ืื ื ืื ืืืกืชืื ืขื ืชืืฆืืืช ืืืขืืจ ืืืืื ืื ืืืฉืจ ืขืืฉืื ืกืงืืจืช ืืืกื ืฆืืืืจ โ ืืืืขืื ืืืืืืืช ืฉืืืืืงืืช ืขืืืจืืช ืืืฃ ืืื ืื ืฉืื ืืืคืขืื ืืช ืืกื ืืฃ ืฉืื ืืคื ื ืืืฆืืข ืืืืื.
ื ืขืจืื ืืืืงืืช ืืขืช ืืฆืืจืช ืืงืฉืช pull ืื ืืื ืืชืื ืืืืกืืจ, ืืืืงืืื ื ืืกืืฃ ืืฆืืจืช ืืื ืขื ืืืกืื ืงืื.
name: Build
on:
pull_request:
branches:
- '*'
push:
branches:
- 'master'
jobs:
build:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v1
- name: set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 1.11
- name: Maven Verify
run: mvn -B clean verify
- name: Test Coverage
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
ืืื ืืืกืืช ืืืืงืืช, ืื ื ืืฉืชืืฉ ื-codecov ืืฉืืืื ืขื ืชืืกืฃ jacoco. ื-codecov ืืฉ ืคืขืืื ืืฉืื, ืืื ืืื ืฆืจืื ืืกืืืื ืืื ืืขืืื ืขื ืืงืฉืช ืืืฉืืื ืฉืื ื:
${{ secrets.CODECOV_TOKEN }}
โ ืื ืื ื ื ืจืื ืืช ืืื ืืื ืืื ืืืชืจ ืืคืขื ืืืช, ืกืืืืช ืื ืื ืื ืื ืืืืกืื ืกืืืืช ื-GitHub, ื ืืื ืืืชืื ืฉื ืกืืกืืืืช/ืืกืืืื ืื/ืืืจืืื/ืืชืืืืช ืืชืจืื ืื ืชืื ืื ื ืืกืคืื ืฉืื ืฆืจืืืื ืืืืืื ืืืกืืก ืืงืื ืฉื ืืืืืจ.
ืืชื ืืืื ืืืืกืืฃ ืืฉืชื ื ืืกืืืืช ืืืืืจืืช ืืืืืจ ื- GitHub:
ืืชื ืืืื ืืงืื ืืกืืืื ื
ืืืกืฃ ืืช ืืคืืืืื 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 ืืืื ืื ืืืช ืืืงืฉืืช ืืืฉืืื ืฉืื ื ืืืืกืืฃ ืืจืฃ ืฉืื ืื ืืืกืื:
ืืืื ื ืืกืืฃ ืื ืชื ืกืืื
ืืจืื ืคืจืืืงืื ืืงืื ืืคืชืื ืฉืื ืื ื ืืฉืชืืฉ ืืขื ื ืกืื ืืจ ืื ืืชืื ืงืื ืกืืื, ืื ืงื ืืืชืืืจ ื-travis-ci. ืื ืื ืฆืขื ืืืืื ื ืืืขืืจ ื-GitHub Actions ืืขืฉืืช ืืช ืืืชื ืืืืจ. ืฉืืง ืืืงืฉื ืืื ืืืจ ืืื ืื, ืืื ืืคืขื ืืื ืงืฆืช ืืืื ืืืชื, ืื ืืชืื ืืจืื ืืฆืืชื ืืช ืืืงืฉื ืฉืืืืชื ืฆืจืื ืืืืกืคืชื ืืืชื ืืชืืืื ืืขืืืื. ืืื ืืชืืจืจ ืฉืกืื ืืจ ืืื ื ืชืืื ืืขืืืื ืืืืฆืขืืช ืคืขืืื ืื ืืชืื ืคืจืืืงืืื ื-maven ืื gradle. ืืืืื ืฉืื ืืชืื ืืชืืขืื, ืืื ืื ืงืืจื ืืช ืื?!
ืื ืื ืืคืฉืจื ืืจื ืคืขืืื, ืื ื ืขืฉื ืืช ืื ืืจื ืืชืืกืฃ mvn:
name: SonarCloud
on:
push:
branches:
- master
pull_request:
types: [opened, synchronize, reopened]
jobs:
sonarcloud:
runs-on: ubuntu-16.04
steps:
- uses: actions/checkout@v1
- name: Set up JDK
uses: actions/setup-java@v1
with:
java-version: 1.11
- name: Analyze with SonarCloud
# set environment variables:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
# run sonar maven plugin:
run: mvn -B verify sonar:sonar -Dsonar.projectKey=antkorwin_github-actions -Dsonar.organization=antkorwin-github -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN -Dsonar.coverage.jacoco.xmlReportPaths=./target/site/jacoco/jacoco.xml
SONAR_TOKEN - ื ืืชื ืืืฉืื ื
Dsonar.projectKey - ืฉื ืืคืจืืืงื ืืกืื ืืจ, ืืชื ืืืื ืืจืืืช ืืืชื ืืืืืจืืช ืืคืจืืืงื.
ืืกืื ืจ.ืืจืืื - ืฉื ืืืจืืื ื-GitHub.
ืื ื ืืืืฉืื ืืงืฉืช ืืฉืืื ืืืืืื ืฉ-sonarcloud[bot] ืืืืข ืืชืืืืืช:
ื ืืืื ืฉืืจืืจ
ื-build ืืืืืจ, ืืืืืงืืช ืืืคืขืื, ืืื ืื ื ืืืืืื ืืืืฆืื ืืืืืจื. ืืืื ื ืกืชืื ืืืฆื ืคืขืืืืช GitHub ืืืืืืช ืืืงื ืืืจืื ืขื ื ืืืื ืืืคืฆืืช.
ืืขืืืื, ืืฉ ืื ืคืจืืืงืืื ืฉืืกืืก ืืงืื ืฉืืื ืืื ื-bitbucket (ืืื ืืื ืืกืืคืืจ ืืืื "ืื ื ืืืชื ื-bitbucket ืืืืื ืืืื, ืืชืืืื ื-GitHub ืืืืื"). ืืืจืื ืืฆืขืจ, ื-bitbucket ืืื ืืื ื ืืืื ืืืืืจืืช ืืืื ืื. ืื ืืขืื, ืื ืขืืืจ ืื ืืืืืจื ืืชื ืฆืจืื ืืืฆืืจ ืืื ืืช ืขืืื ืืืคืืฉ ืืืืจืืง ืืฉื ืืช ืื ืืคืืฆ'ืจืื ืืืืืืื ืืืืืืจื, ืืืคืฉ ืืืจืืื ืืช ืืืื, ืืฉืืืืช ืื'ืืจื, ืืชืืืืืื ืืืืืจ. ืืฉ ืืจืื ืกืืืืืื ืืืขืืช, ืืคืฉืจ ืืฉืืื ืืฉืื ืื ืืืืื ืืฉืื ืฉืืืจ ืฉืืืจืจ ืืคืขื ืืงืืืืช, ืืคืขืืื ืคืฉืื ืื ืืจืืจ ืืื ืืกืืื ืืงืฉืช pull - ืืื ืื ืคืืฆ'ืจ ืื ืชืืงืื ืืื, ืื ืืืืงืืช ืขืจืืื, ืื ืืฉืื ืชืฉืชืืชื .
ืืืฆื ืคืขืืืืช GitHub ืืืืืืช ืืขืืืจ ืื ื? ืืฉื ื ืคืขืืื ืืฆืืื ืช - ืื ืกื ืฉืืจืืจ, ืื ืืืคืฉืจ ืื ืืืืืืจ ืชืื ืืช ืงืืืฅ ืฉื ืืขืจืืช ืฉืืจืืจ ืืื ืืืืืืจ ืงืืืืจืืืช ืฉื ืืงืฉืืช ืืฉืืื ืืืงืืฅ ืืืชื ืืืืืืืืช ืืงืืืฅ ืืขืจืืช ืืฉืืจืืจ:
ืชืื ืืช ืืืืืื ืืืืืจืช ืืื (.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'
ืืขืช ืืฉ ืืกืื ืื ืืงืฉืช ืืฉืืื ืืืืช ืืืชืืื: type:fix, type:features, type:documentation, type:tests, type:config.
ืืขืจื ืืืืืืืืช ืฉื ืืงืฉืืช ืืฉืืื
ืืืืืื ืฉื ืืขื ื ืื ืืฉื ืืื ืขืืืื ืืคืงืืืืืช ืขื ืืงืฉืืช ืืฉืืื, ืืืื ืืืืจ ืขื ืคืขืืื ืืื ืืื ืชืืื, ืืื ืฉืื ืชืืืืช ื-PR ืขื ืกืื ืืืื ืงืืฆืื ืฉืื ื. ืืืืืื, ืื ื ืืืืืื ืืกืื ื-[build] ืื ืืงืฉืช ืืฉืืื ืืืืืื ืฉืื ืืืื ืืกืคืจืืื .github/workflow
.
ืืืืืจ ืื ืื ืคืฉืื:
name: "Auto-assign themes to PR"
on:
- pull_request
jobs:
triage:
runs-on: ubuntu-18.04
steps:
- uses: actions/labeler@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
ืื ืื ื ืฆืจืืืื ืื ืงืืืฅ ืืืชืืจ ืืช ืืืชืืชืืืช ืืื ืกืคืจืืืช ืืคืจืืืงื ืื ืืฉืื ืืงืฉืช ืืืฉืืื:
theme:build:
- ".github/**"
- "pom.xml"
- ".travis.yml"
- ".gitignore"
- "Dockerfile"
theme:code:
- "src/main/*"
theme:tests:
- "src/test/*"
theme:documentation:
- "docs/**"
theme:TRASH:
- ".idea/**"
- "target/**"
ืื ืืฆืืืชื ืืฉืืื ืืช ืืคืขืืื ืฉืืืงืืช ืืืืืืืืช ืชืืืืืช ืืืงืฉืืช ืืฉืืื ืืคืขืืื ืฉืืืืงืช ืงืืืื ืฉื ืชืืืืืช ื ืืจืฉืืช; match-label ืื ืจืืฆื ืืจืืืช ืืช ืืชืืืืืช ืฉื ืืกืคื ืขื ืืื ืืืื. ื ืจืื ืฉืงื ืืืชืจ ืืืชืื ืคืขืืื ืืฉืื ืืืฉืืืช ืืช ืฉื ื ืืฉืืืื. ืืื ืืคืืื ืืฆืืจื ืื ืื ืื ื ืื ืืฉืืืืฉ; ืืชื ืฆืจืื ืืืืืจ ืชืืืืช ืืืจืฉืืื ืืขืช ืืฆืืจืช ืืงืฉืช ืืฉืืื.
ืืืืข ืืืื ืืคืจืืก
ื ืืกืืชื ืืกืคืจ ืืคืฉืจืืืืช ืคืจืืกื ืืจื GitHub Actions (ืืจื ssh, ืืจื scp ืืฉืืืืฉ ื-docer-hub), ืืื ื ืืืื ืืืืจ ืฉืืื ืื ืจืื, ืชืืฆื ืืจื ืืืขืืืช ืืช ืืืื ืืจื ืืฉืจืช, ืื ืืฉื ื ืืื ืืฆืื ืืจ ืฉืื ืขืงืื ืืื.
ืืืืชื ืืช ืืืคืฉืจืืช ืืฉืืืจ ืืช ืื ืืชืฉืชืืช ืืืงืื ืืื, ืื ืืืื ื ืกืชืื ืืืฆื ืืคืจืืก ื-GitHub Packages (ืืื ืืืืจ ืืชืืื ืืื ืืจื, npm, jar, docker).
ืกืงืจืืคื ืืื ืืืช ืชืืื ืช docker ืืคืจืกืื ืฉืื ืืืืืืืช GitHub:
name: Deploy docker image
on:
push:
branches:
- 'master'
jobs:
build_docker_image:
runs-on: ubuntu-18.04
steps:
# Build JAR:
- uses: actions/checkout@v1
- name: set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 1.11
- name: Maven Package
run: mvn -B clean compile package -DskipTests
# Set global environment variables:
- name: set global env
id: global_env
run: |
echo "::set-output name=IMAGE_NAME::${GITHUB_REPOSITORY#*/}"
echo "::set-output name=DOCKERHUB_IMAGE_NAME::docker.pkg.github.com/${GITHUB_REPOSITORY}/${GITHUB_REPOSITORY#*/}"
# Build Docker image:
- name: Build and tag image
run: |
docker build -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:latest" -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:${GITHUB_SHA::8}" .
- name: Docker login
run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}
# Publish image to github package repository:
- name: Publish image
env:
IMAGE_NAME: $GITHUB_REPOSITORY
run: docker push "docker.pkg.github.com/$GITHUB_REPOSITORY/${{ steps.global_env.outputs.IMAGE_NAME }}"
ืจืืฉืืช, ืขืืื ื ืืื ืืช ืืช ืงืืืฅ ื-JAR ืฉื ืืืคืืืงืฆืื ืฉืื ื, ืืืืืจ ืืื ืื ื ืืืฉืืื ืืช ืื ืชืื ื-GitHub docker registry ืืืช ืฉื ืืชืืื ื ืฉืื ื. ืืฉ ืืื ืืื ืืจืืงืื ืฉืขืืืื ืื ื ืชืงืื ื ืืื:
- ืื ืืื ืืื: echo "::set-output name=NAME::VALUE" ืืืคืฉืจืช ืื ืืืืืืจ ืืช ืืขืจื ืฉื ืืฉืชื ื ืืฉืื ืื ืืืื, ืื ืฉื ืืชื ืืืื ืืงืจืื ืืืชื ืืื ืฉืืจ ืืฉืืืื.
- ืืชื ืืืื ืืงืื ืืช ืืขืจื ืฉื ืืืฉืชื ื ืฉืืืืืจ ืืฉืื ืืงืืื ืืจื ืืืืื ืฉื ืฉืื ืื: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
- ืืืฉืชื ื ืืกืื ืืจืื GITHUB_REPOSITORY ืืืืกื ืืช ืฉื ืืืืืจ ืืืืขืืื ืฉืื ("ืืขืืื/ืฉื ืจืืคื"). ืขื ืื ืช ืืืชืื ืืื ืืืฉืืจื ืืื ืืืื ืฉื ืืืืืจ, ื ืฉืชืืฉ ืืชืืืืจ bash: ${GITHUB_REPOSITORY#*/}
ืืฉืื ืืื ืขืืื ื ืืื ืืช ืืช ืชืืื ืช ืืืืงืจ:
docker build -t "docker.pkg.github.com/antkorwin/github-actions/github-actions:latest"
ืืืื ืก ืืจืืฉืื:
docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}
ืืคืจืกื ืืช ืืชืืื ื ืืืืืจ ืืืืืืืช ืฉื GitHub:
docker push "docker.pkg.github.com/antkorwin/github-actions/github-actions"
ืขื ืื ืช ืืฆืืื ืืช ืืจืกืช ืืชืืื ื, ืื ื ืืฉืชืืฉืื ืืกืคืจืืช ืืจืืฉืื ืืช ืื-SHA hash ืฉื ื-commit - GITHUB_SHA ืืฉ ืืื ืื ื ืืืื ืกืื, ืื ืชืืฆืข ืื ืืื ืืื ืื ืจืง ืืขืช ืืืืื ืืชืื ืืืกืืจ, ืืื ืื ืขื ืคื ืืฆืืจืช ืืงืฉืช ืืืฉืืื ืืืจืืข, ืื ืืืชืื ืฉ-SHA ืื ืืชืืื ื-hash ืฉืื ื ืจืืืื ืืืืกืืืจืืืช git, ืืืืืื ืฉืคืขืืืช ื-actions/checkout ืืืืฆืจืช hash ืืืืืื ืืฉืื ืืื ืืื ืืข ืคืขืืืืช ืืืื ืกืชืื ื-PR.
ืื ืืื ืืกืชืืจ ืืฉืืจื, ืืื ืคืชืืืช ืืืืจ ืืืืืืืช (https://github.com/antkorwin/github-actions/packages) ืืืืืจ, ืชืจืื ืชืืื ืช docker ืืืฉื:
ืฉื ืชืืื ืื ืืจืืืช ืจืฉืืื ืฉื ืืจืกืืืช ืฉื ืชืืื ืช ื-docker.
ืื ืื ืฉื ืืชืจ ืืื ืืืืืืจ ืืช ืืฉืจืช ืฉืื ื ืืขืืื ืขื ืืจืืฉืื ืืื ืืืืคืขืื ืืืืฉ ืืช ืืฉืืจืืช. ืื ื ืื ืจืื ืืืืจ ืขื ืืื ืืขืฉืืช ืืช ืื ืืจื systemd ืืคืขื ืืืจืช.
ื ืืืืจ
ืืืื ื ืกืชืื ืขื ืืคืฉืจืืช ืคืฉืืื ืืืฆื ืืืฆืข ืืืืงืช ืชืงืื ืืช ืขืืืจ ืืืคืืืงืฆืื ืฉืื ื ืืืืฆืขืืช GitHub Actions. ืืืคืืืงืฆืืืช ืืืชืืื ืฉืื ื ืืฉ ืืคืขืื, ืื ืื ืื ื ืืคืืื ืื ืฆืจืืืื ืืืชืื API ืืื ืืืืืง ืืช ืืกืืืืก ืฉืื; ืืืจ ืขืฉืื ื ืืื ืืฉืืื ืืขืฆืื ืื. ืืชื ืจืง ืฆืจืื ืืืฉืื ืืช ืืืืจื: SERVER-URL:PORT/actuator/health
$ curl -v 127.0.0.1:8080/actuator/health
> GET /actuator/health HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.61.1
> Accept: */*
< HTTP/1.1 200
< Content-Type: application/vnd.spring-boot.actuator.v3+json
< Transfer-Encoding: chunked
< Date: Thu, 04 Jun 2020 12:33:37 GMT
{"status":"UP"}
ืื ืื ืฉืื ืื ื ืฆืจืืืื ืื ืืืชืื ืืฉืืื ืืืืืง ืืช ืืฉืจืช ืืืืฆืขืืช cron, ืืื ืคืชืืื ืืื ืื ืขืื ื ืื ื, ืื ื ืฉืื ืืืืขื ืืืืฆืขืืช ืืืจืง.
ืจืืฉืืช, ืืืื ื ืืื ืืืฆื ืืืคืขืื ืืจืืืช ืขืืืื ืฉื cron:
on:
schedule:
- cron: '*/5 * * * *'
ืื ืคืฉืื, ืื ื ืืคืืื ืื ืืืืื ืฉื-Github ืืชื ืืืื ืืืฆืืจ ืืืจืืขืื ืฉืื ืืชืืืืื ืืืื ื-webhooks. ืคืจืืื ืืชืืขืื:
ืืืื ื ืืืืง ืืช ืืฆื ืืฉืจืช ืืืืคื ืืื ื ืืืืฆืขืืช 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; ืชืืื ืืงืจืื ืขื ืืื ืืืฉืื ืืกืืืื ืืื ืืืืื ืฆ'ืื ืืชืืขืื:
ืื ืชืฉืื ืืืชืื ืืกืืืืช ื-Github: URL ืืฉืจืช ืืืกืืืื ืื ืืืื ืืืืืจื.
ืจืฆืืขืช ืืื ืืก - JIRA ืืขืฆืื ืื
ืืืืืชื ืฉื ืืืืจ ื-JIRA, ืืืืจื ื. ืืืืช ืคืขืืื ืจืืืชื ืืฆื ืืกืื ื-ืืคืื ืืืฉืจ ืืคืชืืื ืขืฉื ืคืืฆ'ืจ, ืืืืื ืกื ืืฃ, ืืื ืฉืืืชื ืืืจืืจ ืืช ืื ืืฉื ื-JIRA. ืืืืื, ืื ืื ืื ืืื ื ืขืฉื ืืืงืื ืืื, ืื ืืื ืงื ืืืชืจ, ืืื ืืืขืฉื ืื ืื ื ืืืชืืื ืงืื ื-IDE, ืืืืืื ืกื ืืคืื ืืชืื bitbucket ืื GitHub, ืืื ืืืจืจืื ืืช ืืืฉืืืืช ืืชืื Jira, ืืฉืืื ืื ืื ืื ื ืฆืจืืืื ืืคืชืื ืืืื ืืช ืืืฉืื , ืืคืขืืื ืืืืื ืก ืฉืื ืืื'. ืืืฉืจ ืืชื ืืืืจ ืืืื ืื ืืชื ืฆืจืื ืืขืฉืืช ืืืื, ืื ืืื ืืขื ืืคืชืื ืืช ืืืื ืฉืื. ืืชืืฆืื ืืื, ืืืืงืจ ืืกืื ืืืค ืืชื ืฆืจืื ืืืงืืืฉ ืืื ืืขืืืื ืืื ืืืฉืืืืช.
GitHub ืื ืืขืืืจ ืื ื ืืืฉืืื ืืฉืืจืชืืช ืืื; ืืชืืจ ืืชืืื, ืื ื ืืืืืื ืืืจืืจ ืืขืืืช ืืืืืืืืช ืืขืืืืช code_review ืืืฉืจ ืื ื ืฉืืืืื ืืงืฉืช ืืฉืืื. ืื ืื ืฉืืชื ืฆืจืื ืืขืฉืืช ืืื ืืขืงืื ืืืจ ืืืกืืืืช ืฉืืืช ืืกื ืืคืื:
[ะธะผั ะฟัะพะตะบัะฐ]-[ะฝะพะผะตั ัะฐัะบะฐ]-ะฝะฐะทะฒะฐะฝะธะต
ืืืืืื, ืื ืืคืชื ืืคืจืืืงื "GitHub Actions" ืืื GA, ืื GA-8-jira-bot
ืืืื ืืืืืช ืขื ืฃ ืืืืฉืื ืืฉืืืช GA-8.
ืืืื ืืืจืฆืื ืขื JIRA ืขืืืืช ืืจื ืคืขืืืืช ืืืืืกืืื, ืื ืื ืืืฉืืืืช, ืื ื ืืืื ืืืืจ ืฉืืืงื ืื ืขืืื ืื ืืืื. ืืื ื ืืื ืจืง ืืืื ืฉืืืืื ืขืืืืื ืื ืืฆืืื ืืฉืืืืฉ ืคืขืื.
ืจืืฉืืช ืขืืื ืืืืื ืก ื-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, ืืื ืืขืฉืืช ืืืช ืืชืืืจ ืืื:
ืื ื ืืืืฆืื ืืช ืืืื ืืืฉืืื ืืฉื ืืกื ืืฃ:
- 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 ืืืืฆืขืืช ืฉื ืืกื ืืฃ, ืื ืืคืขืืื ืืื ืืืืืกืืื ืื ืจืฆืชื ืืขืืื ืขื ืืคืจืืืงื ืฉืื ืืฉืื ืืืคื , ืืื ืืืืื ืื ืื ืืกืืจ ืฉื - ืืืชืจ ืืื ืืืฉืจ ืืขืฉืืช ืืช ืืืชื ืืืืจ ืขื ืืืืืื.
ืื ืื ืฉื ืืชืจ ืืื ืืืขืืืจ ืืช ืืืฉืืื ืืขืืืื "ืกืงืืจืช ืงืื" ืืขืช ืืฆืืจืช ืืงืฉืช ืืฉืืื:
- name: Transition issue
if: ${{ success() }}
uses: atlassian/gajira-transition@master
with:
issue: ${{ steps.find_issue.outputs.ISSUE_ID }}
transition: "Code review"
ืืฉื ื ืคืขืืื ืืืืืืช ืืื ื-GitHub, ืื ืื ืฉืืื ืฆืจืื ืื ืืช ืืืื ืืืขืื ืฉืืืฉื ืืฉืื ืืงืืื ืืืืจืฉืื ื-JIRA ืฉืขืฉืื ื ืืืขืื.
ืืืืชื ืืืคื, ืืชื ืืืื ืืืจืืจ ืืฉืืืืช ืืขืช ืืืืื ืืชืื ืืืืกืืจ, ืืืืจืืขืื ืืืจืื ืืืจืืืช ืืขืืืื ืฉื GitHub. ืืืืคื ืืืื, ืืื ืชืืื ืืืืืื ืืืจืฆืื ืฉืืื ืืืคืื ืชืืืืืื ืฉืืจืชืืื ืืืืืืืืืื.
ืืืฆืืื
ืื ืชืกืชืื ืขื ืืืืืจืืช DEVOPS ืืงืืืกื, ืืืกืื ื ืืช ืื ืืฉืืืื, ืคืจื ืืืื ืืชืคืขืื, ืื ื ืืืฉื ืฉืื ืชื ืกื, ืชืืื ืืืฆืื ืคืขืืื ืืืฉืื ืืฉืืง ืืืื ืืืจืฆืื ืขื ืืขืจืืช ื-Help-Desk, ืื ื ื ืื ืฉืืฆืื ืืจ ืืชืืคื ืืืืืช ืืกืืื ืื ืืชื ืืืกืืง ืืกืงื ืืช ืขื ืกืื ืืฉืืืืฉ ืื.
ืืชืจืื ืืช:
- ืฉืืง ืขื ืคืขืืืืช ืืืื ืืช ืืื ืืืจืืข, ืื ืืืื ืืื ืื. ืืจืืื ืชืืืื ืื ืืืกืชืื ืืงืื ืืืงืืจ ืืื ืืืืื ืืืฆื ืืคืชืืจ ืืขืื ืืืื ืื ืืคืจืกื ืืงืฉืช ืชืืื ื ืืืืืจ ืืฉืืจืืช ืืืืืจ GitHub.
- ืืืืจืช ืคืืืคืืจืืช ืืืขื ืืืจืืื: ืืื ืืงืก, mac os, windows ืืื ืชืืื ื ืืขื ืืื ืช ืืืื.
- ืืืืืืช Github ืื ืืืจ ื ืืืจ, ื ืื ืืฉืืืจ ืืช ืื ืืชืฉืชืืช ืืืงืื ืืื, ืื ืฆืจืื ืืืืืฉ ืืจื ืืืื ืืช ืฉืื ืื, ืืื ื ืืฆื ืืจืืืืก ืฉื ืืืืฆืช ืขืืืจ ืืืช ืื ืฉืชืืื ืืืฉืืื ืืฆืืจื ืืืฉืืืช ืขื GitHub Actions. ืชืืืื ืืจืืฉืื Docker ืืืจืกื ืืืื ืืืช ืืื ืื ืืชืจืื ืืื.
- GitHub ืืกืชืืจ ืกืืืืช ืืืืื ื ืื ืืื, ืื ืฉืืฉืืืืฉ ืื ืืืืกืื ืกืืกืืืืช ืืืกืืืื ืื ืืื ื ืื ืื ืืคืืื. ืืืืื ืื ืื ืืกืืืื ืฉืื, ืืขืืื ืื ืืฆืืืชื ืืจืืืช ืืช ืืกืื ืืฆืืจืชื ืืืืืจื ืืงืื ืกืืื.
- ืืื ื ืขืืืจ ืคืจืืืงืืื ืืงืื ืคืชืื
ืืกืจืื ืืช:
- YML, ืืืื, ืื ื ืื ืืืื ืืืชื. ืืฉืขืืืืื ืขื ืืจืืื ืืื, ืืืืขืช ื-commit ืื ืคืืฆื ืืืืชืจ ืฉืืฉ ืื ืืื "ืชืงื yml ืคืืจืื", ืืื ืืชื ืฉืืื ืืฉืื ืืื ืืืคืฉืื, ืื ืฉืืชื ืืืชื ืืืชื ืืฉืืจื ืืื ื ืืื ื. ืืืื, ืืฉืืื ืืื ืืกื ืขื ืื ืืืืืช ืืกืจืื ืื ืื ืืืืืื ืืื ื ืขืืื.
- DEBUG, ืืืชืืจ ืืืืื ืฉื ืืืจืืื ืขื commits, ืืคืขืืช ืื ืืื ืืืืฉ ืืคืื ืืงืื ืกืืื ืื ืื ืชืืื ื ืื, ืืื ืื ืืืชืจ ืืงืืืืจืืืช "ืืืืืชื"; ืืชื ืจืืื ืืขืืื ืขื IDEA ื ืื, ืืืฉืจ ืืชื ืืืื ืื ืคืืช ืื ืืืจ .
- ืืชื ืืืื ืืืชืื ืืช ืืคืขืืื ืฉืื ืขื ืื ืืืจ ืื ืืชื ืขืืืฃ ืืืชื ื-Docker, ืืื ืจืง javascript ื ืชืื ืืืืคื ืืงืืจื, ืืืืื ืฉืื ืขื ืืื ืฉื ืืขื, ืืื ืื ื ืืขืืืฃ ืืฉืื ืืืจ ืืืงืื js.
ืืจืฉื ืื ืืืืืืจ ืืื ืฉืืืืืจ ืขื ืื ืืกืงืจืืคืืื ื ืืฆื ืืื:
ืืฉืืืข ืืื ืื ื ืืืคืืข ืขื
ืืืืืฉ ืชืืื ื ืืื ืก Heisenbug 2020 Piter. ืื ื ืืืื ืื ืื ืจืง ืืื ืืืืื ืข ืืืขืืืืช ืืขืช ืืื ืช ื ืชืื ื ืืืืงื, ืืื ืื ืืฉืชืฃ ืืช ืกืืืืช ืืขืืืื ืฉืื ืขื ืขืจืืืช ื ืชืื ืื ืืืืฉืืื Java!
ืืงืืจ: www.habr.com