ααΆααΏαααααα»αααααΌαααΆααααααααααααααΆααααααααααΆαααααα
αααααααΆα αααααααααΆααΆαααααααΎαα
αα αααααααααΆαα·ααααααα ααααΈαααα αααα»αααΆααααααα
α
α·αααααααΆααΆαααααΆααααααΌαααααΆαααααααααα»ααα½αα
ααα½αααΈ Travis-CI αα·α TeamCity αα
GitHub Actions α αΎααααααΊααΆα’αααΈαααα
ααααΈααΆα
ααΎααΎαααΉαααααΎα’αααΈαααααααααααααααα·?
ααααΌαααΎαααααΌαααΆααααααααααααΎαααΉαααααΎααααααααααααα· α αΌαααΎααααααΎααααααα·ααΈααΌα αα½ααα αααα»α Spring boot / Java 11 / Maven α αααααΆαααααααααααα’αααααααα ααΎαααΉααα·αα αΆααα’αΆααααααααΎαααααα·ααααΆαααααα·ααΈααΆααααααα α αααααΆαα ααΆαααααααααα»ααα·ααααααα·ααΈααΆαααΆααααααΆαααααααΆααααΎα ααΌα ααααα§ααααααααααΆ REST API ααΆααααααΉααααααααααΆαααααααΆααααΎαα
α’αααα’αΆα
ααΎαααααααα
ααΈαααα
JIRA αα·αααΆαααααΎαααααΆα
ααΆααΆαααααααα·ααΆαααΆααΆααααααΆααΎαααααΎ JIRA ααΆαααααα·ααΈααΆαααΆααααα αΆ ααΌα ααααααΌααααααΎααααααααΆα ααααα‘αααααααΆααααααααααα α αΎααααααααααα αΆααααΌααα ααΈαααα
ααααα·α αααααΎαααΉααααααααα α’αααΈααααα½αα±ααα αΆααα’αΆααααααααα JIRA αα·α GitHub α’αΆα αααααααΌααα½ααααα αΌαααααΆα
ααΎαααααΎααααααααααααα·ααααααΆααα½αααααα»αααααΆαααααααα
ααααααααΆαααααααααααΎαααααΌαααΆαααΆααααααΆαααα maven ααΌα ααααααΆαααΆααααααΆααΊααΆααααααΆαα α’αααΈαααααΎαααααΌαααΆαααΊαααα αα mvn clean α
ααΎααααΈααααΎααΌα αααααααααααΎ 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 β αααα αΆαααΆααα αΌαααΆαααΆααααααααΌαααα αΆααααααΎαααΆααααααααααΆααααα»αααααΌαααΆαααααΎα‘αΎαα αααααα αα·αααααΎαααΆαααααΌαααΆααααααΎαα‘αΎαα
ααΆαβαααααβαααβααΊβααΆβααΆαβαα·αααααΆβα’αααΈβααΆααα·α αα (ααΆαααΆα) αα·αβααα αΆαβα’αα»αααα (ααα αΆα) αααααΆαααα·α αα ααΆαααΈαα½ααα
ααααΎαααΆα - αα ααΈαααααΎαα’αΆα ααααΎαααΎα OS ααααα αα½αα±ααααααΆααααα’αΎα α’ααααααααΆααα’αΆα ααααΎαααΎα Mac OS ααα»αααααα ααΎααααΆααα―αααααΆααΆααααααααααααΆαα (ααΎαααααΉαααΈαα»α )α
ααΆαααααΎααααΆαα α’αα»ααααΆαα±ααα’αααααααΎα‘αΎααα·αααΌααααααααΆααααααααα α§ααΆα ααα αααααααΎ actions/setup-java action ααΎαααα‘αΎαααα·ααααΆααααααΆαα Java 11α
αααααΆααααα½αααΈ ααΆαα½α ααΎαβα’αΆα βαααααΆααβαααΆαααΆααααααβαααβααΎαβα αΆααβααααΎαβαααααααΆα ααααΆααβααΆααβαααβααΊβααΆβα’αΆαα»αααααβαααβααΉαβααααΌαβαααααΌαβαα βαααααααΆαα
α’αααΈααααα
ααααααααΊααααΌαααααΎαααΆαααααααααΆααααααΆαα½α Mavenα run: mvn -B clean package
ααα -B αα·ααΆαααΆααΎαααααΌαααΆααααααα·αα’ααααααααααΌα
αααα maven ααααΆαααα·αα
αααα½αααΎαα’αααΈαα½α
α’ααα αΆααα! α₯α‘αΌαααα ααΆααααααααα’αααααΆααα α·αααααΆαα½ααα ααΆααααΆαααααααααΉαα αΆααααααΎαα
ααααΎαααΆαααΆαααααααααααααααααα·
ααΆααα½αααααα»αααααΆααΊααα’ ααα»ααααααΆααα·α αααααααα½αα’αΆα αααααΌααααα»αααααα»ααααα·ααΆα ααα»αααααα·αααααΎαααΆαααα ααΌα αααα ααα αΆααααααΆααααΊααααΎα±ααααααΎαααΆαααΆααααααααααααααααααααα·α ααΎαααΈααα ααΆααΆααααα½αααΆαααααα»αααΆαααΎαααααααααααΆαααααΎααααα αα αααα’αααααααΎααΆααααα½ααα·αα·ααα PR - α’αααααΉαα αααΆααααΆααΆαααααΎαααααααΆαααααααα»ααα α αΎαααααΆαααααΆααααΆααααααα ααααΎαααΆαααΆααΆαααααα½ααααα»ααααααααΎααΆααααα αΌαααααΆαααααα
ααΎαβααΉαβααααΎαααΆαβααΆαβααΆαααααβαα αααβαααααΎαβααααΎβααΆα αα·αβαααα αΌαβαα αααα»αβαα α αΎαβαα αααβααΆαα½αααααΆβαααβααΎαβααΉαβααααααβααΆααααααΎαβαααΆαααΆαααβααααΈααΈβααΆαααααααααααβααΌαα
name: Build
on:
pull_request:
branches:
- '*'
push:
branches:
- 'master'
jobs:
build:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v1
- name: set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 1.11
- name: Maven Verify
run: mvn -B clean verify
- name: Test Coverage
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
ααΎααααΈααααααααααααΆαααααΎααααα αααα»αααααΎ codecov αααααααΆααααΆαα½ααααααα·ααΈαααα½α jacoco α codecov ααΆααααααααΆαααααΆααααααααΆ ααα»ααααααΆααααΌαααΆααααααΆαααααΆααααΎααααΈααααΎααΆαααΆαα½αααααΎααΆαααααααΎαα
${{ secrets.CODECOV_TOKEN }}
β ααΎαααΉαααΎαααΆαααΆαααααααα
αααΎαααΆααααα α’αΆααααααΆααααΊααΆααααααΆααααααΆαααααααΆαα»αα’αΆααααααΆαααα
αααα»α GitHub ααΎαα’αΆα
ααααααα
ααΈααα ααΆααααααααΆαα/tokens/hosts/urls αα·ααα·ααααααααααααααααααα·ααα½ααααα
αΌααααα»αααΌαααααΆαααΌαααααΆααα
α’αααα’αΆα ααααααα’ααααα α’αΆααααααΆαααα αααα»αααΆααααααααααΆαααα ααΎ 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 bot ααΉααααα αΌαααααΎααΆαααααααΎαααΈαα½αα α αΎαααααααααααΆα ααααΆαααααΆααααααΌαααΆαααααααααααα
αααααααααα§ααααααα·ααΆααα·αα·αααα
αα αααα»ααααααααααααααΎαα αα αααΆαα αααΎααααααααα»α αααα»αααααΎ sonar cloud αααααΆααααΆααα·ααΆαααΌααα·αα·αααα ααΆααΆααααα½αααΆαααααα»αααΆααααααΆαααα travis-ci α ααΌα ααααβααΆβααΆβααα αΆαβα‘αΌααΈααβαααβααααΎβα αααΆαβαααα»αβαα GitHub Actions ααΎααααΈβααααΎβααΌα βααααΆα ααΈααααΆααααααααΆαααΊααΆααΏααααααααΆαααα½α ααα»ααααααΎααααααΆααααΎα±αααααα»αααα α·αααααααα·α ααααααααα»αααΆαααααΎααααααααΆαααααααα»αααααΌαααΆα α αΎαααααααααΆαα αααα»αααααΎαααΆαααΆαααΆαα ααα»ααααααΆααΆαααααααααΆαααΆ sonar αα·αααΆααααααΆαααααΎααΆαααΆαααααααααααΆααααααΆααααΆααα·ααΆαααααααααΎ 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 - ααααααααααααααα αααα»α sonar α’αααα’αΆα ααΎαααΆαα αααα»αααΆααααααααααααα
Dsonar.organization - αααααααααα’αααααΆαααΈ GitHub α
ααΎαααααΎααααΎαααΆα α αΎααααα αΆα sonarcloud [bot] α αΌααααααα»αααα·αααααα
ααΆααααααααααααΆααααααα
ααΆαααααΆαααΆααααΌαααΆαααααααα ααΆαααααααα ααΆαααααΎαααααααααΌαααΆαααααΎαααΆα α αΎαααΎαα’αΆα ααααΎααΆαα ααααααΆαααΆαα αααααΎαααΈααααααα GitHub Actions α’αΆα ααααΎα±ααααΆααααααααααααΆαα ααααααΆαααΆααααααΆααααα½αα
αα ααααααααααΎααΆα αααα»αααΆααααααααααααΆαααΌαααααΆαααΌααα αααα»α bitbucket (α’αααΈααααααααΆαααΊααΌα ααΆαα αααα»αααΏαααα βαααα»αααααααα bitbucket ααααααα ααααααααΆαα GitHub αα ααααααβ)α ααΆα’αα»αα bitbucket αα·αααΆαα§ααααααααααααααααΆαα ααααααΆααααααααΆααααααΆαα½αααα αααααΊααΆαααα αΆαα½α ααΈααααααααααΆααααΆαα ααααααΆαααΈαα½αα α’αααααααΌααααααααΎαααααααα½ααα αααα»αα ααα»α αααααααααααα α αΎαααααααααααα·αααααΆααα’αααααααΆααα½ααααα αΌααα αααα»αααΆαα ααααααΆααα ααΈααα αααααααααΆααα·ααΆαααα α·ααα αα·α αα ααΆααα αααα»α jira αααααααΉααααα αααα»αααααΆααα ααΆαα±ααΆαααΆα αααΎααααα»αααΆαααααΎαα»α α’αααα’αΆα ααααα α’αααΈαα½α α¬αααα αΌαα’αααΈαα½ααααααααΌαααΆαα ααααααΆαααΆαααΈααΎααα»α αααααααααΆαα·αα αααΆααααΆααααΌαα αΆααααααΆααααααΎααΆαα’αααΈααααα - ααΎααΆααΆαααααααα·ααα α¬αα½ααα»αααα α»α α¬ααΆαααααΎαααααααααααα½α α¬ α αααααΆαα ααΆααααααααα
ααΎαααααααΆα 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? αααααΆααααααΆαα·αα αααΆααααΆααααααααΆαααααααΌαααΆααααΆ α αΎααααααααα’αααααΉαααααΌααααααααΆαααΆααααα ααα 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 αααααα’ααααΎα―αααΆααααααααΌαααΆαααααΆααααααΌαα α§ααΆα ααα ααΎαα’αΆα
αααααΆααααΆααΆ [αααααΎα] ααααΎαααΆαααΆαα½ααααααΆαααΆαααααΆααααααΌααα
ααΆαααα .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 Actions (ααΆαααα ssh ααΆαααα scp αα·αααΆαααααΎααααΆαα docker-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β α’αα»ααααΆαα±ααα’αααααααααααααααα’ααααααα»αααα αΆααα αα α»αααααα ααΌα ααααααΆα’αΆα ααααΌαααΆαα’αΆααα αααα»αααα αΆαααααααααααΆααα’ααα
- α’αααα’αΆα ααα½αααΆααααααααα’ααααααααΆαααααααααα»αααα αΆααα»α ααΆααααααΆααααααα’ααααααααΆαααααα αΆααααα ${{step.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
- α’ααα GITHUB_REPOSITORY αααααααΆααααααΆαα»ααααααααααΆαα αα·αααα αΆααααααααΆ (βααα αΆαα/repo-nameβ)α ααΎααααΈααΆααα’αααΈααααααααΆαα ααααΈαααααΆααααα ααΎαααααααααααααααΆαα ααΎαααΉαααααΎααΆααααααααααα 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 αα commit - GITHUB_SHA ααΆααααΆαα ααα»α αα·ααααα ααΈαααααααα ααααα·αααΎα’ααααααααΎαααΆαααααΆαααΆαααααααα·αααααΉααααα ααααααα αΌαααααΆααΆααααα»ααααααα ααα»ααααααααααα ααΆαααΆααααααΎαααααΎαααΆααααααα ααααΉαααα·ααΆααα αααααΆαααα SHA αααα ααααΆαα·αααααΌαααααΆααΉα hash αααααΎαααΎααα αααα»α git history αα ααΈααααααααααααΆα/αααααααΆα checkout αααααΎα hash αααα½ααααααααααΆ ααΎααααΈαααααΆααααααααΆαααΆααααΆαααα αααα»α PR α
ααααα·αααΎα’αααΈαααααΎαααΆαααΆαααα’ αααααΆααααααΎαααααααααα αα (https://github.com/antkorwin/github-actions/packages) αα αααα»αααααΆαα α’αααααΉαααΎαααΌαααΆα docker ααααΈα
αα ααΈααα α’αααααα’αΆα ααΎααααααΈααααααααΌαααΆα docker αααααα
α’αααΈααααα ααααααααΊααΎααααΈααααααα ααΆαααααααααααΆαααΈαααααααααΎαααΎααααΈααααΎααΆαααΆαα½ααααααΈααααααααα αΎαα αΆααααααΎαααααΆααααα‘αΎααα·αα αααα»ααααα ααααΆααΉααα·ααΆαα’αααΈααααααααΎααΆααΆαααα systemd ααααα½ααααα
ααΆααααα½ααα·αα·ααα
ααΌααααα‘ααααΎααααααΎαααααΆαααααα½αα’αααΈααααααααΎααΆααααα½ααα·αα·ααααα»αααΆααααααΆαααααααα·ααΈααααααΎααααααααΎ GitHub Actionsα αααααα·ααΈα
αΆααααααΎαααααααΎαααΆα actuator ααΌα
ααααααΎααα·αα
αΆαααΆα
αααααα 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 α’αααα’αΆα
α’αΆαα’αααΈααααααα½αααΆα bot token αα·α chat id αα
αααα»αα―αααΆαα
αα»αααααα αααααα’αΆααααααΆαααα ααΎ Github: URL αααααΆαα server αα·α tokens αααααΆαα telegram botα
ααααααΆαααααααΆαα - JIRA αααααΆααα’ααααααα·α
αααα»αααΆααααααΆααΆααΎαααΉααααααααα JIRA α αΎαααΎαααΆααααα‘αααααα·αα ααΆααααααααααααα»αααΆαααααααααΎαααααΆαααΆααα½ααα ααΆααααααααα‘αΎα αα ααααααα’αααα’αα·ααααααααΆααααααΎααααααααα·ααααα½α αα½ααααα αΌαααααΆααΌαααΆααΆαα½α ααα»ααααααααα ααΆααααα αΆαα αααα»α JIRA α ααΆααΆααα·αααΆαα ααααα·αααΎα’αααΈαααΆααα’αααααααααΌαααΆαααααΎαα αααααααααα½α ααΆααΉαααΆααααααΆααααα½α ααα»ααααααΆααα·αααΎααααααααΌααα αααα»α IDE αααα αΌαααΆααΆαα αααα»α bitbucket α¬ GitHub α αΎααααααΆααααα’αΌααα·α αα ααΆααα αααα»α Jira αααααΆααααΆαααα ααΎαααααΌαααΎα ββwindows ααααΈα αααααααα αΌαααααααα αα·ααα αα αααα’αααα αα αΆααααΆαααα’α₯αααα ααααΌαα’αααΈαααα’αααααααΌαααααΎαααααΆαα αααααααΆαα ααα»α α’αααΈαααα»αααΆαααΎαααααΆααααααααααα ααΆαααααα αα αααααααΉααα αααααααααα α’αααααααΌαα αααΆααααααααΎαα αα α»ααααααααΆαααααΆαααα·α αα ααΆαα
GitHub ααααΉααα½αααΎααααα»ααα·α αα ααΆααααααΆαααααααααα αααααΆααααΆαα αΆααααααΎα ααΎαα’αΆα ααΆααααα αΆαααααααααααααααα·αα αααα»ααα½ααα code_review αα αααααΎαααΆααααααΎααΆαα α’αααΈαααα’αααααααΌαααααΎααΊααααΎααΆαα’αα»αααααΆααΆαααααααααΆααΆα
[ΠΈΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°]-[Π½ΠΎΠΌΠ΅Ρ ΡΠ°ΡΠΊΠ°]-Π½Π°Π·Π²Π°Π½ΠΈΠ΅
α§ααΆα ααα ααααα·αααΎααΌααααααααα "GitHub Actions" ααΊ GA ααα GA-8-jira-bot
α’αΆα
ααΆααΆααΆαααααΆααα’αα»ααααααΆααα·α
αα
GA-8 α
ααΆααα½ααααα αΌαααΆαα½α JIRA ααααΎαααΆαααΆαααααααααααΆαααΈ Atlassian αα½ααααα·αααα’α₯αααα αααα αααα»αααααΌααααα·ααΆαααΆαα½ααααα½αα ααα½ααα·αααααΎαααΆααααααΆαααααα»αααΆαααααααα ααα»ααααααΎαααΉααα·ααΆααααΆααα’αααααααα·αααΆααααΎαααΆα αα·αααααΌαααΆαααααΎααααΆαααααΆααααααα
ααααΌαα’αααααααΌαα αΌααα JIRA αααααααΎαααααααΆαα atlassian/gajira-login
jobs:
build:
runs-on: ubuntu-latest
name: Jira Workflow
steps:
- name: Login
uses: atlassian/gajira-login@master
env:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
ααΎααααΈααααΎααΌα
αααα α’αααααααΌαααα½αααΆααααααΆαααααΆαααα
αααα»α JIRA ααααααααΎααΆααααΌαααΆααα·αααααΆαα
ααΈαααα
ααΎαααααααααααΆααααΆααα·α αα α ααααΈαααααααΆααΆα
- 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 α ααΆααΌαα ααΆααΆααα’ααααΊα’αΆαααααααΎααΆααααααΎαααααα αα·αααααααααΆααααΆααααα’ααα ααΎααααΈααααΎααααααααααααα·ααααααααΎαααΆαααααααΆα
ααΆαααααΎα
ααααα·αααΎα’ααααααα‘ααααΎαααααΆααααΆα DEVOPS αα»ααΆα ααΎαααΆααααααααααααααααααααΆααααΆαααΆααα’αα ααΎααααααααααα·ααααα·ααΆα αααα»ααα·αααΆααααα·αααΎα’αααααααΆααΆα α’αααα’αΆα ααααααααααααααΆααα½αα ααα½ααα αααα»αααΈααααΆααααααΆααααΆααα½ααααα αΌαααΆαα½ααααααααααααα½α ααΌα ααααααΎαααΉαααααααααΆααααααααα αΌααααααααΆαααααααααΆαα α±ααααΆαα ααααα αα α αΎαααΆαααααα·ααααΆαα’αΆα ααααΌαααΆαααΆααααααα’ααααΎααΆαααααΎααααΆααααααααΆα
αααα»α:
- ααΈααααΆαααΆαα½αααΉααααααααΆααααααααααα½α ααΆααααα αααααΆαααααααα±ααΆα αααααΊαα·αααΆα‘αΌαααΆααα αα αααα»ααα½αααααΆαα αααΎα α’αααααα’αΆα ααΎαααΌααααααααΎααααΈαααααΈαααααααααααΆααααα αΆααααααααααΆ α¬αααααΆαααααΎαααααααα·ααααα ααΆααα’ααααα·αααααααααααΆαααα αααα»αααααΆαα GitHub α
- ααΆαααααΎαααΎααααα·ααΆααααα αααααΆααααΆααα½αααααα»αααααΆα ααΈαα»α , mac os, ααΈαααΌααΊααΆαα»αααΆααα½αα±ααα αΆααα’αΆααααααααΆααα
- αααα αα Github ααΊααΆααΏαααα’ααα αΆααα ααΆααΆααααα½ααααα»αααΆααααααΆα αααααΆαα ααΆααααααααααΆααααΌααα αααααααααα½α α’ααααα·αα αΆαααΆα ααα»αααααΆααααα’α½α ααααααααααΆααααα α’αααΈααααααααΆαααΊαααα·ααα αααα»αααΆαααααΆαα α»α ααααα»ααα½α α¬ααΈα α αΎαααααΌαααΆααα½ααααα αΌααααΆαααα’α₯αααα ααααΆαα½ααααααααΆα GitHub α ααΆαααΆααααααΆαα α»ααααααΈ Docker αα αααα»αααααα₯ααα·αααααααααΆα’αααααααααααααααα’αααααα
- GitHub ααΆααα’αΆααααααΆαααα αααα»ααααααα ααα»αααααΎα ααΌα ααααααΆαααααΎααΆααΎααααΈαααααΆαα»αααΆααααααααΆαα αα·ααααααΆαααααΆααααΊαα·ααα½αα±ααααααΆα αααααα αααα»αα’αα‘α»αααααα·αααααααΆααα’αααααααααα»α αααα»ααα·αα’αΆα ααΎαααΎαα’αΆααααααΆαααα αααα»αααααααααααα·αα»αααααααααΆαα αααα»ααα»αααΌααααααα
- α₯ααα·ααααααααααΆαααααααααααααααΎαα αα
αα»ααα·ααααα·:
- YML α’ααα αΉααααα»ααα·αα αΌαα α·αααααΆααααα αα αααααααΎααΆαααΆαα½αααα αΌααααααα ααΆααααααααΎααΉαααΆαααααα»αααααααα»αααΆαααΊ "αα½ααα»ααααααααααΆα yml" αααααααα’αααααααα ααΆααααααΆαααα ααααααααΆαα½α αα½αααΆαα’ααααααααααΆαα»αα ααΆααΌαα ααΆαα’αααα»ααα αα»αα’ααααααααΆαα½α protractor αα·αα’αααααααααααα αα·ααααααΆαααα·αααααααααΈαααΆααααα»ααααααα
- DEBUG ααΆαααααα α»αααα αΌαααΆαα½αααΉαααΆααααααααΉααα ααΆαααααΎαααΆαααΆαααααΆαααΆα‘αΎααα·α αα·αααΆααααααΌααα ααΆαααα»αααΌααα·ααααααααΆααααα½αααααα ααα»ααααααΆααΆαααααα "α’αααα α½ααααα αΎα" α αααΎαααΆαα α’αααααααΆααααααΎααΆαααΆαα½α IDEA ααααΆααααα½α αα ααααααα’αααα’αΆα ααααΆααααα α»αα’αααΈαα½αα .
- α’αααα’αΆα ααααααααααααΆαααααα’αααααΎα’αααΈααααΆα ααααα·αααΎα’ααααα»αααΆαα αααα»α Docker ααα»ααααααΆααα javascript ααα»ααααααααααααΌαααΆαααΆαααα ααΆααΆααα·ααααααΊααΆαααα αΆααααααΆαα· ααα»αααααααα»αα αΌαα α·αααα’αααΈαααααααααααα½αα±αα js α
αααα»αααΌαααααΉαα’αααααΆ ααααΆαααααααΆαααααααΈαααΆααα’ααααΊαα
ααΈαααα
αααααΆα αααααααααα»αααΉαααααααααΆαα½α
αααΆαααΆααα αα αααα»αααααα·ααΈα Heisenbug 2020 Piter α αααα»αβααΉαβααααΆααβα’αααβαα·αβααααΉαβααβααααβαααααΆαβααα α»αβαααβαααα αβαα·ααααααβαααααβααα»αααααβαα ααα»ααααβααβα αααααααβα’αΆααααααΆααβααβααΆαβααααΎβααΆαβααΆαα½αβαααα»αβαα·ααααααβαααα»αβαααααα·ααΈ Java ααβααα!
ααααα: www.habr.com