GitHub Actionsでのパッケージの公開とインストール

GitHub Actionsでのワークフローを、自動的にパッケージをGitHub Packagesに公開もしくはGitHub Packagesからインストールするように設定できます。

GitHub PackagesはGitHub Free、GitHub Pro、GitHub FreeのOrganization、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server、GitHub AEで利用できます。

GitHub ActionsとのGitHub Packagesについて

GitHub Actionsは、コードを保存するのと同じ場所でソフトウェア開発のワークフローを自動化し、プルリクエストやIssueで協力することを支援します。 個々のタスクを書き、アクションを呼び出し、それらを組み合わせてカスタムのワークフローを作成できます。 GitHub Actions では、エンドツーエンドの継続的インテグレーション (CI) と継続的デプロイメント (CD) 機能をリポジトリに直接ビルドすることができます。 詳しい情報については「GitHub Actionsについて」を参照してください。

ワークフローの一部としてパッケージの公開やインストールを行うことで、リポジトリのCI及びCDの機能を拡張できます。

GitHub 上のパッケージレジストリを認証する

GitHub Enterprise Server 上のパッケージレジストリに対して認証するには、認証のための個人アクセストークンではなく、GitHub Actions を有効化した際に GitHub Enterprise Server がリポジトリに対して自動的に作成する GITHUB_TOKEN を使用することをお勧めします。 これは、ワークフローが実行されるリポジトリ内のパッケージに対する読み取り及び書き込み権限を持っています。 フォークでは、 GITHUB_TOKEN には親リポジトリの読み取りアクセス権が付与されます。 詳しい情報については「GITHUB_TOKENでの認証」を参照してください。

{{secrets.GITHUB_TOKEN}}コンテキストを使って、ワークフロー中でこのGITHUB_TOKENを参照できます。 詳しい情報については「GITHUB_TOKENでの認証」を参照してください。

リポジトリが所有するパッケージに対する権限とパッケージアクセスについて

ノート: リポジトリが所有するパッケージには、パッケージの名前空間docker.pkg.github.comを使うRubyGems、npm、Apache Maven、NuGet、Gradle、Dockerパッケージが含まれます。

GitHub Actionsを有効化すると、GitHubはリポジトリにGitHub Appをインストールします。 GITHUB_TOKENシークレットは、GitHub Appインストールアクセストークンです。 このインストールアクセストークンは、リポジトリにインストールされたGitHub Appの代わりに認証を受けるために使うことができます。 このトークンの権限は、ワークフローを含むリポジトリに限定されます。 詳しい情報については「GITHUB_TOKENの権限」を参照してください。

GitHub Packagesを使用すると、GitHub Actionsワークフローで利用できるGITHUB_TOKENを通じてパッケージをプッシュしたりプルしたいできます。

アクションを使ったパッケージの公開

継続的インテグレーション (CI) フローの一環として、GitHub Actionsを使用してパッケージを自動的に公開できます。 この継続的デプロイメント (CD) に対するアプローチにより、コードが品質基準を満たしている場合に新しいパッケージの作成を自動化できます。 たとえば、開発者が特定のブランチにプッシュするたびに CI テストを実行するワークフローを作成してはいかがでしょう。 テストにパスすると、このワークフローは新しいパッケージバージョンをGitHub Packagesに公開できます。

パッケージのクライアントによって、設定のステップは様々です。 GitHub Actionsのワークフローの設定に関する一般的な情報については、「ワークフローの設定」を参照してください。

