無料でビルドを開始
CircleCI.comアカデミーブログコミュニティサポート

packagecloud へのパッケージのパブリッシュ

1+ year ago1 min read
クラウド
Server v4.x
Server v3.x
このページの内容

はじめに

packagecloud は、ホスティングされているパッケージのリポジトリサービスです。 packagecloud を使用すると、事前設定なしで npm、Maven (Java)、Python、apt、yum、RubyGem の各リポジトリをホスティングすることができます。

環境変数の設定

$PACKAGECLOUD_TOKEN の設定

CircleCI のプロジェクト設定で、packagecloud API トークンの値を含む環境変数を PACKAGECLOUD_TOKEN という名前で作成します。 この環境変数は、packagecloud API で直接認証する場合、または packagecloud CLI を使用して認証する場合に使用されます。

packagecloud CLI は、リポジトリとやり取りするときに、システムから自動的にこの環境変数を読み取ります。

なお、機密性のある環境変数を Git にチェックインした状態かつ暗号化した状態で維持したい場合は、 circleci/encrypted-files に記載されているプロセスに従ってください。

packagecloud:enterprise 用の $PACKAGECLOUD_URL の設定

packagecloud:enterprise をお使いの方は、$PACKAGECLOUD_URL のみを設定してください

これは、packagecloud:enterprise を使用している場合にのみ行う設定です。 CircleCI のプロジェクト設定で、$PACKAGECLOUD_URL 環境変数に packagecloud:enterprise のインストール用 URL を設定します。

packagecloud CLI のインストール

CircleCI で packagecloud CLI を使用するには、RubyGems を使用してインストールします。そのためには、.circleci/config.yml でパッケージをデプロイするように設定したジョブの下に、以下の run ステップを追加します。

- run:
   name: packagecloud CLI のインストール
   command: gem install package_cloud

CLI は、自動的に $PACKAGECLOUD_TOKEN 環境変数を使用して、packagecloud サービスに対して認証を行います。

依存関係のキャッシュの使用

各ビルドのこの依存関係をキャッシュするには、Gemfilepackage_cloud gem を追加し、 依存関係のキャッシュ に記載された CircleCI のガイダンスに従ってください。

packagecloud CLI を使ったパッケージのプッシュ

ビルドプロセスはパッケージのタイプによって異なりますが、パッケージを packagecloud リポジトリにプッシュする方法はきわめて単純です。 CircleCI のビルドからパッケージをリポジトリに追加するには、ユーザーの deploy 設定に packagecloud CLI を使用するステップを追加します。

以下に .circleci/config.yml ファイルのサンプル全体を示します。ここでは、Git リポジトリをチェック アウトし、make タスク (パッケージをビルドするように構成した任意のコマンド) を実行してから、パッケージを packagecloud リポジトリにデプロイします。

version: 2.1
defaults: &defaults
  working_directory: ~/repo
  docker:
    - image: cimg/ruby:3.1.2
      auth:
        username: mydockerhub-user
        password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
jobs:
  build:
    <<: *defaults
    steps:
      - checkout
      - run:
          name: Build the package
          command: make
      - persist_to_workspace:
          root: ~/repo
          paths: .
  deploy:
    <<: *defaults
    steps:
      - attach_workspace:
          at: ~/repo
      - run:
          name: Install packagecloud CLI
          command: gem install package_cloud
      - run:
          name: Push deb package
          command: package_cloud push example-user/example-repo/debian/jessie debs/packagecloud-test_1.1-2_amd64.deb
workflows:
  package-deploy:
    jobs:
      - build
      - deploy:
          requires:
            - build

npm パッケージのデプロイ

CircleCI ユーザーは、packagecloud でホスティングされている npm レジストリにパッケージを直接デプロイできます。

テストジョブの設定

このジョブは、NodeJS プロジェクト内でプロジェクトコードを取り出し、その依存関係をインストールし、さらにテストを実行します。

jobs:
  test:
    <<: *defaults
    steps:
      - checkout

      - restore_cache:
          keys:
          - v1-dependencies-.
          # 正確な一致が見つからない場合は、最新のキャッシュの使用にフォールバックします
          - v1-dependencies-

      - run: npm install
      - run:
          name: テストの実行
          command: npm test

      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-

      - persist_to_workspace:
          root: ~/repo
          paths: .

デプロイジョブの設定

次にデプロイジョブを設定します。 このジョブは、packagecloud npm リポジトリに対して認証およびパブリッシュを行います。

jobs:
...
  deploy:
    <<: *defaults
    steps:
      - attach_workspace:
          at: ~/repo
      - run:
          name: レジストリ URL の設定
          command: npm set registry https://packagecloud.io/example-user/example-repo/npm/
      - run:
          name: レジストリでの認証
          command: echo "//packagecloud.io/example-user/example-repo/npm/:_authToken=$PACKAGECLOUD_TOKEN" > ~/repo/.npmrc
      - run:
          name: パッケージのパブリッシュ
          command: npm publish
  • レジストリ URL の設定: このコマンドで、npm CLI によって使用される URL をレジストリに設定します。
  • レジストリでの認証: npm CLI によって使用される authToken に、プロジェクト設定で設定されている環境変数を設定します。
  • パッケージのパブリッシュ: packagecloud 上で構成された npm レジストリにパッケージをパブリッシュします。

packagecloud npm レジストリの URL の形式を以下に示します。

https://packagecloud.io/:username/:repo_name/npm/

.circleci/config.yml の全体は以下のようになります。

version: 2.1
defaults: &defaults
  working_directory: ~/repo
  docker:
    - image: cimg/node:19.0.1
      auth:
        username: mydockerhub-user
        password: $DOCKERHUB_PASSWORD  # context / project UI env-var reference
jobs:
  test:
    <<: *defaults
    steps:
      - checkout

      - restore_cache:
          keys:
          - v1-dependencies-.
          # 正確な一致が見つからない場合は、最新のキャッシュの使用にフォールバックします
          - v1-dependencies-

      - run: npm install
      - run:
          name: テストの実行
          command: npm test

      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-

      - persist_to_workspace:
          root: ~/repo
          paths: .
  deploy:
    <<: *defaults
    steps:
      - attach_workspace:
          at: ~/repo
      - run:
          name: Set registry URL
          command: npm set registry https://packagecloud.io/example-user/example-repo/npm/
      - run:
          name: Authenticate with registry
          command: echo "//packagecloud.io/example-user/example-repo/npm/:_authToken=$PACKAGECLOUD_TOKEN" > ~/repo/.npmrc
      - run:
          name: Publish package
          command: npm publish
workflows:
  test-deploy:
    jobs:
      - test
      - deploy:
          requires:
            - test

workflows セクションは、test ジョブと deploy ジョブを連結して、ビルド プロセス内の連続したステップにします。

packagecloud への npm パッケージのパブリッシュの詳細については、CircleCI のブログ記事 Publishing npm Packages Using CircleCI (CircleCI を使用した npm パッケージのパブリッシュ) をご覧ください。

packagecloud API の使用方法

packagecloud には、パッケージリポジトリを管理するための堅牢な API も用意されています。 API の詳細、パッケージをアップロードおよび削除する方法、複数のリポジトリにプロモートする方法については、 packagecloud API をご確認ください。

関連項目

アーティファクトの保存とアクセス


Suggest an edit to this page

Make a contribution
Learn how to contribute