Search Results for ""

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

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
defaults: &defaults
  working_directory: ~/repo
  docker:
    - image: circleci/ruby:2.3-jessie
jobs:
  build:
    <<: *defaults
    steps:
      - checkout
      - run:
          name: パッケージのビルド
          command: make
      - persist_to_workspace:
          root: ~/repo
          paths: .
  deploy:
    <<: *defaults
    steps:
      - attach_workspace:
          at: ~/repo
      - run:
          name: packagecloud CLI のインストール
          command: gem install package_cloud
      - run:
          name: deb パッケージのプッシュ
          command: package_cloud push example-user/example-repo/debian/jessie debs/packagecloud-test_1.1-2_amd64.deb
workflows:
  version: 2
  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
defaults: &defaults
  working_directory: ~/repo
  docker:
    - image: circleci/node:8.9.1
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: レジストリ 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
workflows:
  version: 2
  test-deploy:
    jobs:
      - test
      - deploy:
          requires:
            - test

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

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

packagecloud API の使用方法

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

関連項目

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