á á፠ááľáĽ ááŽáááśá˝á áááááŁáľ áĽá áá á¨á§á᧠ááľáá ááááŁáľ á ááĽá. á ááłááľ áá áááľ ááá áá, á ááłááľ áá áá á áá°áá. á á
áᥠá ááłááľ áá¨ááťááźá ᨠTravis-CI áĽá TeamCity áá° GitHub Actions ááááá ááľáááᣠáĽá á¨áą á¨ááŁá áá
ááá˘
áá áĽáá°áŤááá?
á ááááŞáŤ áĽá á áŤáľ á°á á¨ááá°áŤá ááŽáááľ áĽááááááᣠá áľááŞáá áĄáľ/á፠11/áá¨á ááľáĽ áľáá˝ á áááŹá˝á áĽááľáŤá˘ ááá á˝áá ááá á¨áá°áá áŞáŤáá á áááᎠá¨ááś ááááľ á ááá¨ááᤠá áá°áá áŞáŤá ááŞáŤ áŤáá áá á¨á° áááľ ááĽá á áľááá ááᣠáľááá ááá REST API áááŁá áŞáŤ áá áááá˘
áááŽášá áĽáá
áá¨áľ áá˝áááĄ-
JIRA áĽá áĽá áľ áááŁáľ
áĽá áĽááá áá JIRA áĽáá° ááłá áá¨áłá°áŤ áĽáá áááá áááľ á°áᢠáá ᣠáľáááá ááá ááŽáááľ á¨á°áᨠáŚááľ áĽááá á áĽá á¨ááááŞáŤáášá ááłáŽá˝ áĽá፠áĽáá¨ááá˘
á¨áľáá˝ áááł á áá JIRA áĽá GitHub á áĽáá¨áľ ááŤááᥠá¨áá˝ááľá á áľá°áłá˝ áááŽá˝ áĽááááłááá˘
á¨ááŽáááąá áľáĽáľáĽ á ááśáá˛á áĽáá°áááá
á¨áĽá á¨áá¨áŤ ááŽáááłá˝á á áá¨á á áŠá áá á¨á°áááŁá, áľááá áĽáąá ááááŁáľ á áŁá ááá áá, á¨ááŤáľáááá ᨠmvn áášá ááŹá áĽáť áá.
Github Actions á á áá áá áá áá áááľá¨á á áá¨ááťá ááľáĽ á¨áľáŤ áá°áľá á¨áááá˝ ááá ááá á á ááĽá ᣠáá á áá°á á yml ááá áá¨ááá áá˝áá ᣠâyml programmingâ áĽááłáá áááľ á áá˝áá ᣠáá áá ááľá¨á áĽáá˝ááá - á .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/áá - áááłá áááľ á á°á°á¨á ááĽá áĽá á¨ááłáĽ áĽáŤááá˝ á á°áá አááĽá áá á¨áľáŤ áá°áľ áááá áĽááłáá áľ áŤááááłáá˘
á¨áá¨á°áá á¨á°ááŁá ááá፠áá (áľáŤáá˝) áĽá á¨ááľáá¸á፠á°á¨ááá˝ (á°á¨ááá˝) ááĽáŤááłááą á°ááŁá.
ááŽáŁá - áĽáá á¨áłáááá áľááá° ááá ááá¨áĽ áĽáá˝ááá ᣠá ááŤáľá°áá áá᳠ᣠáá áŚá¤áľá áĽááłá ááá¨áĽ áá˝áá ᣠáá á áá áá¨ááťáá˝ áá áá á áŁá ááľ áá (á¨ááááľ áá á˛áááá)á˘
á á áááá˝ ááá˝ áľáááśá˝á áĽáá°áá áĽááľáľá áá ááá áľáááᥠáááłáᥠᨠJava 11 á áŤáŁá˘á á¨ááááá áľáááśá˝/setup-java action á áá ááá˘
á áĽáá áá áľáááąá á¨ááááááŁá¸áá áááŞáŤáá˝ ááááá˝ áĽáá˝áááᣠá áá á¨áą áĽááá áá° áľáááą á¨áá°ááá ááááŽá˝ áá¸áá˘
á¨áá¨á á¨ááŽáááľ áááŁáłáá ᨠMaven áá ááľáŹáľ áĽáť áááĄ- run: mvn -B clean package
áŁáá˛áŤ -B áá¨á á áľáááľ á ááľ ááá áá ááá áĽááłáááá ááľá°ááĽáŤá áŤááá áááł áŤáľááááá áááá˘
á áŁá áĽáŠ! á ááᣠáááłá á áᥠááĽá á¨ááŽáááą áááŁáł ááááŤáá˘
á ááśáá˛á á¨áá¨áŤ á áá
áááŁá á áĽáŠ áá, áá á áĽáááą, á ááľ ááŽáááľ á á áľá°ááá áááł áááŁá á áá˝áá, áá á áá°áŤá. áľááá , ááŁáŠ á°á¨á á¨áá¨áŤ áá°áśá˝á á áŤáľ-á°á ááľá¨á áá. á á°á¨ááŞá ᣠᨠ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 }}
áá°ááá˝á ááá¸áá á¨ááŽáŽ áááá áá á áá°áŁá á áŽá´áŽáá áĽá ááááᢠáŽá´áŽá á¨áŤáą áĽááá á ááᣠáá á¨áĽáŤááŤá˝á áá áááľáŤáľ ááľáá°áŤ áŤáľááááááĄ-
${{ 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>
á áá á¨áŽáľáŽá áŚáľ áá° áĽáŤááłááłá˝á á¨ááłáĽ áĽáŤá áŤáľááŁá áĽá á¨á˝áá ááἠááŤá áŤááááĄ
á¨áááááłááľ á°ááłá áĽáá¨áá
á á áĽááááš áááľ ááá ááŽáááśáź ááľáĽ á¨áśáá á°ááá ááľáłá˛á áŽáľ áľáá°á áĽá ááááᣠᨠ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 - á sonar ááľáĽ á¨ááŽáááą áľá, á ááŽáááą ááźáśá˝ ááľáĽ ááŤáŠáľ áá˝áá.
Dsonar.áľáá áľ - á¨áľáá áą áľá ᨠGitHub.
á¨ááłáĽ áĽáŤá á á áá á sonarcloud[bot] á á áľá°áŤá¨áśáš ááľáĽ áĽáľáŞáᣠáľá¨áľ áĽáá áĽáááá˘
á¨áááá፠á áľá°áłá°á
áááŁáłá á°áá áŻáᣠáá°áááš á°áŤáá°ááᣠáĽá áááá áĽáá˝áááᢠGitHub Actions á¨áááá፠á áľá°áłá°áá áĽáá´áľ ááá áĽáá°ááŤá°ááá áĽááá˘
á áľáŤ áŚáł ᣠá¨áŽáľ áá°á¨áłá¸á á bitbucket ááľáĽ áŤá ááŽáááśá˝ á áá (ááá ááá áĽáá°á፠áłáŞá áá âá áá áá° á˘áľáĄáŹáľ áĽá˝ááá ᣠá áá˝áľ á GitHub áá áĽá˝áááâ)ᢠá¨á ááŁá ááá áá á˘áľáĄáŹáľ á áĽáŽááἠá¨áááá፠á áľá°áłá°á ááłáŞáŤáá˝ á¨ááľáᢠáá á˝áá áá, ááááŤáąá ááĽáŤááłááą áááśá˝ á áĽá á ááľáĽ á ááľ áá˝ ááá á áĽá á áááááŤá ááľáĽ á¨á°áŤá°áąáľá áááá áŁá áŞáŤáľ áĽá፠ááááá á ááĽááľ, á¨á ááᎠá¤á°ááááľáśá˝á áááá, á á፠ááľáĽ áŤá á°ááŁáŤáľ, á áá¨ááťá ááľáĽ ááá¸áá. áľá á°áľ áááľáŤáľ áĽá áĽáľáá˝ á á ᣠá¨áá ááá áááłáľ ááá áŁááá áá á¨á°ááááá ááá ááľááŁáľ áá˝áá ᣠá ááłááľ áá á¨ááłáĽ áĽáŤáá áá áĽáá°áááľáĄ ááá á áá°áá - áŁá ᪠ááá á¨áłá፠áĽáá ᣠááá á¨á ááľááľ áá¨áŤáὠᣠááá áá á¨á° áááľ á¨áá ááá .
ᨠ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'
á áá ááááá á¨áá-áĽáŤá á¨áłáá˝ á á ááą ááááľ áá°á¨á á áá áľáĄ á áááľáĄáááľáĄ á áááľáĄáŁá áŞáá˝áĄ á áááľáĄá°ááľáĄ á áááľáĄáá°ááá˝áĄ á áááľáĄ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 ááŹáá˝ áĽáá´áľ áĽáá°áá°áአáĽáá (áá á¨áááľáŽá˝ áááľáŁ npmᣠjarᣠdocker áá¨ááť áá)á˘
áśá¨á ááľá áááááŁáľ áĽá á GitHub ááŹáá˝ ááľáĽ ááá°á áľááŞááľáĄ
name: Deploy docker image
on:
push:
branches:
- 'master'
jobs:
build_docker_image:
runs-on: ubuntu-18.04
steps:
# Build JAR:
- uses: actions/checkout@v1
- name: set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 1.11
- name: Maven Package
run: mvn -B clean compile package -DskipTests
# Set global environment variables:
- name: set global env
id: global_env
run: |
echo "::set-output name=IMAGE_NAME::${GITHUB_REPOSITORY#*/}"
echo "::set-output name=DOCKERHUB_IMAGE_NAME::docker.pkg.github.com/${GITHUB_REPOSITORY}/${GITHUB_REPOSITORY#*/}"
# Build Docker image:
- name: Build and tag image
run: |
docker build -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:latest" -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:${GITHUB_SHA::8}" .
- name: Docker login
run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}
# Publish image to github package repository:
- name: Publish image
env:
IMAGE_NAME: $GITHUB_REPOSITORY
run: docker push "docker.pkg.github.com/$GITHUB_REPOSITORY/${{ steps.global_env.outputs.IMAGE_NAME }}"
á ááááŞáŤ á¨áá áá°áá áŞáŤ ᨠJAR ááá ááááŁáľ á ááĽá, á¨á፠á áá áá° GitHub docker áááἠá¤áľ á¨áááľá°áá ááááľ áĽá á¨ááľáá˝áá áľá áĽáá°ááá. áĽáľáŤáá áŤááá áá áĽááľ áá´áá˝ áĽáá á ááĄ-
- áááŁáł áĽáá°áĄ 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 áĽá á áá¨ááť áŤáľááĄ-
docker push "docker.pkg.github.com/antkorwin/github-actions/github-actions"
á¨ááľáá áĽáľá ááááá¨áľ ᨠSHA áá˝ á¨ááááŞáŤ á ááá˝á áĽáá áááá - GITHUB_SHA áĽáá á ááŠááśá˝ á á ᣠáĽáá°áá áŤá áááŁáłáá˝á áá° áá á˛áááą áĽáť áłááá á ááááľ áĽáŤá ááĽá¨áľ áá á¨áľá áĽáá˛á áĽáá á á ᢠááľá°áľáŁ á¨á፠SHA á git áłáŞá ááľáĽ á¨ááá¨á áá˝ áá áááľáá áá˝ááᣠááááŤáąá áľáááśá˝/áźáá ááľ áľáááą á PR ááľáĽ ááłá áĽááááá˝á áááľáááľ á¨áŤáą á¨áá áአáá˝ áľáááŤá°ááá˘
ááá ááá á áĽáŠ áááł á¨á°áŤáŁá¨á፠á¨áĽá á áááá (https://github.com/antkorwin/github-actions/packages) á áááá ááľáĽ á ááááľ á á˛áľ á¨ááľá¨áŤ ááľá áŤáŤáá˘
áĽááŤá á¨ááá°áťáá ááľá áľáŞáśá˝ áááá áá¨áľ áá˝áá.
á¨áá¨á á¨áĽá á áááá á¨áá áááἠáá áĽáá˛á°áŤ áááá áĽá á áááááąá áĽáá°áá ááľááá ááᢠáĽá ááááŁáľ áá áá systemd á áŠá áá á áĽáá´áľ ááľá¨á áĽáá°áá˝á áĽáááŤáá.
ááľáľá
GitHub Actions á á áá áá ááá°áá áŞáŤá˝á áĽáá´áľ á¨á¤á ááá፠ááľá¨á áĽááłááĽá á ááľ ááá á ááŤá áĽáááá¨áľá˘ á¨á á¨ááľááť áá°áá áŞáŤ á áááłáá˝ á ááᣠáľááá
áááłáá áááá°á˝ á¤áá á ááá áĽááłá á áŤáľáááááᤠáááá ááá áá°ááá˝ á áľááááᢠá áľá°áááá ááłáĽ áĽáť áŤáľáááááłá: 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 á¨áľáŤ áá°áľ áĽáá´áľ áĽáá°áá°áŤ áĽááá -
on:
schedule:
- cron: '*/5 * * * *'
ááá ááᣠá Github ááľáĽ á ááŤá˝ á¨áἠááá ááá˝ áá á¨áááŁáŁá ááľá°áśá˝á ááá á áĽáá°ááľá˝á ááá á áá˝ááᢠáááአá á°ááą ááľáĽ á ááĄ-
á¨á ááááŠá áááł á áĽá á áá ááá áĽáááľá˝áĄ-
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 }}
áá° á´áááŤá á¨áááá¨á áľáááą áŁááá áĽááá áŤáá°áłáŤ áĽáť ááᢠáááĽááľ áááá á áááŚá/á´áááŤá-á áá˝á áĽáá ááááᤠá á°ááą ááľáĽ á¨áŚáľ áśá¨á áĽá á¨ááááľ ááłáá፠áĽáá´áľ áĽáá°ááŤáá ááá ἠáá˝áááĄ-
ááľá˘áŽá˝á á Github: URL áá áááአáĽá áá´áááŤá áŚáľ ááľáá°áŤáá˝ ááťá áĽááłáľá¨áąá˘
á¨áááť áľáŤá - JIRA áá°ááá˝
áá° JIRA áĽáá°áááááľ áá ááŁáᣠáĽáá á°ááá°ááᢠá ááśáá˝ áááá አáááŤáľ ááá˘áá˝ á ááľ áŁá ᪠á˛á°áŠáŁ á áááŤá á˛áŤáá áąáŁ ááá áá ááłáŠá áá° JIRA ááá°áľá á¨áľá°á á ááá áľ áá á ááľ áááłá á°ááááťááᢠá áĽááἠáá áá á á ááľ áŚáł áá á˘á°á¨á ááá áááá ááá áá á IDE ááľáĽ áŽáľ áĽáá˝ááá, á áááŤáá˝á áá° bitbucket ááá GitHub áĽáááá ááá, á¨ááŤá á°ááŁáŤáśášá áá° á፠áááľáąáłá, ááá á á á˛áľ ááľáŽáśá˝á ááááľ áŤáľááááá. ᣠá ááłááľ áá áĽáá°áá ááᥠáĽá ááá°. ááĽá áá ááľá¨á áĽááłááŚáľ á ááᣠá ááŤáľáłááąá áľ áá áŚááąá áĽáá°áá áááááľ ááá áááł á¨ááá. á áá¤áąá, á ááľ áá á ááá áľ áŚáł áá á¨á°ááŁá á°ááłáá ááááá áá ááłáá áŤáľáááááłá.
GitHub á áá áá°á á á°ááŁá ááľáĽá áá¨áłááᤠááááŞáá˝ á¨ááá°áľ áĽáŤá áľáááἠá˝ááŽá˝á á áŤáľ-á°á áá° áŽáľ_áááá á ááľ ááá°áľ áĽáá˝áááᢠáĽááľá ááľá¨á á¨áá á á áĽááľ á¨á áááŤáá áľá áŽááŹáá˝á áá¨á°á áĽáť áááĄ-
[Đ¸ĐźŃ ĐżŃОокŃĐ°]-[Đ˝ĐžĐźĐľŃ ŃĐ°Ńка]-наСванио
áááłá á¨ááŽáááľ ááá "GitHub Actions" 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 ááľáĽ ááľáá°áŤ ááááľ áŤáľáááááłá ᣠáá
áá áĽáá´áľ ááľá¨á áĽáá°ááťá áĽáá
á°áĽáŤááˇá-
á¨á°ááŁá áááŤáá á¨á áááŤá áľá áĽáááŁáááĄ-
- 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 á˛áŤááŤá á¨á°ááá¨áą ᣠááááŁáľ á¨ááááłááľ á áľá°áá áááá á°á¨ááá˝ á¸áááá ᣠá¨áá¨áŠ ᣠá¨áĽááłáł-á á¨á´á áľáááľ áá áááááľ á áá ፠ááľáĽ á ááłááľ áĽááááá˝á ááááľ áá˝áá ᣠáľáááá á¨á§á᧠ááľáá áĽáá°á°ááá áĽááááłáá ᢠá áľááá áĽá á á á ááá áá á áááľá¨áľ áá°áá°ááŤáá˝ áá°á¨á áá˝ááá˘
áááśá˝
- áááá á ááŁááá˝ ááá á¨áá áľáááśá˝ áŤááľ á¨áá ፠áŚáł áá á áŁá á áŞá ááᢠá á áĽááááš ááľáĽáŁ á°ááłáłá á˝áá áĽáá´áľ áĽáá°áááł ááá¨áłáľ á¨ááá áŽáąá áááá¨áľ ááá á¨áŁá ᪠áĽáŤáá á ááĽáł á GitHub áá¨ááť ááľáĽ áá¸ááá ááá á áá˝ááá˘
- ááááŁá á á¨áłáááá ááľá¨á ááá¨áĽáĄ ááááľáŁ áá áŚáľáŁ áááśááľ á áŁá á áľá°áłá˝ áŁá ᪠ááá˘
- ᨠGithub ááŹáá˝ á áŁá áĽáŠ ááá áá, áááá áá á¨á° áááľ á á ááľ áŚáł áááľááἠá ááş áá, á á°ááŤáŠ ááľáŽáśá˝ ááľáĽ áá°áľ á áŤáľáááááľá, ááá ááá á á ááľ ááá á áááľ á¨ááłááľ á á áłáá˝ áŤá˛á¨áľ ááľáĽ áá áĽá ᨠGitHub áľáááśá˝ áá áášá á¨á°ááá° áá. á ááťá áľáŞáľ ááľáĽ á¨áśá¨á áááἠá¤áľ áľáá áĽáá˛á áĽáŠ áĽá á ááá˘
- GitHub á áááŁáł áá ááľáĽ ááľáĽáŽá˝á áá°áĽááᣠáľááá á¨ááá ááá˝á áĽá áśá¨áá˝á ááá¨áá¸áľ áá áá áŤá áŤá á á áľá᪠á áá°ááᢠá áá¨áŤááź áá áá ááľá˘áŠá á áŽááśá ááľáĽ á áášá ááá áá¨áľ á ááťááŠáá˘
- ááááľ ááá ááŽáááśá˝ áá
Cons:
- YMLᣠá°á áᣠá ááá°ááᢠá¨áĽáá°áá á áááľ áá°áľ áá á áá°áŠá áľ áá, áĽá áŤáá á áŁá á¨á°ááá°á á¨áá áááĽááľ "fix yml format" áá, á¨á፠á¨áá áŚáł áá áľáá ááá áá¨áłá, ááá á á°áłáłá° ááľáá áá ááá. á á á ááá ᣠá¨ááŽáľáŤáá°á áĽá áἠáá á áľááŞá ááľ áááἠá áŁá á áľá°áłá˝ á°ááᎠá áá°ááá˘
- áá¨áᣠáá°áąá á áá¸ááľ áá¨áᣠáááś áááŁáłá ááľáŹáľ áĽá áá° áŽááśá áááŁáą áááá ááš á áá°ááᣠááá áá ᨠ"á¨á ááĽá " ááľáĽ á¨á áá ááᤠáááááá ááá áá¨á á ááľá˝áá áľ áá á¨ááá˝ IDEA áá áááľáŤáľ á°ááá°ááᢠ.
- áľáááľá á á áśá¨á á¨á ááá¨á á ááááá ááá áá ááá áľá˝ááá áŁááá áá ááŤáľááŞááľ áĽáť áá á¨áá°ááááŁá áĽááἠáá á¨áŁáá ááłá áááŁááá áá ᨠjs ááá áá ááá áĽáááŁááá˘
áááá áľááŞááśá˝ á¨áŤáá áá¨ááť áĽáá
áĽááłá ááľáłááľá
áĄ
á áááĽáá áłáááľ áĽá áá áľááááľ áááá
áŞáááľ á áľáá á ááá´ááĄá 2020 áá°á áŽááá¨ááľá˘ á¨áá¨áŤ áááĽá á ááŤáááá áľ áá áľá á°áśá˝á áĽáá´áľ ááľáááľ áĽáá°áá˝á áĽáť áłááá á á፠á áááŹá˝áá˝ ááľáĽ á¨áłáł áľáĽáľáŚá˝ áá á¨ááĽáŤáľ ááľá˘áŽáźá áĽáááŤá˝ááá!
ááá: hab.com