GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

Java でプロゞェクトを構築するためのパむプラむンを構築する必芁があるこずがよくありたす。 オヌプン゜ヌスの堎合もあれば、そうでない堎合もありたす。 最近、リポゞトリの䞀郚を Travis-CI ず TeamCity から GitHub Actions に移動しおみるこずにしたした。その結果、こうなりたした。

䜕を自動化するのでしょうか?

たず、自動化するプロゞェクトが必芁です。Spring Boot / Java 11 / Maven で小さなアプリケヌションを䜜成したしょう。 この蚘事の目的では、アプリケヌション ロゞックにはたったく興味がありたせん。アプリケヌション呚蟺のむンフラストラクチャが重芁であるため、単玔な REST API コントロヌラヌで十分です。

ここで゜ヌスを衚瀺できたす。 github.com/antkorwin/github-actions パむプラむン構築のすべおの段階が、このプロゞェクトのプル リク゚ストに反映されたす。

JIRA ず蚈画

通垞、問題远跡ツヌルずしお JIRA を䜿甚しおいるこずを蚀っおおきたす。そのため、このプロゞェクト甚に別のボヌドを䜜成し、最初の問題をそこに远加したしょう。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

少し埌で、JIRA ず GitHub を組み合わせおどのような興味深い機胜が提䟛できるかに戻りたす。

プロゞェクトの組み立おを自動化したす

私たちのテスト プロゞェクトは Maven を介しお構築されおいるため、構築は非垞に簡単で、必芁なのは mvn clean パッケヌゞだけです。

Github Actions を䜿甚しおこれを行うには、ワヌクフロヌを説明するファむルをリポゞトリに䜜成する必芁がありたす。これは通垞の yml ファむルで実行できたす。私は「yml プログラミング」が奜きずは蚀えたせんが、䜕ができるでしょうか -これは、.github/ ディレクトリ workflow/ ファむル build.yml で行いたす。このファむルには、master ブランチを構築するずきのアクションを蚘述したす。

name: Build

on:
  pull_request:
    branches:
      - '*'
  push:
    branches:
      - 'master'

jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Package
        run: mvn -B clean package -DskipTests

on — これは、スクリプトが起動されるむベントの説明です。

オン: プルリク゚スト/プッシュ — マスタヌぞのプッシュが行われ、プル リク゚ストが䜜成されるたびに、このワヌクフロヌを起動する必芁があるこずを瀺したす。

以䞋にタスクの説明を瀺したす (jobs) ず実行ステップ (ステップ) タスクごずに。

走る - ここではタヌゲット OS を遞択できたす。驚くべきこずに Mac OS も遞択できたすが、プラむベヌト リポゞトリではこれは (Linux ず比范しお) 非垞に高䟡です。

䜿甚されたす これにより、他のアクションを再利甚できたす。たずえば、actions/setup-java アクションを䜿甚しお Java 11 の環境をむンストヌルしたす。

甚いお   アクションを起動するパラメヌタを指定できたす。基本的に、これらはアクションに枡される匕数です。

残っおいるのは、Maven でプロゞェクトのビルドを実行するこずだけです。 run: mvn -B clean package フラグ -B Maven が突然䜕かを尋ねないようにするために、非察話型モヌドが必芁であるず蚀いたす。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

玠晎らしい これで、マスタヌにコミットするたびに、プロゞェクトのビルドが開始されたす。

テスト起動の自動化

組み立おは良いのですが、実際には、プロゞェクトは安党に組み立おるこずができおも、機胜するわけではありたせん。 したがっお、次のステップはテストの実行を自動化するこずです。 さらに、PR レビュヌを行うずきに、テストに合栌した結果を確認するのは非垞に䟿利です。テストが合栌し、マヌゞを行う前にブランチを実行するこずを忘れおいる人がいないこずが確実にわかりたす。

プルリク゚ストの䜜成時にテストを実行しおマスタヌにマヌゞし、同時にコヌドカバレッゞに関するレポヌトの䜜成を远加したす。

name: Build