以下の例では、GitHub Actionsを使用してアプリケーションのビルドとテストを行い、それから自動的にDockerイメージを作成してGitHub Packagesに公開する方法を示しています。

  • リポジトリに新しいワークフローファイル (.github/workflows/deploy-image.yml など) を作成し、以下のYAMLを追加します。

    YAML
    name: Create and publish a package
    on:
      push:
        branches: ['release']
    jobs:
      run-npm-build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - name: npm install and build webpack
            run: |
              npm install
              npm run build
          - uses: actions/upload-artifact@main
            with:
              name: webpack artifacts
              path: public/
    
      run-npm-test:
        runs-on: ubuntu-latest
        needs: run-npm-build
        strategy:
          matrix:
            os: [ubuntu-latest]
            node-version: [12.x, 14.x]
        steps: 
          - uses: actions/checkout@v2
          - name: Use Node.js ${{ matrix.node-version }}
            uses: actions/setup-node@v1
            with:
              node-version: ${{ matrix.node-version }}
          - uses: actions/download-artifact@main
            with:
              name: webpack artifacts
              path: public
          - name: npm install, and test
            run: |
              npm install
              npm test
            env:
              CI: true
    
      build-and-push-image:
        runs-on: ubuntu-latest
        needs: run-npm-test 
        steps:
          - name: Checkout
            uses: actions/checkout@v2
          - name: Log in to GitHub Docker Registry
            uses: docker/login-action@v1
            with:
              registry: docker.pkg.github.com
              username: ${{ github.actor }}
              password: ${{ secrets.GITHUB_TOKEN }}
          - name: Build container image
            uses: docker/build-push-action@v2
            with:
              push: true
              tags: |
                docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
                docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.ref }}

    上記に関連する設定については、次の表で説明しています。

    on:
      push:
        branches: ['release']
    releaseというブランチに変更をプッシュするたびに、Create and publish a packageワークフローを実行するよう設定します。
    run-npm-build:
      runs-on: ubuntu-latest
      steps:
        - uses: actions/checkout@v2
        - name: npm install and build webpack
          run: |
            npm install
            npm run build
        - uses: actions/upload-artifact@main
          with:
            name: webpack artifacts
            path: public/
    このジョブではNPMをインストールし、それをアプリケーションのビルドに使用します。
    run-npm-test:
      runs-on: ubuntu-latest
      needs: run-npm-build
      strategy:
        matrix:
          os: [ubuntu-latest]
          node-version: [14.x]
      steps:
        - uses: actions/checkout@v2
        - name: Use Node.js ${{ matrix.node-version }}
          uses: actions/setup-node@v1
          with:
            node-version: ${{ matrix.node-version }}
        - uses: actions/download-artifact@main
          with:
            name: webpack artifacts
            path: public
        - name: npm install, and test
          run: |
            npm install
            npm test
          env:
            CI: true
    このジョブではnpm testを使用してコードをテストします。 needs: run-npm-buildコマンドにより、このジョブをrun-npm-buildジョブに依存するようにします。
      build-and-push-image:
        runs-on: ubuntu-latest
        needs: run-npm-test
    このジョブはパッケージを公開します。 needs: run-npm-testコマンドにより、このジョブをrun-npm-testジョブに依存するようにします。
    - name: Log in to GitHub Docker Registry
      uses: docker/login-action@v1
      with:
        registry: docker.pkg.github.com
        username: ${{ github.actor }}
        password: ${{ secrets.GITHUB_TOKEN }}
    パッケージを公開するアカウントとパスワードを使ってレジストリにログインするLog in to GitHub Docker Registryという新しいステップを作成します。 いったん公開されると、パッケージはここで定めたアカウントが所有することになります。
    - name: Build container image
    Build container imageという新しいステップを作成します。 このステップは、build-and-push-imageジョブの一部として実行されます。
    uses: docker/build-push-action@v2
    Dockerのbuild-push-actionアクションを使用して、リポジトリのDockerfileを元にイメージをビルドします。 ビルドが成功すると、イメージをGitHub Packagesにプッシュします。
    with:
    必要なパラメータをbuild-push-actionアクションに送信します。 これは以降の行で定義されます。
    push: true
    ビルドに成功したら、このイメージをレジストリにプッシュします。
    tags: |
    docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
    docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.ref }}
    コミットSHAとgit ref(たとえばこのパッケージを作成するのに使われたブランチの名前)で、公開されたパッケージにタグ付けします。
    • この新しいワークフローは、リポジトリのreleaseという名前のブランチに変更をプッシュするたびに自動的に実行されます。 [Actions] タブで、この進捗を表示できます。
    • ワークフローが完成すると、その数分後にリポジトリで新しいパッケージが表示されます。 使用可能なパッケージを見つけるには、「リポジトリのパッケージを表示する」を参照してください。

    アクションを使ったパッケージのインストール

    GitHub Actionsを使い、CIフローの一部としてパッケージをインストールできます。 たとえば、開発者がコードをプルリクエストにプッシュすると、いつでもワークフローがGitHub Packagesによってホストされているパッケージをダウンロードしてインストールすることで、依存関係を解決するようにワークフローを設定できます。 そして、ワークフローはその依存関係を必要とするCIテストを実行できます。

    GitHub Actionsを通じてGitHub Packagesがホストするパッケージをインストールするには、GITHUB_TOKENを使う際に最小限の設定もしくは追加の認証が必要です。

    パッケージのクライアントによって、設定のステップは様々です。 GitHub Actionsのワークフローの設定に関する一般的な情報については、「ワークフローの設定」を参照してください。

このドキュメントは役立ちましたか?プライバシーポリシー

これらのドキュメントを素晴らしいものにするのを手伝ってください!

GitHubのすべてのドキュメントはオープンソースです。間違っていたり、はっきりしないところがありましたか?Pull Requestをお送りください。

コントリビューションを行う

OR, コントリビューションの方法を学んでください。

問題がまだ解決していませんか?

GitHubコミュニティで質問するサポートへの連絡