web-dev-qa-db-ja.com

GitHubアクションを使用して特定のブランチでのみジョブを実行する

私はGitHubアクションに比較的慣れていないため、2つのジョブがあります。1つはテストを実行するジョブで、もう1つはプロジェクトをサーバーにデプロイするジョブです。

当然、すべてのブランチでテストを実行したいのですが、デプロイは、何かがマスターにプッシュされたときにのみ発生するはずです。

特定のブランチでジョブを実行する方法を見つけるのに苦労しています。特定のブランチでのみワークフロー全体を実行できることを知っていますが、これは「テスト」ワークフローと「展開」ワークフローがあることを意味します。

これは解決策のように聞こえますが、並行して実行されます。理想的な世界では、テストが最初に実行され、テストが成功した場合にのみ、展開ジョブが開始されます。これは、2つの個別のワークフローを使用する場合には当てはまりません。

どうすればこれを達成できますか?特定のブランチでjobsを実行することは可能ですか?

14
weakdan

現時点ではjobレベルの条件はありませんが、stepレベル- GitHubアクションのコンテキストと式の構文 を参照してください。

ブランチ名を取得するための現在の解決策は、GITHUB_REF環境変数-詳細は デフォルトの環境変数 および この質問 を参照してください。

まとめると、最後のリンクで承認された回答を使用する場合、ワークフローは次のようになります。

jobs:

 test:
  runs-on: ubuntu-latest
  steps:
  - name: Run tests
    run: ./my-tests.sh

 deploy:
  runs-on: ubuntu-latest
  needs: test
  steps:
  - name: Extract branch name
    Shell: bash
    run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF##*/})"
    id: extract_branch
  - name: Deploy
    run: ./deploy.sh
    if: steps.extract_branch.outputs.branch == 'master'

個別のスクリプトではなくワークフローファイルにすべてを保持したい場合は、特定のジョブの各ステップに常にifを追加できます。


私はそれが一時的な解決策/回避策であることを願っています、そしてジョブ条件はベータの終了前に追加される予定です。

0
Samira