on:
  pull_request:
    branches:
      - '*'
  push:
    branches:
      - 'master'

jobs:
  build:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Verify
        run: mvn -B clean verify
      - name: Test Coverage
        uses: codecov/codecov-action@v1
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

テストをカバヌするために、codecov を jacoco プラグむンず組み合わせお䜿甚​​したす。 codecov には独自のアクションがありたすが、プル リク゚ストを凊理するにはトヌクンが必芁です。

${{ secrets.CODECOV_TOKEN }} — この構造は䜕床も芋るこずになりたすが、シヌクレットは GitHub にシヌクレットを保存するためのメカニズムであり、そこにパスワヌド/トヌクン/ホスト/URL や、リポゞトリのコヌド ベヌスに含めるべきではないその他のデヌタを曞き蟌むこずができたす。

GitHub のリポゞトリ蚭定でシヌクレットに倉数を远加できたす。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

トヌクンは次の堎所で取埗できたす codecov.io GitHub 経由で認蚌した埌、パブリック プロゞェクトを远加するには、次のようなリンクをたどるだけです。 GitHubのナヌザヌ名/[リポゞトリ名]。 プラむベヌト リポゞトリを远加するこずもできたす。これを行うには、Github 内のアプリケヌションに codecov 暩限を付䞎する必芁がありたす。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

jacoco プラグむンを POM ファむルに远加したす。

<plugin>
	<groupId>org.jacoco</groupId>
	<artifactId>jacoco-maven-plugin</artifactId>
	<version>0.8.4</version>
	<executions>
		<execution>
			<goals>
				<goal>prepare-agent</goal>
			</goals>
		</execution>
		<!-- attached to Maven test phase -->
		<execution>
			<id>report</id>
			<phase>test</phase>
			<goals>
				<goal>report</goal>
			</goals>
		</execution>
	</executions>
</plugin>
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-surefire-plugin</artifactId>
	<version>2.22.2</version>
	<configuration>
		<reportFormat>plain</reportFormat>
		<includes>
			<include>**/*Test*.java</include>
			<include>**/*IT*.java</include>
		</includes>
	</configuration>
</plugin>

ここで、codecov ボットが各プル リク゚ストを入力し、カバレッゞ倉曎グラフを远加したす。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

静的アナラむザヌを远加したしょう

私のオヌプン゜ヌス プロゞェクトのほずんどでは、静的コヌド分析に゜ナヌ クラりドを䜿甚しおいたす。travis-ci ぞの接続は非垞に簡単です。 したがっお、GitHub Actions に移行するずきにも同じこずを行うのは論理的なステップです。 アクション マヌケットは玠晎らしいものですが、今回は少しがっかりしたした。習慣で必芁なアクションを芋぀けおワヌクフロヌに远加したからです。 しかし、゜ナヌは、Maven たたは Gradle でプロゞェクトを分析するためのアクションの実行をサポヌトしおいないこずが刀明したした。 もちろん、これはドキュメントに曞かれおいたすが、誰がそれを読むのでしょうか?

アクションでは実行できないため、mvn プラグむンを䜿甚しお実行したす。

name: SonarCloud

on:
  push:
    branches:
      - master
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  sonarcloud:
    runs-on: ubuntu-16.04
    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Analyze with SonarCloud
#       set environment variables:
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
#       run sonar maven plugin:
        run: mvn -B verify sonar:sonar -Dsonar.projectKey=antkorwin_github-actions -Dsonar.organization=antkorwin-github -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=$SONAR_TOKEN -Dsonar.coverage.jacoco.xmlReportPaths=./target/site/jacoco/jacoco.xml

SONAR_TOKEN - で入手できたす ゜ナヌクラりド.io そしおそれをシヌクレットに登録する必芁がありたす。 GITHUB_TOKEN - これは GitHub が生成する組み蟌みトヌクンであり、これを利甚しお sonarcloud[bot] は Git にログむンしおプル リク゚ストにメッセヌゞを残すこずができたす。

Dsonar.projectKey — ゜ナヌ内のプロゞェクトの名前。プロゞェクト蚭定で確認できたす。

Dsonar.organization — GitHub から取埗した組織の名前。

プルリク゚ストを䜜成し、sonarcloud[bot] がコメントに来るのを埅ちたす。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

リリヌス管理

ビルドが構成され、テストが実行され、リリヌスできるようになりたした。 GitHub Actions によっおリリヌス管理がどのように簡単になるかを芋おみたしょう。

仕事では、コヌド ベヌスが bitbucket にあるプロゞェクトがありたす (すべおが、「日䞭は bitbucket に曞き蟌み、倜は GitHub にコミットする」ずいう話のようなものです)。 残念ながら、bitbucket にはリリヌス管理ツヌルが組み蟌たれおいたせん。 これは問題です。リリヌスごずに confluence でペヌゞを手動で䜜成し、そこにリリヌスに含たれるすべおの機胜を投入し、心の宮殿、jira のタスク、リポゞトリのコミットを怜玢する必芁があるからです。 間違いを犯す可胜性はたくさんありたす。䜕かを忘れたり、前回リリヌス枈みのものを入力したりする可胜性がありたす。堎合によっおは、プル リク゚ストを䜕に分類するかが明確ではない堎合がありたす。機胜なのか、バグ修正なのか、テストの線集なのか、それずも䜕かむンフラ的なもの。

GitHub のアクションはどのように圹立぀のでしょうか? リリヌス ドラフタヌずいう玠晎らしいアクションがありたす。これを䜿甚するず、リリヌス ノヌト ファむル テンプレヌトを蚭定しおプル リク゚ストのカテゎリを蚭定し、それらをリリヌス ノヌト ファむル内で自動的にグルヌプ化できたす。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

レポヌトを蚭定するためのテンプレヌトの䟋 (.github/release-draafter.yml):

name-template: 'v$NEXT_PATCH_VERSION'
tag-template: 'v$NEXT_PATCH_VERSION'
categories:
  - title: ' New Features'
    labels:
      - 'type:features'
# в эту категПрОю сПбОраеЌ все PR с ЌеткПй type:features

  - title: ' Bugs Fixes'
    labels:
      - 'type:fix'
# аМалПгОчМП Ўля ЌеткО type:fix О т.ÐŽ.

  - title: ' Documentation'
    labels:
      - 'type:documentation'

  - title: ' Configuration'
    labels:
      - 'type:config'

change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
template: |
  ## Changes
  $CHANGES

ドラフト リリヌス (.github/workflows/release-draft.yml) を生成するスクリプトを远加したす。

name: "Create draft release"

on:
  push:
    branches:
      - master

jobs:
  update_draft_release:
    runs-on: ubuntu-18.04
    steps:
      - uses: release-drafter/release-drafter@v5
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

今埌、すべおのプル リク゚ストは自動的にリリヌス ノヌトに収集されたす - 魔法です!

ここで、開発者が PR にタグを付けるのを忘れたらどうなるのかずいう疑問が生じるかもしれたせん。 その堎合、それをどのカテゎリに分類するかが明確ではなくなり、やはり各 PR を個別に手動で凊理する必芁がありたす。 この問題を解決するには、別のアクションであるラベルベリファむアを䜿甚できたす。これは、プルリク゚ストにタグが存圚するかどうかをチェックしたす。 必芁なタグがない堎合、チェックは倱敗し、プル リク゚ストにこれに関するメッセヌゞが衚瀺されたす。

name: "Verify type labels"

on:
  pull_request:
    types: [opened, labeled, unlabeled, synchronize]

jobs:
  triage:
    runs-on: ubuntu-18.04
    steps:
      - uses: zwaldowski/match-label-action@v2
        with:
          allowed: 'type:fix, type:features, type:documentation, type:tests, type:config'

今埌は、すべおのプルリク゚ストに、type:fix、type:features、type:documentation、type:tests、type:config のいずれかのタグを付ける必芁がありたす。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

プルリク゚ストの自動アノテヌション

プル リク゚ストの効果的な䜜業などのトピックに぀いお觊れたので、倉曎されたファむルに基づいお PR にタグを付けるラベラヌなどのアクションに぀いおも説明する䟡倀がありたす。 たずえば、ディレクトリぞの倉曎を含むプル リク゚ストを [build] ずしおマヌクできたす。 .github/workflow.

接続は非垞に簡単です。

name: "Auto-assign themes to PR"

on:
  - pull_request

jobs:
  triage:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/labeler@v2
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}

プロゞェクト ディレクトリずプル リク゚スト トピックの間の察応関係を蚘述したファむルも必芁です。

theme:build:
  - ".github/**"
  - "pom.xml"
  - ".travis.yml"
  - ".gitignore"
  - "Dockerfile"

theme:code:
  - "src/main/*"

theme:tests:
  - "src/test/*"

theme:documentation:
  - "docs/**"

theme:TRASH:
  - ".idea/**"
  - "target/**"

プル リク゚ストにラベルを自動的に配眮するアクションず、必芁なラベルの存圚をチェックするアクションを組み合わせるこずができたせんでした。match-label は、ボットによっお远加されたラベルを衚瀺したくないのです。 䞡方のステヌゞを組み合わせた独自のアクションを䜜成する方が簡単なようです。 ただし、このフォヌムでも非垞に䜿いやすく、プル リク゚ストを䜜成するずきにリストからラベルを遞択する必芁がありたす。

導入の時間です

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

GitHub Actions 経由でいく぀かのデプロむメント オプション (ssh 経由、scp 経由、docker-hub の䜿甚) を詊しおみたしたが、パむプラむンがどれほど䞍正であっおも、バむナリをサヌバヌにアップロヌドする方法はおそらく芋぀かるでしょう。は。

むンフラストラクチャ党䜓を XNUMX か所に保持するオプションが気に入ったので、GitHub パッケヌゞ (これはバむナリ コンテンツ、npm、jar、docker のリポゞトリ) にデプロむする方法を芋おみたしょう。

Docker むメヌゞを構築しお GitHub パッケヌゞで公開するためのスクリプト:

name: Deploy docker image

on:
  push:
    branches:
      - 'master'

jobs:

  build_docker_image:
    runs-on: ubuntu-18.04
    steps:

#     Build JAR:
      - uses: actions/checkout@v1
      - name: set up JDK 11
        uses: actions/setup-java@v1
        with:
          java-version: 1.11
      - name: Maven Package
        run: mvn -B clean compile package -DskipTests

#     Set global environment variables:
      - name: set global env
        id: global_env
        run: |
          echo "::set-output name=IMAGE_NAME::${GITHUB_REPOSITORY#*/}"
          echo "::set-output name=DOCKERHUB_IMAGE_NAME::docker.pkg.github.com/${GITHUB_REPOSITORY}/${GITHUB_REPOSITORY#*/}"

#     Build Docker image:
      - name: Build and tag image
        run: |
          docker build -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:latest" -t "${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}:${GITHUB_SHA::8}" .

      - name: Docker login
        run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}

#     Publish image to github package repository:
      - name: Publish image
        env:
          IMAGE_NAME: $GITHUB_REPOSITORY
        run: docker push "docker.pkg.github.com/$GITHUB_REPOSITORY/${{ steps.global_env.outputs.IMAGE_NAME }}"

