GITHUBアクションであなたのフロントエンドにCIを加える方法
17274 ワード
アルバシルヴェンテ💃🏼
今週、私は、私がどのようにISを自動化し始めたかについて、あなたに話すことについて考えました!Mybugプロジェクトこの投稿では、簡単なワークフローでCIを作成するためにGithubアクションを使用する方法を教えてください🤗閉じるこの動画はお気に入りから削除されています💜 dawntraoz.com/blog/how-to-ad…
午後18時15分- 2020年8月26日
このポストでは、どのように簡単にGitHubアクションの助けを借りて継続的な統合を開始することを示したい.
導入
我々が始める前に、我々がポストについて話すつもりである概念を批評することはうれしいです.
連続積分とは
連続的な統合(CI)は開発者が頻繁に共有リポジトリにコードを統合開発者です.理想的なケースは、各統合(マージ)は、自動ビルドとテストによって検証することができます.
GithubアクションとGithubワークフローとは
Githubアクションを使用すると、コードを格納するのと同じ場所にソフトウェア開発ワークフローを自動化できます.https://github.com/ . また、プルの要求や問題に協力します.それらを使用すると、エンドツーエンドのCIと継続的な配置(CD)機能を直接リポジトリに構築できます.
コミュニティによって共有されたアクションを自分自身のアクション、または使用してカスタマイズできますmarketplace .
ワークフローは、カスタム自動化されたプロセス、個々のタスク(動作)の組み合わせであり、あなたの倉庫でビルド、テスト、パッケージ、リリース、または展開することができます.
独自のワークフローを構成するには、リポジトリ内のYAMLファイルを作成する必要があります.
私は今オープンソースプロジェクトをつくっているので、一緒に仕事を始める頃には、仕事のCIを持つことが重要です.なぜ?そのような方法で、我々はすべて同じコードとガイドラインで働きます.
しかし、私は、それがどのようにそれをセットアップすることができるかについて見た後に、私はこれから私がすべての私のプロジェクトでそれを使うつもりであると言いさえしなければなりません.閉じるこの動画はお気に入りから削除されています💜
プロジェクトの準備
ワークフローを設定するには、継続的な統合プロセスを自動化することができます.
私の場合、ESPINTで構成された規則とJESTでの単体テストが各統合で合格することを確認したいです.これを行うには、次のスクリプトをパッケージに作成しました.JSON :
"lint": "eslint --ext .js, .vue --ignore-path .gitignore ."
"test:unit": "jest"
また、私のプロジェクトが別のオペレーティングシステムで動作することを確認したいので、追加する必要がありました.GITAttributeファイルを使用して、OS間の改行形式を使用しないようにします.# Enforce Unix newlines
* text=auto eol=lf
独自のワークフローの設定
この記事のために、私はisを説明するつもりです!MyBugの設定はnuxtjsで作られていますが、同じ環境(ノード)で構築されているのでJavascriptプロジェクトにも適用できます.
YAMLファイルを作成するには、次の2つのオプションがあります.
1 -私たちのGitHubリポジトリに移動し、アクションタブをクリックすると、あなたが開始するのを助けることができるワークフローの提案が表示されます.あなたは最高のプロジェクトに合わせて、このワークフローボタンを設定するをクリックして1つを選択することができます.
Both options will end with a YAML file in the path .github/workflows/CI.yml.
ciの設定から始めましょう.YMLファイル.
まず、名前を付けて、ワークフローを実行するイベントを選択します.
# Name your workflow
name: CI
# Set on which events you want run the actions.
# In this case the workflow will run on push for master and on pull request for master and develop branches
on:
push:
branches: [ master ]
pull_request:
branches: [ master, develop ]
PRをマスターまたは開発するたびに実行するワークフローは、シーケンシャルまたは並列に実行できる1つ以上のジョブで構成されます.エーworkflow job 同じランナーで実行するステップのセットですrunner GitHubがジョブを実行するために提供するホスト仮想環境.
Although it also gives us the possibility of doing so in our own self-hosted environment.
私のプロジェクトを別のオペレーティングシステム(Windows、Linux、MacOS)で同じノードバージョンで実行したかったのでstrategy これはジョブのビルド行列を作成します.
jobs:
# This workflow contains a job called "integration"
integration:
# A strategy that defines different variations of an environment to run each job in.
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node: [12]
# The runners that the job will run on
runs-on: ${{ matrix.os }}
ランナーを設定すると、統合ジョブでフォローしたい手順を定義できます.エーstep コマンドを実行し、セットアップタスクを実行するか、リポジトリ内でアクションを実行できます.各ステップでは以下のようなプロパティーを定義します:
Githubに表示する名前
を使用して、動作によって定義されたキー/値のペアを渡すために実行するアクションを指定します
条件が満たされない限り、ステップが動くのを防ぐ
実行し、OSシェルでコマンドを実行するには
So when we have to change the node version we have to do it only in one place.
ノードが設定されると、ワークフローにはリポジトリへのアクセスが必要ですcheckout .
jobs:
integration:
# ...
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Setup Node.js environment
uses: actions/[email protected]
with:
node-version: ${{ matrix.node }}
- name: Checkout master branch
uses: actions/checkout@v2
しかし、我々は効果的な方法でそれをしたいので、いくつかのキャッシュを我々のnodeoundモジュールに加えましょう.そのためにcache キャッシュされるフォルダパスを指定する動作( nodeound module )と、キャッシュを復元して保存するための明示的なキー(パッケージロック. JSON ).
手順で利用可能なif条件を使用すると、このキャッシュアクションの出力(キャッシュHit -一致キーを示すBoolean)がtrueかfalseであるかどうかを確認できます.
jobs:
integration:
# ...
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# ... Before steps ...
- name: Cache node_modules
uses: actions/[email protected]
with:
# A list of files, directories, and wildcard patterns to cache and restore
path: node_modules
# An explicit key for restoring and saving the cache
key: ${{ matrix.os }}-node-v${{ matrix.node }}-deps-${{ hashFiles(format('{0}{1}', github.workspace, '/package-lock.json')) }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm install
# ... After steps ...
コマンドを実行する手順を作成します.NPM Run LintとNPM Run Test : Unit :各ステップは、エラーを与えたりコマンドを実行したりしない場合、それぞれのステップが負または正の応答を行います.
さらに、我々がテストをしたので、我々は我々が成し遂げたコード報道を示すために特に興奮しています.そういうわけで、我々は行動を使います:codecov/codecov-action . を使ってhttps://www.codecov.io/ ウェブサイトは、増加または減少の範囲で我々のプル要求の歴史を持ちます.また、私たちは私たちのカバレッジの割合を表示することができますreadme.md , 追加
<img src="[https://codecov.io/gh/](https://codecov.io/gh/)<GitHub_name>/<GitHub_repo>/branch/master/graph/badge.svg?token=<your_token>" />
次のようになります. jobs:
integration:
# ...
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# ... Before steps ...
- name: Run ESLint
run: npm run lint
- name: Run unit tests
run: npm run test:unit
- name: Code coverage
uses: codecov/[email protected]
ワークフローの各セクションを別々に見たら、ここで完全なCIを残します.YMLファイルので、すべてのプロジェクトで使用することができます!# Name your workflow
name: CI
# Set on which events you want run the actions.
# In this case the workflow will run on push for master and on pull request for master and develop branches
on:
push:
branches: [ master ]
pull_request:
branches: [ master, develop ]
jobs:
# This workflow contains a job called "integration"
integration:
# A strategy that defines different variations of an environment to run each job in.
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node: [12]
# The runners that the job will run on
runs-on: ${{ matrix.os }}
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Setup Node.js environment
uses: actions/[email protected]
with:
node-version: ${{ matrix.node }}
- name: Checkout master branch
uses: actions/checkout@v2
- name: Cache node_modules
uses: actions/[email protected]
with:
# A list of files, directories, and wildcard patterns to cache and restore
path: node_modules
# An explicit key for restoring and saving the cache
key: ${{ matrix.os }}-node-v${{ matrix.node }}-deps-${{ hashFiles(format('{0}{1}', github.workspace, '/package-lock.json')) }}
- name: Install dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: npm install
- name: Run ESLint
run: npm run lint
- name: Run unit tests
run: npm run test:unit
- name: Code coverage
uses: codecov/[email protected]
私は、それが役に立ちました、そして、あなたが何か新しいことを学ぶことなくこのポストを去らないことを望みます.あなたが何か疑問を持っている場合は、それを読んでいただきありがとうございますIf you want to use more badges as the one for the coverage, check this website: https://badgen.net/ (it's amazing!)
Reference
この問題について(GITHUBアクションであなたのフロントエンドにCIを加える方法), 我々は、より多くの情報をここで見つけました https://dev.to/dawntraoz/how-to-add-ci-to-your-frontend-with-github-actions-nuxtjs-case-study-4fleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol