{"id":85191,"date":"2020-06-14T01:42:41","date_gmt":"2020-06-13T23:42:41","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/krugi-ada-s-github-actions-stroim-ci-cd-pipeline-dlya-java-proekta"},"modified":"2021-02-01T11:41:39","modified_gmt":"2021-02-01T09:41:39","slug":"krugi-ada-s-github-actions-stroim-ci-cd-pipeline-dlya-java-proekta","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/krugi-ada-s-github-actions-stroim-ci-cd-pipeline-dlya-java-proekta","title":{"rendered":"GitHub Actions im Einsatz: CI\/CD-Pipeline f\u00fcr ein Java-Projekt aufbauen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/2fb8ce133fd682f8654f87983ef4e51a.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u041c\u043d\u0435 \u0447\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 Java. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441, \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435\u0442. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u044c \u0441\u0432\u043e\u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0441 Travis-CI \u0438 TeamCity \u043d\u0430 GitHub Actions, \u0438 \u0432\u043e\u0442 \u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/h2>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Spring boot \/ Java 11 \/ Maven. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0441\u0435\u043c, \u043d\u0430\u043c \u0432\u0430\u0436\u043d\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u043e\u0433\u043e REST API \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430.<\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/antkorwin\/github-actions\">github.com\/antkorwin\/github-actions<\/a><\/noindex> \u0432\u0441\u0435 \u044d\u0442\u0430\u043f\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f pipeline-\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u044b \u0432 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<h2>JIRA \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c JIRA \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0440\u0435\u043a\u0435\u0440\u0430 \u0437\u0430\u0434\u0430\u0447, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0432\u0435\u0434\u0435\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0431\u043e\u0440\u0434\u0443 \u043f\u043e\u0434 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u043d\u0430\u043a\u0438\u0434\u0430\u0435\u043c \u0442\u0443\u0434\u0430 \u043f\u0435\u0440\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/9b651cb416d139b47ac97b80a4308113.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u0427\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u043c\u044b \u0435\u0449\u0435 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043c\u043e\u0433\u0443\u0442 \u0434\u0430\u0442\u044c \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 JIRA \u0438 GitHub.<\/p>\n<h2>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n<p>\u041d\u0430\u0448 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 maven, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u0435\u0433\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u0432\u0441\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e, \u044d\u0442\u043e mvn clean package.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Github Actions, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0444\u0430\u0439\u043b \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u0448\u0435\u0433\u043e workflow, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c yml-\u0444\u0430\u0439\u043b\u043e\u043c, \u043d\u0435 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u00ab\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 yml\u00bb, \u043d\u043e \u0447\u0442\u043e \u043f\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u2014 \u0434\u0435\u043b\u0430\u0435\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 .github\/workflow\/ \u0444\u0430\u0439\u043b build.yml \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043c\u0430\u0441\u0442\u0435\u0440 \u0432\u0435\u0442\u043a\u0438:<\/p>\n<pre><code class=\"plaintext\">name: Build\n\non:\n  pull_request:\n    branches:\n      - '*'\n  push:\n    branches:\n      - 'master'\n\njobs:\n  build:\n    runs-on: ubuntu-18.04\n    steps:\n      - uses: actions\/checkout@v1\n      - name: set up JDK 11\n        uses: actions\/setup-java@v1\n        with:\n          java-version: 1.11\n      - name: Maven Package\n        run: mvn -B clean package -DskipTests\n<\/code><\/pre>\n<p><b>on<\/b> \u2014 \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0448 \u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p><b>on: pull_request \/ push<\/b> \u2014 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 workflow \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0443\u0448\u0435 \u0432 \u043c\u0430\u0441\u0442\u0435\u0440 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 (<b>jobs<\/b>) \u0438 \u0448\u0430\u0433\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (<b>steps<\/b>) \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p><b>runs-on<\/b> \u2014 \u0442\u0443\u0442 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u041e\u0421, \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u0436\u0435 Mac OS, \u043d\u043e \u043d\u0430 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u0440\u043e\u0433\u043e\u0435 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435 (\u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 linux).<\/p>\n<p><b>uses<\/b> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u043a\u0448\u0435\u043d\u044b, \u0442\u0430\u043a \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u044d\u043a\u0448\u0435\u043d\u0430 actions\/setup-java \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Java 11.<\/p>\n<p>\u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <b>with<\/b> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u044d\u043a\u0448\u0435\u043d.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u0432\u0435\u043d\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <code>run: mvn -B clean package<\/code> \u0444\u043b\u0430\u0433 <b>-B<\/b> \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d non-interactive mode, \u0447\u0442\u043e\u0431\u044b \u043c\u0430\u0432\u0435\u043d \u0432\u0434\u0440\u0443\u0433 \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u0447\u0442\u043e-\u0442\u043e \u0443 \u043d\u0430\u0441 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/2849bbde04dd01267f35d61896c7dacb.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e! \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0435 \u0432 \u043c\u0430\u0441\u0442\u0435\u0440, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<h2>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432<\/h2>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u043b\u0430\u0433\u043e\u043f\u043e\u043b\u0443\u0447\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u043d\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0433\u043e\u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u0430\u0435\u0448\u044c \u0440\u0435\u0432\u044c\u044e PR \u2014 \u0442\u044b \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u0448\u044c, \u0447\u0442\u043e \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u043b, \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c merge, \u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0432\u0435\u0442\u043a\u0443.<\/p>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430 \u0438 merge \u0432 \u043c\u0430\u0441\u0442\u0435\u0440, \u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043e\u0442\u0447\u0435\u0442\u0430 \u043e code-coverage.<\/p>\n<pre><code class=\"plaintext\">name: Build\n\non:\n  pull_request:\n    branches:\n      - '*'\n  push:\n    branches:\n      - 'master'\n\njobs:\n  build:\n    runs-on: ubuntu-18.04\n    steps:\n      - uses: actions\/checkout@v1\n      - name: set up JDK 11\n        uses: actions\/setup-java@v1\n        with:\n          java-version: 1.11\n      - name: Maven Verify\n        run: mvn -B clean verify\n      - name: Test Coverage\n        uses: codecov\/codecov-action@v1\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e codecov \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 jacoco \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u043c. \u0423 codecov \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u044d\u043a\u0448\u0435\u043d, \u043d\u043e \u0435\u043c\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0448\u0438\u043c pull-request-\u043e\u043c \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043a\u0435\u043d:<\/p>\n<p><code>${{ secrets.CODECOV_TOKEN }}<\/code> \u2014 \u0442\u0430\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c \u0435\u0449\u0435 \u043d\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437, secrets \u044d\u0442\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432 \u0432 \u0433\u0438\u0442\u0445\u0430\u0431\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u0430\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u0438\/\u0442\u043e\u043a\u0435\u043d\u044b\/\u0445\u043e\u0441\u0442\u044b\/url-\u044b \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0432 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 secrets, \u043c\u043e\u0436\u043d\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u043d\u0430 GitHub:<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/779ff57e2e5d53d0cc1926d42b75f6ac.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u043c\u043e\u0436\u043d\u043e \u043d\u0430 <noindex><a rel=\"nofollow\" href=\"https:\/\/codecov.io\">codecov.io<\/a><\/noindex> \u043f\u043e\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 GitHub, \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f public \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432\u0438\u0434\u0430: <noindex><a rel=\"nofollow\" href=\"https:\/\/codecov.io\/gh\/\">GitHub user name<\/a><\/noindex>\/[repo name]. \u041f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0430 codecov \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0432 \u0433\u0438\u0442\u0445\u0430\u0431\u0435.<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/cb0f72ae1fea19e89819f6d3e3d66baa.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c jacoco \u043f\u043b\u0430\u0433\u0438\u043d \u0432 POM-\u0444\u0430\u0439\u043b:<\/p>\n<pre><code class=\"xml\">&lt;plugin&gt;\n\t&lt;groupId&gt;org.jacoco&lt;\/groupId&gt;\n\t&lt;artifactId&gt;jacoco-maven-plugin&lt;\/artifactId&gt;\n\t&lt;version&gt;0.8.4&lt;\/version&gt;\n\t&lt;executions&gt;\n\t\t&lt;execution&gt;\n\t\t\t&lt;goals&gt;\n\t\t\t\t&lt;goal&gt;prepare-agent&lt;\/goal&gt;\n\t\t\t&lt;\/goals&gt;\n\t\t&lt;\/execution&gt;\n\t\t&lt;!-- attached to Maven test phase --&gt;\n\t\t&lt;execution&gt;\n\t\t\t&lt;id&gt;report&lt;\/id&gt;\n\t\t\t&lt;phase&gt;test&lt;\/phase&gt;\n\t\t\t&lt;goals&gt;\n\t\t\t\t&lt;goal&gt;report&lt;\/goal&gt;\n\t\t\t&lt;\/goals&gt;\n\t\t&lt;\/execution&gt;\n\t&lt;\/executions&gt;\n&lt;\/plugin&gt;\n&lt;plugin&gt;\n\t&lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;\n\t&lt;artifactId&gt;maven-surefire-plugin&lt;\/artifactId&gt;\n\t&lt;version&gt;2.22.2&lt;\/version&gt;\n\t&lt;configuration&gt;\n\t\t&lt;reportFormat&gt;plain&lt;\/reportFormat&gt;\n\t\t&lt;includes&gt;\n\t\t\t&lt;include&gt;**\/*Test*.java&lt;\/include&gt;\n\t\t\t&lt;include&gt;**\/*IT*.java&lt;\/include&gt;\n\t\t&lt;\/includes&gt;\n\t&lt;\/configuration&gt;\n&lt;\/plugin&gt;\n<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u0430\u0448 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c codecov \u0431\u043e\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f:<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/e1affe120e6b08a432a9d1f4d6d49641.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<h2>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440<\/h2>\n<p>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u0432\u043e\u0438\u0445 o\u043f\u0435\u043d\u0441\u043e\u0440\u0441-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e sonar cloud \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430, \u0435\u0433\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a travis-ci. \u0422\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0448\u0430\u0433 \u043f\u0440\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 GitHub Actions, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435. \u041c\u0430\u0440\u043a\u0435\u0442 \u044d\u043a\u0448\u0435\u043d\u043e\u0432 \u2014 \u043a\u043b\u0435\u0432\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043d\u043e \u0432 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043e\u043d \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0432\u0435\u043b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044f \u043f\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0435 \u043d\u0430\u0448\u0435\u043b \u043d\u0443\u0436\u043d\u044b\u0439 \u044d\u043a\u0448\u0435\u043d \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043b \u0435\u0433\u043e \u0432 workflow. \u0410 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e sonar \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 maven \u0438\u043b\u0438 gradle. \u041e\u0431 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043d\u043e \u043a\u0442\u043e \u0436\u0435 \u0435\u0435 \u0447\u0438\u0442\u0430\u0435\u0442?!<\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 mvn \u043f\u043b\u0430\u0433\u0438\u043d:<\/p>\n<pre><code class=\"plaintext\">name: SonarCloud\n\non:\n  push:\n    branches:\n      - master\n  pull_request:\n    types: [opened, synchronize, reopened]\n\njobs:\n  sonarcloud:\n    runs-on: ubuntu-16.04\n    steps:\n      - uses: actions\/checkout@v1\n      - name: Set up JDK\n        uses: actions\/setup-java@v1\n        with:\n          java-version: 1.11\n      - name: Analyze with SonarCloud\n#       set environment variables:\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}\n#       run sonar maven plugin:\n        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\n<\/code><\/pre>\n<p><b>SONAR_TOKEN<\/b> \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 <noindex><a rel=\"nofollow\" href=\"https:\/\/sonarcloud.io\/\">sonarcloud.io<\/a><\/noindex> \u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u0432 secrets. <b>GITHUB_TOKEN<\/b> \u2014 \u044d\u0442\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0442 \u0433\u0438\u0442\u0445\u0430\u0431, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0433\u043e sonarcloud[bot] \u0441\u043c\u043e\u0436\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0433\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430\u0445.<\/p>\n<p><b>Dsonar.projectKey<\/b> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 \u0441\u043e\u043d\u0430\u0440\u0435, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p><b>Dsonar.organization<\/b> \u2014 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0437 GitHub.<\/p>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442 \u0438 \u0436\u0434\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 sonarcloud[bot] \u043f\u0440\u0438\u0434\u0435\u0442 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438:<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/4e4804c3b66690b98fcd21d924e7c300.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<h2>Release management<\/h2>\n<p>\u0411\u0438\u043b\u0434 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438, \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u043e\u0433\u043d\u0430\u043b\u0438, \u043c\u043e\u0436\u043d\u043e \u0438 \u0440\u0435\u043b\u0438\u0437 \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a GitHub Actions \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c release manag\u0435ment.<\/p>\n<p>\u041d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u0435\u0436\u0438\u0442 \u0432 bitbucket(\u0432\u0441\u0435 \u043a\u0430\u043a \u0432 \u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u00ab\u0434\u043d\u0435\u043c \u043f\u0438\u0448\u0443 \u0432 \u0431\u0438\u0442\u0431\u0430\u043a\u0435\u0442, \u043d\u043e\u0447\u044c\u044e \u043a\u043e\u043c\u043c\u0438\u0447\u0443 \u0432 GitHub\u00bb). \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432 bitbucket \u043d\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043b\u0438\u0437\u0430\u043c\u0438. \u042d\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0443\u043a\u0430\u043c\u0438 \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443 \u0432 confluence \u0438 \u0441\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0442\u0443\u0434\u0430 \u0432\u0441\u0435 \u0444\u0438\u0447\u0438 \u0432\u043e\u0448\u0435\u0434\u0448\u0438\u0435 \u0432 \u0440\u0435\u043b\u0438\u0437, \u0448\u0435\u0440\u0441\u0442\u0438\u0442\u044c \u0447\u0435\u0440\u0442\u043e\u0433\u0438 \u0440\u0430\u0437\u0443\u043c\u0430, \u0442\u0430\u0441\u043a\u0438 \u0432 jira, \u043a\u043e\u043c\u043c\u0438\u0442\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u0428\u0430\u043d\u0441\u043e\u0432 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0433\u043e, \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u0431\u044b\u0442\u044c \u0438\u043b\u0438 \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0443\u0436\u0435 \u0440\u0435\u043b\u0438\u0437\u0438\u043b\u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437, \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a \u0447\u0435\u043c\u0443 \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442 \u2014 \u044d\u0442\u043e \u0444\u0438\u0447\u0430 \u0438\u043b\u0438 \u0444\u0438\u043a\u0441 \u0431\u0430\u0433\u043e\u0432, \u0438\u043b\u0438 \u043f\u0440\u0430\u0432\u043a\u0430 \u0442\u0435\u0441\u0442\u043e\u0432, \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0435.<\/p>\n<p>\u041a\u0430\u043a \u043d\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c GitHub actions? \u0415\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u044d\u043a\u0448\u0435\u043d \u2014 release drafter, \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u0444\u0430\u0439\u043b\u0430 release notes, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 release notes \u0444\u0430\u0439\u043b\u0435:<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/7aea41bda1ecc101ee942d92d5ef3619.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442\u0447\u0435\u0442\u0430(.github\/release-drafter.yml):<\/p>\n<pre><code class=\"plaintext\">name-template: 'v$NEXT_PATCH_VERSION'\ntag-template: 'v$NEXT_PATCH_VERSION'\ncategories:\n  - title: ' New Features'\n    labels:\n      - 'type:features'\n# \u0432 \u044d\u0442\u0443 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 PR \u0441 \u043c\u0435\u0442\u043a\u043e\u0439 type:features\n\n  - title: ' Bugs Fixes'\n    labels:\n      - 'type:fix'\n# \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u043b\u044f \u043c\u0435\u0442\u043a\u0438 type:fix \u0438 \u0442.\u0434.\n\n  - title: ' Documentation'\n    labels:\n      - 'type:documentation'\n\n  - title: ' Configuration'\n    labels:\n      - 'type:config'\n\nchange-template: '- $TITLE @$AUTHOR (#$NUMBER)'\ntemplate: |\n  ## Changes\n  $CHANGES\n<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a\u0430 \u0440\u0435\u043b\u0438\u0437\u0430 (.github\/workflows\/release-draft.yml):<\/p>\n<pre><code class=\"plaintext\">name: \"Create draft release\"\n\non:\n  push:\n    branches:\n      - master\n\njobs:\n  update_draft_release:\n    runs-on: ubuntu-18.04\n    steps:\n      - uses: release-drafter\/release-drafter@v5\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n<\/code><\/pre>\n<p>\u0412\u0441\u0435 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u044b \u0441 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 release notes \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u2014 magic!<\/p>\n<p>\u0422\u0443\u0442 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441: \u0430 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0437\u0430\u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0438 \u0432 PR? \u0422\u043e\u0433\u0434\u0430 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0432 \u043a\u0430\u043a\u0443\u044e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u0435\u0433\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438, \u0438 \u043e\u043f\u044f\u0442\u044c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0441 \u043a\u0430\u0436\u0434\u044b\u043c PR-\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u043e\u0434\u043d\u0438\u043c \u044d\u043a\u0448\u0435\u043d\u043e\u043c \u2014 label verifier \u2014 \u043e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0442\u044d\u0433\u043e\u0432 \u043d\u0430 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0435. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u044d\u0433\u0430, \u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0430\u043b\u0435\u043d\u0430 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0435.<\/p>\n<pre><code class=\"plaintext\">name: \"Verify type labels\"\n\non:\n  pull_request:\n    types: [opened, labeled, unlabeled, synchronize]\n\njobs:\n  triage:\n    runs-on: ubuntu-18.04\n    steps:\n      - uses: zwaldowski\/match-label-action@v2\n        with:\n          allowed: 'type:fix, type:features, type:documentation, type:tests, type:config'\n<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043b\u044e\u0431\u043e\u0439 pull-request \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0442\u044d\u0433\u043e\u0432: type:fix, type:features, type:documentation, type:tests, type:config.<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/5275356c53bef537bd1e41ae1421edc2.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<h2>\u0410\u0432\u0442\u043e-\u0430\u043d\u043d\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432<\/h2>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u043c\u044b \u043a\u043e\u0441\u043d\u0443\u043b\u0438\u0441\u044c \u0442\u0430\u043a\u043e\u0439 \u0442\u0435\u043c\u044b \u043a\u0430\u043a \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430\u043c\u0438, \u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0449\u0435 \u043e \u0442\u0430\u043a\u043e\u043c \u044d\u043a\u0448\u0435\u043d\u0435, \u043a\u0430\u043a labeler, \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043a\u0438 \u0432 PR \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0431\u044b\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u0430\u043a [build] \u043b\u044e\u0431\u043e\u0439 \u043f\u0443\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <code>.github\/workflow<\/code>.<\/p>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<pre><code class=\"plaintext\">name: \"Auto-assign themes to PR\"\n\non:\n  - pull_request\n\njobs:\n  triage:\n    runs-on: ubuntu-18.04\n    steps:\n      - uses: actions\/labeler@v2\n        with:\n          repo-token: ${{ secrets.GITHUB_TOKEN }}\n<\/code><\/pre>\n<p>\u0415\u0449\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430\u043c\u0438 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u043e\u0432:<\/p>\n<pre><code class=\"plaintext\">theme:build:\n  - \".github\/**\"\n  - \"pom.xml\"\n  - \".travis.yml\"\n  - \".gitignore\"\n  - \"Dockerfile\"\n\ntheme:code:\n  - \"src\/main\/*\"\n\ntheme:tests:\n  - \"src\/test\/*\"\n\ntheme:documentation:\n  - \"docs\/**\"\n\ntheme:TRASH:\n  - \".idea\/**\"\n  - \"target\/**\"\n<\/code><\/pre>\n<p>\u041f\u043e\u0434\u0440\u0443\u0436\u0438\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u043c\u0435\u0442\u043a\u0438 \u0432 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u044b \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0435\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u043a, \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0432\u044b\u0448\u043b\u043e, match-label \u043d\u0430 \u043e\u0442\u0440\u0435\u0437 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0431\u043e\u0442\u043e\u043c \u043c\u0435\u0442\u043a\u0438. \u041f\u043e\u0445\u043e\u0436\u0435 \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u044e\u0449\u0435\u0435 \u043e\u0431\u0430 \u044d\u0442\u0430\u043f\u0430. \u041d\u043e \u0434\u0430\u0436\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043c\u0435\u0442\u043a\u0443 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430.<\/p>\n<h2>\u041f\u043e\u0440\u0430 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c<\/h2>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/cf276abab703f6a102f8579b28835710.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u042f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u0435\u043f\u043b\u043e\u044f \u0447\u0435\u0440\u0435\u0437 GitHub Actions (\u0447\u0435\u0440\u0435\u0437 ssh, \u0447\u0435\u0440\u0435\u0437 scp, \u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 docker-hub), \u0438 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u043b\u0438\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043a\u0443 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u0430\u043a\u0438\u043c \u0431\u044b \u0438\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u043c \u043d\u0435 \u0431\u044b\u043b \u0432\u0430\u0448 pipeline.<\/p>\n<p>\u041c\u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u0441\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0435\u043f\u043b\u043e\u0439 \u0432 GitHub Packages (\u044d\u0442\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0434\u043b\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430, npm, jar, docker).<\/p>\n<p>C\u043a\u043f\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 docker \u043e\u0431\u0440\u0430\u0437\u0430 \u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0435\u0433\u043e \u0432 GitHub Packages:<\/p>\n<pre><code class=\"plaintext\">name: Deploy docker image\n\non:\n  push:\n    branches:\n      - 'master'\n\njobs:\n\n  build_docker_image:\n    runs-on: ubuntu-18.04\n    steps:\n\n#     Build JAR:\n      - uses: actions\/checkout@v1\n      - name: set up JDK 11\n        uses: actions\/setup-java@v1\n        with:\n          java-version: 1.11\n      - name: Maven Package\n        run: mvn -B clean compile package -DskipTests\n\n#     Set global environment variables:\n      - name: set global env\n        id: global_env\n        run: |\n          echo \"::set-output name=IMAGE_NAME::${GITHUB_REPOSITORY#*\/}\"\n          echo \"::set-output name=DOCKERHUB_IMAGE_NAME::docker.pkg.github.com\/${GITHUB_REPOSITORY}\/${GITHUB_REPOSITORY#*\/}\"\n\n#     Build Docker image:\n      - name: Build and tag image\n        run: |\n          docker build -t \"${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:latest\" -t \"${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:${GITHUB_SHA::8}\" .\n\n      - name: Docker login\n        run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}\n\n#     Publish image to github package repository:\n      - name: Publish image\n        env:\n          IMAGE_NAME: $GITHUB_REPOSITORY\n        run: docker push \"docker.pkg.github.com\/$GITHUB_REPOSITORY\/${{ steps.global_env.outputs.IMAGE_NAME }}\"\n<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c JAR-\u0444\u0430\u0439\u043b \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043f\u0443\u0442\u044c \u043a GitHub docker registry \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0437\u0430. \u0422\u0443\u0442 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0435\u0439, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0435\u0449\u0435 \u043d\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c:<\/p>\n<ul>\n<li>\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432\u0438\u0434\u0430: echo &#171;::set-output name=NAME::VALUE&#187; \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0448\u0430\u0433\u0435, \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u0433\u0430\u0445.<\/li>\n<li>\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e\u0439 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0448\u0430\u0433\u0435 \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u0448\u0430\u0433\u0430: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}<\/li>\n<li>\u0412 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 GITHUB_REPOSITORY \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u0435\u0433\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 (\u00abowner\/repo-name\u00bb). \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u0441\u0435 \u043a\u0440\u043e\u043c\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f bash \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c: ${GITHUB_REPOSITORY#*\/}<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u043e\u043a\u0435\u0440-\u043e\u0431\u0440\u0430\u0437:<\/p>\n<p><code>docker build -t \"docker.pkg.github.com\/antkorwin\/github-actions\/github-actions:latest\"<\/code><\/p>\n<p>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 registry:<\/p>\n<p><code>docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}<\/code><\/p>\n<p>\u0418 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0432 GitHub Packages Repository:<\/p>\n<p><code>docker push \"docker.pkg.github.com\/antkorwin\/github-actions\/github-actions\"<\/code><\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u043e\u0431\u0440\u0430\u0437\u0430, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u0438\u0437 SHA-\u0445\u044d\u0448\u0430 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u2014 GITHUB_SHA \u0442\u0443\u0442 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b, \u0435\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 merge \u0432 master, \u0430 \u0435\u0449\u0435 \u0438 \u043f\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430, \u0442\u043e SHA \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0445\u044d\u0448\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0433\u0438\u0442\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 actions\/checkout \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0445\u044d\u0448, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 PR.<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/86e8d766ef4079f261d50a33bd4a90ef.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0431\u043b\u0430\u0433\u043e\u043f\u043e\u043b\u0443\u0447\u043d\u043e, \u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432 \u0440\u0430\u0437\u0434\u0435\u043b packages (https:\/\/github.com\/antkorwin\/github-actions\/packages) \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0435\u0440 \u043e\u0431\u0440\u0430\u0437:<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/25b926ab43e1fc01d6c820de38b4ec78.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u0422\u0430\u043c \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0435\u0440\u0441\u0438\u0439 \u0434\u043e\u043a\u0435\u0440-\u043e\u0431\u0440\u0430\u0437\u0430.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u044d\u0442\u0438\u043c registry \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0438\u0441\u0430. \u041e \u0442\u043e\u043c \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 systemd, \u044f, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437.<\/p>\n<h2>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c health check \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 GitHub Actions. \u0412 \u043d\u0430\u0448\u0435\u043c \u0431\u0443\u0442\u043e\u0432\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c actuator, \u0442\u0430\u043a \u0447\u0442\u043e API \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u0430\u0436\u0435 \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u0434\u043b\u044f \u043b\u0435\u043d\u0438\u0432\u044b\u0445 \u0443\u0436\u0435 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438. \u041d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0440\u043d\u0443\u0442\u044c \u0445\u043e\u0441\u0442: <code>SERVER-URL:PORT\/actuator\/health<\/code><\/p>\n<pre><code class=\"plaintext\">$ curl -v 127.0.0.1:8080\/actuator\/health\n\n&gt; GET \/actuator\/health HTTP\/1.1\n&gt; Host: 127.0.0.1:8080\n&gt; User-Agent: curl\/7.61.1\n&gt; Accept: *\/*\n\n&lt; HTTP\/1.1 200\n&lt; Content-Type: application\/vnd.spring-boot.actuator.v3+json\n&lt; Transfer-Encoding: chunked\n&lt; Date: Thu, 04 Jun 2020 12:33:37 GMT\n\n{\"status\":\"UP\"}\n<\/code><\/pre>\n<p>\u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u0441\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e \u043a\u0440\u043e\u043d\u0443, \u043d\u0443 \u0430 \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043e\u043d \u043d\u0430\u043c \u043d\u0435 \u043e\u0442\u0432\u0435\u0442\u0438\u0442, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0441\u043b\u0430\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c workflow \u043f\u043e \u043a\u0440\u043e\u043d\u0443:<\/p>\n<pre><code class=\"plaintext\">on:\n  schedule:\n    - cron:  '*\/5 * * * *'\n<\/code><\/pre>\n<p>\u0412\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e, \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432\u0435\u0440\u0438\u0442\u0441\u044f \u0447\u0442\u043e \u0432 \u0433\u0438\u0442\u0445\u0430\u0431\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0438\u0432\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 webhook-\u0438. \u0414\u0435\u0442\u0430\u043b\u0438 \u0435\u0441\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438: <noindex><a rel=\"nofollow\" href=\"https:\/\/help.github.com\/en\/actions\/reference\/events-that-trigger-workflows#scheduled-events-schedule\">help.github.com\/en\/actions\/reference\/events-that-trigger-workflows#scheduled-events-schedule<\/a><\/noindex><\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0443\u043a\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 curl:<\/p>\n<pre><code class=\"plaintext\">jobs:\n  ping:\n    runs-on: ubuntu-18.04\n    steps:\n\n      - name: curl actuator\n        id: ping\n        run: |\n          echo \"::set-output name=status::$(curl ${{secrets.SERVER_HOST}}\/api\/actuator\/health)\"\n\n      - name: health check\n        run: |\n          if [[ ${{ steps.ping.outputs.status }} != *\"UP\"* ]]; then\n            echo \"health check is failed\"\n            exit 1\n          fi\n          echo \"It's OK\"\n<\/code><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u043e, \u0447\u0442\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u043b \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441, \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0448\u0430\u0433\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u0443\u0441 UP \u0438, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0442\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u00ab\u0437\u0430\u0432\u0430\u043b\u0438\u0442\u044c\u00bb \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u0442\u043e <b>exit 1<\/b> \u2014 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u043e\u0440\u0443\u0436\u0438\u0435.<\/p>\n<pre><code class=\"plaintext\">  - name: send alert in telegram\n    if: ${{ failure() }}\n    uses: appleboy\/telegram-action@master\n    with:\n      to: ${{ secrets.TELEGRAM_TO }}\n      token: ${{ secrets.TELEGRAM_TOKEN }}\n      message: |\n        Health check of the:\n        ${{secrets.SERVER_HOST}}\/api\/actuator\/health\n        failed with the result:\n        ${{ steps.ping.outputs.status }}\n<\/code><\/pre>\n<p>\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c \u0434\u0435\u043b\u0430\u0435\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0437\u0430\u0432\u0430\u043b\u0438\u043b\u043e\u0441\u044c \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0448\u0430\u0433\u0435. \u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c appleboy\/telegram-action, \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0431\u043e\u0442\u0430 \u0438 id \u0447\u0430\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appleboy\/telegram-action\">github.com\/appleboy\/telegram-action<\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/c07da4ac278ddb8b127dd6c17f5468ee.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u0445 \u043d\u0430 \u0433\u0438\u0442\u0445\u0430\u0431\u0435: URL \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0442\u043e\u043a\u0435\u043d\u044b \u0434\u043b\u044f \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c \u0431\u043e\u0442\u0430.<\/p>\n<h2>\u0411\u043e\u043d\u0443\u0441 \u0442\u0440\u0435\u043a \u2014 JIRA \u0434\u043b\u044f \u043b\u0435\u043d\u0438\u0432\u044b\u0445<\/h2>\n<p>\u042f \u043e\u0431\u0435\u0449\u0430\u043b \u0447\u0442\u043e \u043c\u044b \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a JIRA, \u0438 \u043c\u044b \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c. \u0421\u043e\u0442\u043d\u0438 \u0440\u0430\u0437 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b \u043d\u0430 \u0441\u0442\u0435\u043d\u0434\u0430\u043f\u0430\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0444\u0438\u0447\u0443, \u0441\u043b\u0438\u043b\u0438 \u0432\u0435\u0442\u043a\u0443, \u043d\u043e \u0437\u0430\u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0442\u044f\u043d\u0443\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 JIRA. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u0449\u0435, \u043d\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u0432 IDE, \u0441\u043b\u0438\u0432\u0430\u0435\u043c \u0432\u0435\u0442\u043a\u0438 \u0432 bitbucket \u0438\u043b\u0438 GitHub, \u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0442\u043e\u043c \u0442\u0430\u0441\u043a\u0430\u0435\u043c \u0432 Jira, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043e\u043a\u043d\u0430, \u0438\u043d\u043e\u0433\u0434\u0430 \u043b\u043e\u0433\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u0440\u0430\u0437 \u0438 \u0442.\u0434. \u041a\u043e\u0433\u0434\u0430 \u0442\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0448\u044c, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435, \u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u0440\u0434\u0443 \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430. \u0412 \u0438\u0442\u043e\u0433\u0435, \u0443\u0442\u0440\u043e\u043c \u043d\u0430 \u0441\u0442\u0435\u043d\u0434\u0430\u043f\u0435 \u043d\u0430\u0434\u043e \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043e\u0441\u043a\u0438 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>GitHub \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0438 \u0432 \u044d\u0442\u043e\u043c \u0440\u0443\u0442\u0438\u043d\u043d\u043e\u043c \u0437\u0430\u043d\u044f\u0442\u0438\u0438, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c, \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 code_review, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043a\u0438\u043d\u0443\u043b\u0438 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442. \u0412\u0441\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u2014 \u044d\u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f \u0432 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0435\u0442\u043e\u043a:<\/p>\n<p><code>[\u0438\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430]-[\u043d\u043e\u043c\u0435\u0440 \u0442\u0430\u0441\u043a\u0430]-\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/code><\/p>\n<p>\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043a\u043b\u044e\u0447 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u00abGitHub Actions\u00bb \u0431\u0443\u0434\u0435\u0442 GA, \u0442\u043e <code>GA-8-jira-bot<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0435\u0442\u043a\u043e\u0439 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 GA-8.<\/p>\n<p>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 JIRA \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u044d\u043a\u0448\u0435\u043d\u044b \u043e\u0442 Atlassian, \u043e\u043d\u0438 \u043d\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b, \u043d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0443 \u043c\u0435\u043d\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438. \u041d\u043e \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435, \u0447\u0442\u043e \u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0432 JIRA \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f: atlassian\/gajira-login<\/p>\n<pre><code class=\"plaintext\">jobs:\n  build:\n    runs-on: ubuntu-latest\n    name: Jira Workflow\n    steps:\n      - name: Login\n        uses: atlassian\/gajira-login@master\n        env:\n          JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}\n          JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}\n          JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}\n<\/code><\/pre>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0432 JIRA, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u043e \u0442\u0443\u0442: <noindex><a rel=\"nofollow\" href=\"https:\/\/confluence.atlassian.com\/cloud\/api-tokens-938839638.html\">confluence.atlassian.com\/cloud\/api-tokens-938839638.html<\/a><\/noindex><\/p>\n<p>\u0412\u044b\u0447\u043b\u0435\u043d\u044f\u0435\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0432\u0435\u0442\u043a\u0438:<\/p>\n<pre><code class=\"plaintext\">  - name: Find Issue\n    id: find_issue\n    shell: bash\n    run: |\n      echo \"::set-output name=ISSUE_ID::$(echo ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}')\"\n      echo brach name: $GITHUB_HEAD_REF\n      echo extracted issue: ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}'\n\n  - name: Check Issue\n    shell: bash\n    run: |\n      if [[ \"${{steps.find_issue.outputs.ISSUE_ID}}\" == \"\" ]]; then\n        echo \"Please name your branch according to the JIRA issue: [project_key]-[task_number]-branch_name\"\n        exit 1\n      fi\n      echo succcessfully found JIRA issue: ${{steps.find_issue.outputs.ISSUE_ID}}\n<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0438\u0441\u043a\u0430\u0442\u044c \u0432 GitHub marketplace, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u043d\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0435\u0440\u0435\u0437 grep \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0432\u0435\u0442\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043e\u0442 Atlassian \u043d\u0438 \u0432 \u043a\u0430\u043a\u0443\u044e \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043c\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043c \u043d\u0435 \u0442\u0430\u043a \u2014 \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u00abCode review\u00bb \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0443\u043b\u043b-\u0440\u0435\u043a\u0432\u0435\u0441\u0442\u0430:<\/p>\n<pre><code class=\"plaintext\">  - name: Transition issue\n    if: ${{ success() }}\n    uses: atlassian\/gajira-transition@master\n    with:\n      issue: ${{ steps.find_issue.outputs.ISSUE_ID }}\n      transition: \"Code review\"\n<\/code><\/pre>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 GitHub, \u0432\u0441\u0435, \u0447\u0442\u043e \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u2014 \u044d\u0442\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u0434\u0430\u0447\u0438, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0448\u0430\u0433\u0435 \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 JIRA, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0432\u044b\u0448\u0435.<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/6030680391fb4883bc8a8324377f1fab.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u0438 merge \u0432 \u043c\u0430\u0441\u0442\u0435\u0440, \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445 \u0438\u0437 GitHub workflow. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0435\u0439 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0438 \u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b.<\/p>\n<h2>\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 DEVOPS, \u0442\u043e \u043c\u044b \u043f\u043e\u043a\u0440\u044b\u043b\u0438 \u0432\u0441\u0435 \u044d\u0442\u0430\u043f\u044b, \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u043a\u0440\u043e\u043c\u0435 operate, \u0434\u0443\u043c\u0430\u044e, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u044d\u043a\u0448\u0435\u043d \u0432 \u043c\u0430\u0440\u043a\u0435\u0442\u0435 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 help-desk \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0442\u043e pipeline \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b.<\/p>\n<p><img decoding=\"async\" alt=\"\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430)\" src=\"\/wp-content\/uploads\/2020\/06\/95392f7b88a3f122d1a6ef57d1d16633.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p><b>\u041f\u043b\u044e\u0441\u044b:<\/b><\/p>\n<ul>\n<li> Marketplace \u0441 \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0436\u0438\u0437\u043d\u0438, \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0435\u0449\u0435 \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043b\u0438\u0431\u043e \u0437\u0430\u043f\u043e\u0441\u0442\u0438\u0442\u044c feature request \u0430\u0432\u0442\u043e\u0440\u0443 \u043f\u0440\u044f\u043c\u043e \u0432 \u0433\u0438\u0442\u0445\u0430\u0431 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/li>\n<li>\u0412\u044b\u0431\u043e\u0440 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438: Linux, mac os, windows \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0444\u0438\u0447\u0430.<\/li>\n<li>Github Packages \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u0441\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0443\u0434\u043e\u0431\u043d\u043e, \u043d\u0435 \u043d\u0430\u0434\u043e \u0441\u0435\u0440\u0444\u0438\u0442\u044c \u043f\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043e\u043a\u043e\u0448\u043a\u0430\u043c, \u0432\u0441\u0435 \u0432 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 \u043e\u0434\u043d\u043e\u0433\u043e-\u0434\u0432\u0443\u0445 \u043a\u043b\u0438\u043a\u043e\u0432 \u043c\u044b\u0448\u0438 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 GitHub Actions. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 docker registry \u0432 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u2014 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e.<\/li>\n<li>GitHub \u043f\u0440\u044f\u0447\u0435\u0442 \u0441\u0435\u043a\u0440\u0435\u0442\u044b \u0432 \u043b\u043e\u0433\u0430\u0445 \u0441\u0431\u043e\u0440\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u043e\u043b\u0435\u0439 \u0438 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0441\u0442\u0440\u0430\u0448\u043d\u043e. \u0417\u0430 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0438 \u0440\u0430\u0437\u0443 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0435\u043a\u0440\u0435\u0442 \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/li>\n<li>\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u0435\u043d \u0434\u043b\u044f Open Source \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/li>\n<\/ul>\n<p><b>\u041c\u0438\u043d\u0443\u0441\u044b:<\/b><\/p>\n<ul>\n<li> YML, \u043d\u0443 \u043d\u0435 \u043b\u044e\u0431\u043b\u044e \u044f \u0435\u0433\u043e. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c \u0444\u043b\u043e\u0443 \u0443 \u043c\u0435\u043d\u044f \u0441\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u044b\u0439 commit message \u044d\u0442\u043e \u00abfix yml format\u00bb, \u0442\u043e \u0437\u0430\u0431\u0443\u0434\u0435\u0448\u044c \u0433\u0434\u0435-\u0442\u043e \u0442\u0430\u0431 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0442\u043e \u043d\u0435 \u043d\u0430 \u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430\u043f\u0438\u0448\u0435\u0448\u044c. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0441\u0438\u0434\u0435\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u044d\u043a\u0440\u0430\u043d\u043e\u043c \u0441 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u043c \u0438 \u043b\u0438\u043d\u0435\u0439\u043a\u043e\u0439 \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u0435.<\/li>\n<li> DEBUG, \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0444\u043b\u043e\u0443 \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u043c\u0438, \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u043e\u0431\u043d\u043e, \u043d\u043e \u044d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0437 \u0440\u0430\u0437\u0440\u044f\u0434\u0430 \u00ab\u0432\u044b \u0437\u0430\u0436\u0440\u0430\u043b\u0438\u0441\u044c\u00bb, \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0443\u0434\u043e\u0431\u043d\u044b\u043c\u0438 IDEA, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435, \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e.<\/li>\n<li> \u0421\u0432\u043e\u0439 \u044d\u043a\u0448\u0435\u043d \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0447\u0435\u043c \u0443\u0433\u043e\u0434\u043d\u043e \u0435\u0441\u043b\u0438 \u0437\u0430\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u0432 \u0434\u043e\u043a\u0435\u0440, \u043d\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e javascript, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0432\u043a\u0443\u0441\u0430, \u043d\u043e \u044f \u0431\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0435\u043b \u0447\u0442\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u0430\u043c\u0435\u0441\u0442\u043e js.<\/li>\n<\/ul>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u0442\u0443\u0442: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/antkorwin\/github-actions\">github.com\/antkorwin\/github-actions<\/a><\/noindex><\/p>\n<blockquote><p>\u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043d\u0435\u0434\u0435\u043b\u0435 \u044f \u0431\u0443\u0434\u0443 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0441 <noindex><a rel=\"nofollow\" href=\"http:\/\/heisenbug-piter.ru\/2020\/spb\/talks\/7emflctrgqk9ayyxj7cmel\/?utm_source=habr&amp;utm_medium=505994\">\u0434\u043e\u043a\u043b\u0430\u0434\u043e\u043c<\/a><\/noindex> \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0438 Heisenbug 2020 Piter. \u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e, \u043a\u0430\u043a \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0438 \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u0441\u0432\u043e\u0438\u043c\u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Java-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445!<\/p><\/blockquote>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/jugru\/blog\/505994\/\">habr.com<\/a><\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u043d\u0435 \u0447\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 Java. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441, \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435\u0442. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u044c \u0441\u0432\u043e\u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0441 Travis-CI \u0438 TeamCity \u043d\u0430 GitHub Actions, \u0438 \u0432\u043e\u0442 \u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0427\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Spring boot [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":85192,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-85191","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u043d\u0435 \u0447\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 Java. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441, \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435\u0442. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u044c \u0441\u0432\u043e\u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0441 Travis-CI \u0438 TeamCity \u043d\u0430 GitHub Actions, \u0438 \u0432\u043e\u0442 \u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0427\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Spring boot\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/krugi-ada-s-github-actions-stroim-ci-cd-pipeline-dlya-java-proekta\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u043d\u0435 \u0447\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 Java. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441, \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435\u0442. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u044c \u0441\u0432\u043e\u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0441 Travis-CI \u0438 TeamCity \u043d\u0430 GitHub Actions, \u0438 \u0432\u043e\u0442 \u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0427\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Spring boot\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/krugi-ada-s-github-actions-stroim-ci-cd-pipeline-dlya-java-proekta\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-13T23:42:41+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-02-01T09:41:39+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Die H\u00f6llenkreise mit GitHub Actions (CI\/CD-Pipeline f\u00fcr ein Java-Projekt erstellen) | ProHoster","description":"Ich baue h\u00e4ufig Pipelines f\u00fcr die Erstellung von Java-Projekten. Manchmal handelt es sich um Open Source, manchmal nicht. K\u00fcrzlich habe ich beschlossen, einige meiner Repositories von Travis-CI und TeamCity auf GitHub Actions zu migrieren, und das ist dabei herausgekommen. Was wir automatisieren wollen Zun\u00e4chst ben\u00f6tigen wir ein Projekt, das wir automatisieren m\u00f6chten. Lassen Sie uns eine kleine Anwendung mit Spring Boot erstellen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/krugi-ada-s-github-actions-stroim-ci-cd-pipeline-dlya-java-proekta","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0440\u0443\u0433\u0438 \u0430\u0434\u0430 \u0441 GitHub Actions (\u0441\u0442\u0440\u043e\u0438\u043c CI\/CD pipeline \u0434\u043b\u044f Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430) | ProHoster","og:description":"\u041c\u043d\u0435 \u0447\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 Java. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441, \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435\u0442. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u044c \u0441\u0432\u043e\u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0441 Travis-CI \u0438 TeamCity \u043d\u0430 GitHub Actions, \u0438 \u0432\u043e\u0442 \u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0427\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Spring boot","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/krugi-ada-s-github-actions-stroim-ci-cd-pipeline-dlya-java-proekta","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-13T23:42:41+00:00","article:modified_time":"2021-02-01T09:41:39+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"85191","title":null,"description":"","keywords":"","keyphrases":null,"primary_term":null,"canonical_url":"","og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 14:42:25","updated":"2022-09-28 06:32:26"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/85191","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=85191"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/85191\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/85192"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=85191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=85191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=85191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}