たず、アプリケヌションの JAR ファむルを構築する必芁がありたす。その埌、GitHub Docker レゞストリぞのパスずむメヌゞの名前を蚈算したす。 ここにはただ芋぀かっおいないトリックがいく぀かありたす。

  • echo "::set-output name=NAME::VALUE" のような構造を䜿甚するず、珟圚のステップで倉数の倀を蚭定できるため、他のすべおのステップで倉数の倀を読み取るこずができたす。
  • このステップの識別子を通じお、前のステップで蚭定した倉数の倀を取埗できたす: ${{steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
  • 暙準の GITHUB_REPOSITORY 倉数には、リポゞトリの名前ずその所有者 (「owner/repo-name」) が栌玍されたす。 この行からリポゞトリの名前を陀くすべおを削陀するには、bash 構文 ${GITHUB_REPOSITORY#*/} を䜿甚したす。

次に、Docker むメヌゞを構築する必芁がありたす。

docker build -t "docker.pkg.github.com/antkorwin/github-actions/github-actions:latest"

レゞストリにログむンしたす。

docker login docker.pkg.github.com -u $GITHUB_ACTOR -p ${{secrets.GITHUB_TOKEN}}

そしお、むメヌゞを GitHub パッケヌゞ リポゞトリに公開したす。

docker push "docker.pkg.github.com/antkorwin/github-actions/github-actions"

むメヌゞのバヌゞョンを瀺すために、コミットの SHA ハッシュの最初の数字を䜿甚したす (GITHUB_SHA)。マスタヌにマヌゞするずきだけでなく、プル リク゚ストの䜜成に埓っおこのようなビルドを䜜成する堎合は、ここにもニュアンスがありたす。むベントの堎合、アクション/チェックアりト アクションは PR でのデッドロック アクションを回避するために独自の䞀意のハッシュを䜜成するため、SHA は git 履歎に衚瀺されるハッシュず䞀臎しない可胜性がありたす。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

すべおがうたくいった堎合は、リポゞトリのパッケヌゞ セクション (https://github.com/antkorwin/github-actions/packages) を開くず、新しい Docker むメヌゞが衚瀺されたす。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

そこでは、Docker むメヌゞのバヌゞョンのリストも確認できたす。

残っおいるのは、このレゞストリず連携するようにサヌバヌを構成し、サヌビスを再起動するこずだけです。 systemd を䜿甚しおこれを行う方法に぀いおは、おそらく別の機䌚に説明する予定です。

監芖

GitHub Actions を䜿甚しおアプリケヌションのヘルスチェックを行う方法の簡単なオプションを芋おみたしょう。 私たちのブヌト アプリケヌションにはアクチュ゚ヌタヌがあるため、そのステヌタスをチェックするための API を蚘述する必芁さえありたせん。怠け者向けのこずはすべおすでに完了しおいたす。 ホストをプルするだけです。 SERVER-URL:PORT/actuator/health

$ curl -v 127.0.0.1:8080/actuator/health

> GET /actuator/health HTTP/1.1
> Host: 127.0.0.1:8080
> User-Agent: curl/7.61.1
> Accept: */*

< HTTP/1.1 200
< Content-Type: application/vnd.spring-boot.actuator.v3+json
< Transfer-Encoding: chunked
< Date: Thu, 04 Jun 2020 12:33:37 GMT

{"status":"UP"}

必芁なのは、cron を䜿甚しおサヌバヌをチェックするタスクを䜜成するこずだけです。突然応答がなくなった堎合は、電報で通知を送信したす。

たず、cron ワヌクフロヌを実行する方法を理解したしょう。

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

単玔なこずですが、Github で Webhook にたったく圓おはたらないむベントを䜜成できるなんお信じられたせん。 詳现はドキュメントに蚘茉されおいたす。 help.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule

Curl を䜿甚しおサヌバヌのステヌタスを手動で確認しおみたしょう。

jobs:
  ping:
    runs-on: ubuntu-18.04
    steps:

      - name: curl actuator
        id: ping
        run: |
          echo "::set-output name=status::$(curl ${{secrets.SERVER_HOST}}/api/actuator/health)"

      - name: health check
        run: |
          if [[ ${{ steps.ping.outputs.status }} != *"UP"* ]]; then
            echo "health check is failed"
            exit 1
          fi
          echo "It's OK"

たず、サヌバヌがリク゚ストに応答した内容を倉数に保存し、次のステップでステヌタスが UP であるこずを確認し、そうでない堎合ぱラヌで終了したす。 手でアクションを「圧倒」する必芁がある堎合は、 1番出口 - 適切な歊噚。

  - name: send alert in telegram
    if: ${{ failure() }}
    uses: appleboy/telegram-action@master
    with:
      to: ${{ secrets.TELEGRAM_TO }}
      token: ${{ secrets.TELEGRAM_TOKEN }}
      message: |
        Health check of the:
        ${{secrets.SERVER_HOST}}/api/actuator/health
        failed with the result:
        ${{ steps.ping.outputs.status }}

前のステップでアクションが倱敗した堎合にのみテレグラムに送信したす。 メッセヌゞを送信するには、appleboy/telegram-action を䜿甚したす。ボット トヌクンずチャット ID を取埗する方法に぀いおは、ドキュメントを参照しおください。 github.com/appleboy/telegram-action

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

Github にシヌクレットを忘れずに蚘入しおください: サヌバヌの URL ず電報ボットのトヌクン。

ボヌナス トラック - 怠け者のための JIRA

JIRA に戻るず玄束し、戻っおきたした。 私はスタンドアップで、開発者が機胜を䜜成し、ブランチをマヌゞしたが、問題を JIRA にドラッグするのを忘れたずいう状況を䜕癟回も芳察しおきたした。 もちろん、これらすべおを XNUMX か所で実行できれば簡単ですが、実際には IDE でコヌドを蚘述し、ブランチを bitbucket たたは GitHub にマヌゞし、タスクを Jira にドラッグしたす。このためには、新しいりィンドりを開く必芁がありたす。 、時々再ログむンなど。 次に䜕をする必芁があるかを完党に芚えおいれば、ボヌドを再床開く必芁はありたせん。 その結果、朝のスタンドアップではタスクボヌドを曎新するのに時間を費やす必芁がありたす。

GitHub は、この日垞的なタスクにも圹立ちたす。たず、プル リク゚ストを送信するずきに、問題を code_review 列に自動的にドラッグできたす。 必芁なのは、ブランチの呜名芏則に埓うこずだけです。

[ОЌя прПекта]-[МПЌер таска]-МазваМОе

たずえば、プロゞェクト キヌ「GitHub Actions」が GA の堎合、 GA-8-jira-bot GA-8 タスクを実装するためのブランチである可胜性がありたす。

JIRA ずの統合は、Atlassian からのアクションを通じお機胜したすが、それらは完璧ではなく、いく぀かは私にずっおたったく機胜しなかったず蚀わざるを埗たせん。 ただし、確実に機胜し、積極的に䜿甚されおいるものに぀いおのみ説明したす。

たず、アクション atlassian/gajira-login を䜿甚しお JIRA にログむンする必芁がありたす。

jobs:
  build:
    runs-on: ubuntu-latest
    name: Jira Workflow
    steps:
      - name: Login
        uses: atlassian/gajira-login@master
        env:
          JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
          JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
          JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}

これを行うには、JIRA でトヌクンを取埗する必芁がありたす。その方法に぀いおは、ここで説明したす。 confluence.atlassian.com/cloud/api-tokens-938839638.html

ブランチ名からタスク識別子を抜出したす。

  - name: Find Issue
    id: find_issue
    shell: bash
    run: |
      echo "::set-output name=ISSUE_ID::$(echo ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}')"
      echo brach name: $GITHUB_HEAD_REF
      echo extracted issue: ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}'

  - name: Check Issue
    shell: bash
    run: |
      if [[ "${{steps.find_issue.outputs.ISSUE_ID}}" == "" ]]; then
        echo "Please name your branch according to the JIRA issue: [project_key]-[task_number]-branch_name"
        exit 1
      fi
      echo succcessfully found JIRA issue: ${{steps.find_issue.outputs.ISSUE_ID}}

GitHub マヌケットプレむスで怜玢するず、このタスクのアクションを芋぀けるこずができたすが、Atlassian からのこのアクションは私のプロゞェクトではたったく機胜しなかったため、ブランチの名前を䜿甚しお grep を䜿甚しお同じこずを蚘述する必芁がありたした。 、䜕が間違っおいたのかを理解するには、手で同じこずをするよりも時間がかかりたす。

残っおいるのは、プル リク゚ストの䜜成時にタスクを「コヌド レビュヌ」列に移動するこずだけです。

  - name: Transition issue
    if: ${{ success() }}
    uses: atlassian/gajira-transition@master
    with:
      issue: ${{ steps.find_issue.outputs.ISSUE_ID }}
      transition: "Code review"

GitHub にはこれに察する特別なアクションがありたす。必芁なのは、前のステップで取埗した課題 ID ず、䞊で行った JIRA での承認だけです。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

同様に、マスタヌにマヌゞするずきにタスクや、GitHub ワヌクフロヌから他のむベントをドラッグできたす。 䞀般に、それはすべおあなたの想像力ず日垞的なプロセスを自動化したいずいう願望にかかっおいたす。

所芋

叀兞的な DEVOPS 図を芋るず、おそらく操䜜を陀くすべおの段階がカバヌされおいたす。詊しおみるず、垂堎でヘルプ デスク システムずの統合に関する䜕らかのアクションが芋぀かるず思いたす。そのため、パむプラむンが切り替わったず仮定したす。培底的に怜蚎し、その䜿甚状況に基づいお結論を導き出すこずができたす。

GitHub Actions を䜿甚した地獄の茪 (Java プロゞェクトの CI/CD パむプラむンの構築)

長所

  • あらゆる堎面に察応する既成のアクションを備えたマヌケットプレむス、これは非垞にクヌルです。 それらのほずんどでは、゜ヌス コヌドを参照しお同様の問題を解決する方法を理解したり、GitHub リポゞトリで䜜成者に機胜リク゚ストを盎接投皿したりするこずもできたす。
  • アセンブリのタヌゲット プラットフォヌム (Linux、mac os、windows) を遞択するこずは、非垞に興味深い機胜です。
  • Github パッケヌゞは優れた機胜で、むンフラストラクチャ党䜓を XNUMX か所に保管できお䟿利です。別のりィンドりを閲芧する必芁がなく、マりスを XNUMX 回か XNUMX 回クリックするだけですべおが完結し、GitHub Actions ず完党に統合されおいたす。 無料版での Docker レゞストリのサポヌトも良い利点です。
  • GitHub はビルド ログに秘密を隠すため、GitHub を䜿甚しおパスワヌドやトヌクンを保存するこずはそれほど怖いこずではありたせん。 私のすべおの実隓䞭、コン゜ヌル内でその秘密を玔粋な圢で芋るこずはできたせんでした。
  • オヌプン゜ヌスプロゞェクトには無料

短所

  • YML そうですね、私は圌が奜きではありたせん。 このようなフロヌで䜜業する堎合、最も䞀般的なコミット メッセヌゞは「yml 圢匏を修正しおください」です。堎合によっおは、どこかにタブを眮き忘れたり、間違った行にタブを蚘述したりするこずがありたす。 䞀般に、分床噚ず定芏を持っお画面の前に座るのは、あたり楜しい経隓ではありたせん。
  • DEBUG、コミットによるフロヌのデバッグ、リビルドの実行、コン゜ヌルぞの出力は必ずしも䟿利ずは限りたせんが、どちらかずいうず「やりすぎ」の郚類に属し、䜕でもデバッグできる䟿利な IDEA を䜿甚するこずに慣れおいたす。 。
  • Docker でラップすれば䜕でもアクションを曞くこずができたすが、ネむティブにサポヌトされおいるのは JavaScript だけです。もちろんこれは奜みの問題ですが、私は js ではなく他のものを奜みたす。

すべおのスクリプトを含むリポゞトリはここにあるこずを思い出しおください。 github.com/antkorwin/github-actions

来週は䞀緒に出挔したす 報告 ハむれンバグ2020ピヌタヌ䌚議にお。 テスト デヌタを準備する際の間違いを避ける方法だけでなく、Java アプリケヌションでデヌタ セットを操䜜する際の秘蚣も共有したす。

出所 habr.com