Githubアクションによる連続積分
連続的なインテグレーションは安いが、継続的に統合することは非常に高価である.NOWDays、それはすべてのそれらの反復タスクの世話を自動化されたソリューションなしでソフトウェア開発ライフサイクルを想像するのは難しい.我々の問題を解決することができる異なる技術のトンがあります、そして、我々がGithubアクションに集中するこのポストで.
Githubアクションの理解
Githubアクションは、イベントリポジトリで、あなたのコードリポジトリに正しく表示されます.イベント駆動と言って、特定のイベントが発生したときに一連のコマンドを実行できることを意味します.たとえば、誰かがリポジトリのプル要求を作成するたびに、ソフトウェアテストスクリプトを実行するコマンドを自動的に実行できます.イベントトリガーとは別に、プロシージャもスケジュールできます.
手続きはYAMLファイル
イベントはこのサイクルの出発点です.これは、ワークフローをトリガする活動であり、誰かが問題を作成したり、要求をプルしたり、特定のブランチへの変更をマージしたりするときに、Githubから発信することができます.また、それは使用可能です
ジョブは、実行されるステップのコレクションです
ジョブの各ステップはシェルコマンドまたはアクションである個々のタスクを表します.すべてのジョブが同じランナーで実行されるので、それはお互いにデータを共有する手順を可能にします.たとえば、ジョブの最初の手順では、コンテナイメージを構築することができますし、2番目の手順では、イメージをコンテナのレジストリにプッシュすることができます.データはワークフローデータをアーティファクトとして格納することでジョブ間で共有することもできます.Artifactは、ジョブが完了した後にデータを保持し、同じワークフロー内の別のジョブとそのデータを共有することができます.別の仕事でデータを使用するには、ちょうど成果物をダウンロードする必要があります.一般的な成果物のいくつかは、ログ出力、テスト結果、バイナリまたは圧縮ファイルとコードカバレッジ結果です.
公式ドキュメントごとに、アクションはスタンドアロンコマンドで、ジョブを作成する手順に組み合わされます.アクションはワークフローの最小のポータブルビルディングブロックであり、独自のアクションを作成するか、Githubコミュニティによって作成されたアクションを使用できます.ワークフローでアクションを使用するには、ステップとして含める必要があります.
我々が言及しなければならないもう一つの重要な概念は
WindowsとUbuntuランナーはAzureでホストされて、その後、Azureデータセンターと同じIPアドレス範囲を持ちます.MacOSランナーはGithub独自のMacOSクラウドでホストされています.各々のウインドウまたはUbuntuランナーは、2コアCPU、7 GBのRAMメモリと14 GBのSSDディスクスペースを持ちます.MacOSランナーには3コアCPU、14 GBのRAMメモリ、14 GBのSSDディスクスペースがあります.
価格の面では、無料プランでは、学習といくつかの小さなプロジェクトに十分な月に2000自動化分があります.あなたは、次の価格プランについての詳細を見つけることができますlink .
デモ
次のデモでは.NET REST APIアプリケーション.我々のタスクは、ソリューションに対して単体テストを実行し、それらがコンテナイメージとしてアプリケーションをパッケージ化し、コンテナレジストリにプッシュすると成功した場合.もちろん、我々は自動的にそれをプッシュしたり、要求をプルするときにすべてのことをしたい
ソースコードを見つけるhere . ご覧のようにワークフローは
最初の行はワークフローの名前を定義し、ワークフローを起動させるイベントを指定します.
The
明らかに、テストが失敗した場合、アプリケーションをビルドしてパッケージ化したくないので、2番目のジョブは最初の結果に依存します.
ワークフローは、ログイン資格情報のようないくつかの機密情報へのアクセスを必要とし、我々は確かにプレーンテキストとして格納する必要はありません.それは秘密が場に来たところです、彼らは倉庫レベルで定義されて、倉庫所有者によってだけ作成されることができます.秘密の値は表示されません、彼らは変更または削除することができます.コンテナのレジストリにはGitHub Packages パスワードとしてユーザ名とパット(個人アクセストークン)を認証します.このように、我々は1つの場所(我々のコードリポジトリ)ですべての資産を持ちます.
各コンテナイメージにはタグが必要です.ありがたいことに、Githubは環境変数の数を私たちに提供し、我々は
今、我々はアクションタブの下でGithubウェブコンソールを見ることができます.
ご覧のように、要約の下で、ワークフローのすべての仕事とその相互関係の素晴らしい概観があります.
単一のジョブをクリックすると、ジョブが構成されているすべての手順のリストが表示されます.また、任意のステップをクリックすることができますし、それがデバッグになると本当に役立つログ出力全体を取得します.
結論
以来、マイクロソフトはGitTubを取得して以来、GitHubだけでなく、偉大なソース管理管理ツールを作った新しい機能と機能を追加しているが、また非常に成熟したdevopsプラットフォーム.Githubアクションは非常に実用的で、それらをより小規模なプロジェクトのための大きな選択になり、継続的な統合を開始する使いやすいです.しかし、プロジェクトのために、彼らはまだAzureパイプラインまたはいくつかの他のエンタープライズ解決策として雲プロバイダーからの強力でありません.
Githubアクションの理解
Githubアクションは、イベントリポジトリで、あなたのコードリポジトリに正しく表示されます.イベント駆動と言って、特定のイベントが発生したときに一連のコマンドを実行できることを意味します.たとえば、誰かがリポジトリのプル要求を作成するたびに、ソフトウェアテストスクリプトを実行するコマンドを自動的に実行できます.イベントトリガーとは別に、プロシージャもスケジュールできます.
手続きはYAMLファイル
workflow
. ワークフローは1つ以上で構成されるjobs
これは同時に、または時系列的に実行することができます.各ジョブを使用するsteps
順序を制御するactions
実行されます.これらの動作は、ソフトウェアテスト、ビルなどを自動化するコマンドです.イベントはこのサイクルの出発点です.これは、ワークフローをトリガする活動であり、誰かが問題を作成したり、要求をプルしたり、特定のブランチへの変更をマージしたりするときに、Githubから発信することができます.また、それは使用可能です
repository dispatch webhook
外部イベントが発生したときにワークフローをトリガーします.ジョブは、実行されるステップのコレクションです
runner
. デフォルトでは、ワークフロー中のすべてのジョブが並行して実行されますが、ジョブが前の1つの結果に依存する状況があります.いくつかの簡単なタスクでは、1つのジョブだけでワークフローを作成できますが、より複雑なシナリオでは推奨されません.その場合、マルチジョブワークフローは移動する方法です.ジョブの各ステップはシェルコマンドまたはアクションである個々のタスクを表します.すべてのジョブが同じランナーで実行されるので、それはお互いにデータを共有する手順を可能にします.たとえば、ジョブの最初の手順では、コンテナイメージを構築することができますし、2番目の手順では、イメージをコンテナのレジストリにプッシュすることができます.データはワークフローデータをアーティファクトとして格納することでジョブ間で共有することもできます.Artifactは、ジョブが完了した後にデータを保持し、同じワークフロー内の別のジョブとそのデータを共有することができます.別の仕事でデータを使用するには、ちょうど成果物をダウンロードする必要があります.一般的な成果物のいくつかは、ログ出力、テスト結果、バイナリまたは圧縮ファイルとコードカバレッジ結果です.
公式ドキュメントごとに、アクションはスタンドアロンコマンドで、ジョブを作成する手順に組み合わされます.アクションはワークフローの最小のポータブルビルディングブロックであり、独自のアクションを作成するか、Githubコミュニティによって作成されたアクションを使用できます.ワークフローでアクションを使用するには、ステップとして含める必要があります.
我々が言及しなければならないもう一つの重要な概念は
runners
. 本質的にランナーはGitHubアクションランナーアプリケーションがインストールされているサーバーです.ランナーは利用可能なジョブをリッスンし、一度に1つのジョブを実行し、進捗状況、ログ、および結果をGithubに報告します.Githubによって提供されるホストランナーは、Ubuntu、Windows、およびMacOSに基づいており、ワークフローの各ジョブは、新鮮な仮想環境で動作します.トラフワークフローは、ランナー上で追加のツールとバイナリをインストールすることができます.いくつかの理由で別のオペレーティングシステムを必要とするか、または特定の設定を必要とする場合は、すべての環境の完全な制御を持って自己ホストランナーを使用することができます.しかし、Githubは、パブリックリポジトリのための自己ホストランナーをお勧めしません.WindowsとUbuntuランナーはAzureでホストされて、その後、Azureデータセンターと同じIPアドレス範囲を持ちます.MacOSランナーはGithub独自のMacOSクラウドでホストされています.各々のウインドウまたはUbuntuランナーは、2コアCPU、7 GBのRAMメモリと14 GBのSSDディスクスペースを持ちます.MacOSランナーには3コアCPU、14 GBのRAMメモリ、14 GBのSSDディスクスペースがあります.
価格の面では、無料プランでは、学習といくつかの小さなプロジェクトに十分な月に2000自動化分があります.あなたは、次の価格プランについての詳細を見つけることができますlink .
デモ
次のデモでは.NET REST APIアプリケーション.我々のタスクは、ソリューションに対して単体テストを実行し、それらがコンテナイメージとしてアプリケーションをパッケージ化し、コンテナレジストリにプッシュすると成功した場合.もちろん、我々は自動的にそれをプッシュしたり、要求をプルするときにすべてのことをしたい
master
枝が発生.ソースコードを見つけるhere . ご覧のようにワークフローは
.github/workflows
ファイルとしてディレクトリ.最初の行はワークフローの名前を定義し、ワークフローを起動させるイベントを指定します.
name: CI master
on:
push:
branches: [master]
pull_request:
branches: [master]
次はworkflow_dispatch
セクションでは、手動でGithubまたはトラフCLI上のアクションタブを使用してワークフローを実行できます.The
jobs
セクションは、タスクを定義し、実行順序を制御する主要な部分です.jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Test the solution
run: dotnet test
最初の属性はジョブの名前ですruns-on
インフラストラクチャ環境を指定するパラメータです.の下にsteps
セグメントは実際のタスクを定義します.The dotnet test
コマンドは、与えられた解決で単位テストを実行するのに用いられます.The dotnet test
コマンドはソリューションを構築し、ソリューションの各テストプロジェクトのテストホストアプリケーションを実行します.テストホストは、テストフレームワークを使用して、与えられたプロジェクトのテストを実行します.たとえば、MSTest、NUnit、またはXUnit、各テストの成功または失敗を報告します.すべてのテストが成功した場合、テストランナーは0を終了コードとして返します.テストが失敗した場合、1を返し、ワークフローを停止します.明らかに、テストが失敗した場合、アプリケーションをビルドしてパッケージ化したくないので、2番目のジョブは最初の結果に依存します.
build:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build container image
run: |
docker build -f ./dotnet-ci/Dockerfile -t ${{secrets.registry}}/${{github.repository}}:${{ github.run_number }} .
- name: Container registry login
uses: docker/[email protected]
with:
registry: ${{secrets.registry}}
username: ${{secrets.username}}
password: ${{secrets.password}}
- name: Push image to container registry
run: |
docker push ${{secrets.registry}}/${{github.repository}}:${{ github.run_number }}
属性needs
このジョブを待つtest
済むtest
成功すると、ワークフローはbuild
新しいランナーの仕事.ワークフローは、ログイン資格情報のようないくつかの機密情報へのアクセスを必要とし、我々は確かにプレーンテキストとして格納する必要はありません.それは秘密が場に来たところです、彼らは倉庫レベルで定義されて、倉庫所有者によってだけ作成されることができます.秘密の値は表示されません、彼らは変更または削除することができます.コンテナのレジストリにはGitHub Packages パスワードとしてユーザ名とパット(個人アクセストークン)を認証します.このように、我々は1つの場所(我々のコードリポジトリ)ですべての資産を持ちます.
各コンテナイメージにはタグが必要です.ありがたいことに、Githubは環境変数の数を私たちに提供し、我々は
run_number
. これは、リポジトリ内の特定のワークフローの各実行に固有の番号です.この番号は、ワークフローの最初の実行のために1で始まり、それぞれの新しい実行で増加します.このフローは、ワークフローを再実行すると変更されません.別の選択肢はコミットSHAでイメージをタグ付けすることです.run_id
または、意味的なバージョン管理を使用しますが、簡単にするためにrun_number
.今、我々はアクションタブの下でGithubウェブコンソールを見ることができます.
ご覧のように、要約の下で、ワークフローのすべての仕事とその相互関係の素晴らしい概観があります.
単一のジョブをクリックすると、ジョブが構成されているすべての手順のリストが表示されます.また、任意のステップをクリックすることができますし、それがデバッグになると本当に役立つログ出力全体を取得します.
結論
以来、マイクロソフトはGitTubを取得して以来、GitHubだけでなく、偉大なソース管理管理ツールを作った新しい機能と機能を追加しているが、また非常に成熟したdevopsプラットフォーム.Githubアクションは非常に実用的で、それらをより小規模なプロジェクトのための大きな選択になり、継続的な統合を開始する使いやすいです.しかし、プロジェクトのために、彼らはまだAzureパイプラインまたはいくつかの他のエンタープライズ解決策として雲プロバイダーからの強力でありません.
Reference
この問題について(Githubアクションによる連続積分), 我々は、より多くの情報をここで見つけました https://dev.to/cvitaa11/continuous-integration-with-github-actions-2mo5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol