MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
GitHub - Packagesのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
GitHub - Packages
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == GitHub Packagesは、GitHubが提供するソフトウェアパッケージホスティングサービスである。<br> ソースコードと同じリポジトリでパッケージを管理・公開・インストールできる。<br> <br> GitHub Packagesが対応しているレジストリは以下の通りである。<br> <br> <center> {| class="wikitable" |+ GitHub Packagesの対応レジストリ一覧 |- ! レジストリ !! 説明 |- | Container Registry(ghcr.io) || Dockerコンテナイメージ および OCIイメージをホスティングする。 |- | npm || JavaScriptパッケージをホスティングする。 |- | Maven / Gradle || Javaパッケージをホスティングする。 |- | NuGet || .NETパッケージをホスティングする。 |- | RubyGems || Rubyパッケージをホスティングする。 |} </center> <br> GitHub Packagesを利用するメリットを以下に示す。<br> <br> * ソースコードとパッケージを同一リポジトリで管理できる。 * GitHubのアクセス制御と統合されており、チームの権限管理が一元化できる。 * GitHub Actionsとの連携により、CI/CDパイプラインにパッケージ公開を組み込める。 * プライベートパッケージをリポジトリのアクセス権限に基づいて保護できる。 <br><br> == Container Registry (ghcr.io) == ghcr.ioはGitHubが提供するコンテナレジストリであり、DockerイメージおよびOCIイメージの管理に使用する。<br> <br> ==== 認証 ==== ghcr.ioへの認証には個人アクセストークン (Personal Access Token) を使用する。<br> <br> 下表に、必要なスコープを示す。<br> <br> <center> {| class="wikitable" |+ パーソナルアクセストークンのスコープ一覧 |- ! スコープ !! 説明 |- | <code>read:packages</code> || パッケージのダウンロードとメタデータの読み取りに必要なスコープ |- | <code>write:packages</code> || パッケージのアップロードと公開に必要なスコープ |- | <code>delete:packages</code> || パッケージの削除に必要なスコープ |} </center> <br> 個人アクセストークンは、GitHubの[Settings] - [Developer settings] - [Personal access tokens]から作成できる。<br> <br> ==== Dockerログイン ==== ghcr.ioにログインする。<br> <br> echo $CR_PAT | docker login ghcr.io -u <ユーザ名> --password-stdin <br> <code>CR_PAT</code> には個人アクセストークン、<code><ユーザ名></code> にはGitHubのユーザ名を指定する。<br> パスワードを標準入力から渡すことにより、コマンド履歴にトークンが残らないようにする。<br> <br> ==== イメージのプッシュとプル ==== ビルド済みのイメージにghcr.ioのタグを付けてプッシュする手順を以下に示す。<br> <br> # イメージにタグを付ける docker tag <イメージ名> ghcr.io/NAMESPACE/<イメージ名>:TAG # イメージをプッシュする docker push ghcr.io/NAMESPACE/<イメージ名>:TAG # イメージをプルする docker pull ghcr.io/NAMESPACE/<イメージ名>:TAG <br> <code>NAMESPACE</code> にはGitHubのユーザ名 または Organization名を指定する。<br> <code>TAG</code> には <code>latest</code> や バージョン番号を指定する。<br> <br> レイヤーの最大サイズは10[GB]、タイムアウトは10分である。<br> <br> ==== リポジトリの関連付け ==== コンテナイメージを特定のGitHubリポジトリに関連付けるには、Dockerfile内に以下のラベルを追加する。<br> <br> LABEL org.opencontainers.image.source=https://github.com/OWNER/REPO <br> このラベルを追加すると、ghcr.io上のパッケージページから対象リポジトリへのリンクが表示される。<br> また、リポジトリの可視性設定がパッケージに継承される。<br> <br> ==== 可視性設定 ==== コンテナイメージの可視性は、GitHubのPackage settingsから設定できる。<br> <br> <center> {| class="wikitable" |+ パッケージの公開範囲一覧 |- ! 公開範囲 !! 説明 |- | Public || 誰でもプルできる状態 |- | Private || アクセス権限を持つユーザのみプルできる状態 |} </center> <br> 可視性をPublicからPrivateに変更することは、不可逆な操作であることに注意する。<br> <br><br> == npm レジストリ == GitHub Packagesのnpmレジストリを使用すると、スコープ付きnpmパッケージを公開・インストールできる。<br> <br> ==== 認証と.npmrc設定 ==== npmレジストリへの認証には、<u>.npmrc</u> ファイルを使用する。<br> <br> プロジェクトルートに <u>.npmrc</u> ファイルを作成して、以下に示す内容を記述する。<br> <br> @NAMESPACE:registry=https://npm.pkg.github.com //npm.pkg.github.com/:_authToken=TOKEN <br> <code>NAMESPACE</code> にはGitHubのユーザ名 または Organization名を指定する。<br> <code>TOKEN</code> には <code>read:packages</code> スコープを持つ個人アクセストークンを指定する。<br> <br> ==== パッケージの公開 ==== GitHub Packagesのnpmレジストリでは、スコープ付きパッケージ名が必須である。<br> <br> <u>package.json</u> ファイル内の <code>name</code> フィールドを以下に示すように設定する。<br> <br> <syntaxhighlight lang="json"> { "name": "@NAMESPACE/PACKAGE-NAME", "version": "1.0.0", "publishConfig": { "registry": "https://npm.pkg.github.com" } } </syntaxhighlight> <br> 設定後、コマンドでパッケージを公開する。<br> <br> npm publish <br> ==== パッケージのインストール ==== <u>.npmrc</u> ファイルにレジストリ設定を追加した後、以下のコマンドでパッケージをインストールする。<br> <br> npm install @NAMESPACE/PACKAGE-NAME <br><br> == Maven レジストリ == GitHub PackagesのMavenレジストリを使用すると、JavaのMavenパッケージを公開・インストールできる。<br> <br> ==== 認証設定 ==== Mavenの認証情報は <u>~/.m2/settings.xml</u> ファイルに設定する。<br> <br> <syntaxhighlight lang="xml"> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"> <servers> <server> <id>github</id> <username>USERNAME</username> <password>TOKEN</password> </server> </servers> </settings> </syntaxhighlight> <br> <code>USERNAME</code> には GitHubのユーザ名、<code>TOKEN</code> には <code>read:packages</code> または <code>write:packages</code> スコープを持つ個人アクセストークンを指定する。<br> <br> ==== パッケージの公開 ==== <u>pom.xml</u> ファイルの <code>distributionManagement</code> セクションにリポジトリURLを設定する。<br> <br> <syntaxhighlight lang="xml"> <distributionManagement> <repository> <id>github</id> <name>GitHub OWNER Apache Maven Packages</name> <url>https://maven.pkg.github.com/OWNER/REPO</url> </repository> </distributionManagement> </syntaxhighlight> <br> 設定後、パッケージをデプロイするため、以下に示すコマンドを実行する。<br> <br> mvn deploy <br> <u>アーティファクトIDは、小文字のみが使用できることに注意する。</u><br> <br><br> ==== Gradleでの使用 ==== Gradleを使用する場合は、<u>build.gradle</u> ファイルにリポジトリと認証情報を設定する。<br> <br> <syntaxhighlight lang="groovy"> repositories { maven { url = uri("https://maven.pkg.github.com/OWNER/REPO") credentials { username = project.findProperty("gpr.user") ?: System.getenv("USERNAME") password = project.findProperty("gpr.key") ?: System.getenv("TOKEN") } } } </syntaxhighlight> <br><br> == NuGetレジストリ == GitHub PackagesのNuGetレジストリを使用すると、.NETのNuGetパッケージを公開・インストールできる。<br> <br> ==== パッケージの公開 ==== NuGetパッケージを公開するため、以下に示すコマンドを実行する。<br> <br> dotnet nuget push PACKAGE_NAME.nupkg \ --api-key <TOKEN> \ --source "https://nuget.pkg.github.com/OWNER/index.json" <br> <code>TOKEN</code> には <code>write:packages</code> スコープを持つ個人アクセストークンを指定する。<br> <br> ==== パッケージのインストール ==== <u>nuget.config</u> ファイルにGitHub Packagesのソースを追加する。<br> <br> <syntaxhighlight lang="xml"> <?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="github" value="https://nuget.pkg.github.com/OWNER/index.json" /> </packageSources> <packageSourceCredentials> <github> <add key="Username" value="USERNAME" /> <add key="ClearTextPassword" value="TOKEN" /> </github> </packageSourceCredentials> </configuration> </syntaxhighlight> <br> 設定後、dotnetコマンドでパッケージをインストールできる。<br> <br> dotnet add package <パッケージ名> <br><br> == RubyGemsレジストリ == GitHub PackagesのRubyGemsレジストリを使用すると、RubyのGemパッケージを公開・インストールできる。<br> <br> ==== パッケージの公開 ==== まず <u>~/.gem/credentials</u> ファイルに認証情報を設定する。<br> <br> <syntaxhighlight lang="yaml"> :github: Bearer TOKEN </syntaxhighlight> <br> 次に、Gemをビルドして公開するため、以下に示すコマンドを実行する。<br> <br> # Gemのビルド gem build PACKAGE_NAME.gemspec # GitHub Packagesへのプッシュ gem push --key github \ --host https://rubygems.pkg.github.com/NAMESPACE \ PACKAGE_NAME-VERSION.gem <br> ==== パッケージのインストール ==== Bundlerを使用してインストールする場合は、<u>Gemfile</u> ファイルに以下の設定を追加する。<br> <br> <syntaxhighlight lang="ruby"> source "https://rubygems.pkg.github.com/NAMESPACE" do gem "PACKAGE_NAME" end </syntaxhighlight> <br> 設定後、以下に示すコマンドを実行して、インストールする。<br> <br> bundle install <br><br> == GitHub Actionsとの連携 == GitHub ActionsからGitHub Packagesへのアクセスには <code>GITHUB_TOKEN</code> を使用できる。<br> <br> <code>GITHUB_TOKEN</code> を使用することにより、個人アクセストークンを別途作成せずにパッケージを公開できる。<br> <br> ==== Dockerイメージの自動公開 ==== Dockerイメージを自動的にghcr.ioに公開するワークフローの例を以下に示す。<br> <br> <syntaxhighlight lang="yaml"> name: Publish Docker Image on: push: branches: - main jobs: publish: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout repository uses: actions/checkout@v4 - name: Log in to the Container registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Docker image uses: docker/build-push-action@v5 with: context: . push: true tags: ghcr.io/${{ github.repository }}:latest </syntaxhighlight> <br> 下表に、主なアクションを示す。<br> <br> <center> {| class="wikitable" |+ Docker関連アクション一覧 |- ! アクション !! 説明 |- | <code>docker/login-action</code> || コンテナレジストリへのログインを行うアクション |- | <code>docker/build-push-action</code> || Dockerイメージのビルドとプッシュを行うアクション |} </center> <br> ==== npmパッケージの自動公開 ==== npmパッケージを自動的に公開するワークフローの例を以下に示す。<br> <br> <syntaxhighlight lang="yaml"> name: Publish npm Package on: release: types: [created] jobs: publish: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' registry-url: 'https://npm.pkg.github.com' scope: '@NAMESPACE' - name: Install dependencies run: npm ci - name: Publish package run: npm publish env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} </syntaxhighlight> <br> 環境変数 <code>NODE_AUTH_TOKEN</code> に <code>GITHUB_TOKEN</code> を設定することにより、認証を行う。<br> <br><br> == パッケージの管理 == GitHub Packagesのパッケージは、[リポジトリ]ページ または [Organization]ページから管理できる。<br> <br> ==== バージョン管理 ==== 公開したパッケージは複数バージョンを保持できる。<br> 各バージョンは個別に管理・削除が可能である。<br> <br> バージョン一覧は、[リポジトリ]ページの[Packages]セクション または [Organization]ページの[Packages]ページから確認できる。<br> <br> ==== アクセス権限 ==== パッケージのアクセス権限は以下に示す3段階で設定できる。<br> <br> <center> {| class="wikitable" |+ パッケージのアクセス権限 ! 権限 !! 説明 |- | Read || パッケージのダウンロードとメタデータの閲覧が可能 |- | Write || パッケージの公開と新バージョンのアップロードが可能 |- | Admin || 権限設定の変更、パッケージの削除、可視性の変更が可能 |} </center> <br> デフォルトでは、リポジトリのアクセス権限がパッケージに継承される。<br> <br> リポジトリ権限の継承は、パッケージの設定から無効化することもできる。<br> <br> ==== パッケージの削除と復元 ==== パッケージのバージョンは、GitHubのWeb UI または GraphQL APIを使用して削除できる。<br> <br> 削除したパッケージは30日以内であれば復元できる。<br> 復元には以下の条件が必要である。<br> <br> * 同じ名前空間とバージョン番号が現在使用されていないこと。 * 削除から30日以内であること。 <br> ==== 可視性の変更 ==== パッケージの可視性変更に関して、以下に示す重要な制限がある。<br> <br> * PublicからPrivateへの変更は不可逆である。 *: 1度Privateに変更すると、同じパッケージ名でPublicに戻すことはできない。 * PrivateからPublicへの変更は可能である。 *: ただし、Publicにした場合は全員がアクセスできる状態になることに注意する。 <br><br> == 課金 == GitHub Packagesの利用には、ストレージ容量とデータ転送量に応じた課金が発生する場合がある。<br> <br> ==== 無料枠 ==== 下表に、各プランの無料枠を示す。<br> <br> <center> {| class="wikitable" |+ GitHub Packages の無料枠 ! プラン !! ストレージ !! データ転送 (月間) |- | Free || 500[MB] || 1[GB] |- | Pro || 2[GB] || 10[GB] |- | Team || 2[GB] || 10[GB] |- | Enterprise || 50[GB] || 100[GB] |} </center> <br> 無料枠を超えた場合は追加費用が発生する。<br> <br> ==== GITHUB_TOKENでのデータ転送 ==== GitHub Actionsワークフロー内で <code>GITHUB_TOKEN</code> を使用して GitHub Packages にアクセスする場合、データ転送量は無料枠の割当を消費しない。<br> <br> これは、以下のケースに該当する。<br> <br> * ワークフロー内での <code>GITHUB_TOKEN</code> を使用したパッケージのプッシュ * ワークフロー内での <code>GITHUB_TOKEN</code> を使用したパッケージのプル <br> <u>個人アクセストークンを使用した場合は、通常通り割当が消費されることに注意する。</u><br> <br><br> == 参考リンク == * [https://docs.github.com/ja/packages GitHub Packages 公式ドキュメント] * [https://docs.github.com/ja/packages/working-with-a-github-packages-registry/working-with-the-container-registry Container Registry のドキュメント] * [https://docs.github.com/ja/packages/working-with-a-github-packages-registry/working-with-the-npm-registry npm レジストリのドキュメント] * [https://docs.github.com/ja/packages/working-with-a-github-packages-registry/working-with-the-apache-maven-registry Maven レジストリのドキュメント] * [https://docs.github.com/ja/packages/working-with-a-github-packages-registry/working-with-the-nuget-registry NuGet レジストリのドキュメント] * [https://docs.github.com/ja/packages/working-with-a-github-packages-registry/working-with-the-rubygems-registry RubyGems レジストリのドキュメント] <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Git]]
GitHub - Packages
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse