web-dev-qa-db-ja.com

ComposerおよびGitHub上のプライベートリポジトリを使用してビルドサーバー上のVCSを使用する

私のcompsoser.jsonは、組織のGithubアカウントから2つのプライベートリポジトリを使用します。

{
    "name": "API",
    "repositories": [
      {
        "type": "vcs",
        "url": "[email protected]/company/private.git"
      },
      {
        "type": "vcs",
        "url": "[email protected]/company/private2.git"
      }
    ],
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": ">2.1.3",
        "doctrine/mongodb-odm": "dev-master",
        "doctrine/doctrine-mongo-odm-module": "dev-master",
        "company/private": "dev-master",
        "company/private2": "dev-master"
    }
}

SSHキーをセットアップし、ステージングサーバーの承認済みキーに追加しました。 git cloneを実行すると、完全に機能し、資格情報を要求しません。

ただし、composer updateを実行すると、composerはリポジトリにアクセスできないため、リポジトリの取得に失敗します。

これはビルドスクリプトの一部であるため、非インタラクティブな方法で実行されるため、資格情報を入力することはできず、これを自動化する必要があります。

ビルド中にcomposerがプライベートリポジトリにアクセスできるようにするにはどうすればよいですか?

26
Simon

キーファイルを使用してプライベートリポジトリにアクセスするようにcomposerを設定できます。

詳細: https://getcomposer.org/doc/articles/handling-private-packages-with-satis.md#security

14
michail_w

私は質問のタイトルが具体的にタイプ「vcs」の使用に言及していることを理解していますが、これはプライベートgitリポジトリを使用してプロジェクトをパッケージとして展開する 代替方法 です.

"repositories": [
  {
    "type": "package",
    "package": {
      "name": "company/private",
      "version": "0.1.0",
      "type": "package",
      "source": {
        "url": "[email protected]:/company/private.git",
        "type": "git",
        "reference": "master"
      }
    }
  }
],
"require": {
  "company/private": "*"
}

制限は、最新バージョンが必要な場合は、デプロイするたびにバージョン番号を手動で変更する必要があることです。ただし、これはその利点でもあります。

この方法でリポジトリを定義すると、特定のタグ付きバージョンを取得できます。この場合、タグ0.1.0のコミットはcomposer updateでプルされます。

GithubアカウントにデプロイするサーバーのSSHキーを追加する必要があります。

29
myol

元の質問のURLにコロンがありません:

"url": "[email protected]/company/private.git"

あるべき

"url": "[email protected]:/company/private.git"

私はちょうど同じ問題を抱えていたので、修正しました。

8
Stuart Cusack
"name": "{vendor}/{package-name}",    
"repositories": [
    {
        "type": "package",
        "package": {
            "name": "{vendor}/{package-name}",
            "version": "{arbitrary-version}",
            "type": "package",
            "source": {
                "url": "[email protected]:{github-username}/{github-repository}.git",
                "type": "git",
                "reference": "{branch}"
            }
        }
    }
]
"require": {
    "{vendor}/{package-name}": "*"
}

答えとガイダンスを本当に感謝しました。ただし、notは解決策を得ることができました。そして、私は答えがおそらくここで起こっているように見えることに関していくつかの追加の詳細を使用できると思います。

  • vendor:パッケージのcomposer.jsonで使用されるベンダー名。
  • パッケージ名:パッケージのcomposer.jsonにあるパッケージ名ユーザー。
  • 任意のバージョン:ランダムなバージョン番号。 GitHubにバージョンとして存在する必要はありません。
  • github-username:リポジトリが存在するGitHubユーザーアカウント。
  • github-repository: GitHubリポジトリ名。
  • branch:コードをチェックアウトするときに使用するGitHubブランチ。

私に最大の問題を与えた2つのことは、コロン(:)の後にスラッシュ(/)が続かない(しない?)ことでした。 urlの最後に.gitを置くことを忘れないでください。

推測と不確実性のポイント:

  1. package.nameメンバーを何か間違ったものに変更するとどうなるかわかりません。つまり、これがrequireのみの内部参照であるかどうかはわかりません。または、そこで何か他のことが起こる場合。
  2. ブランチが実際に何かを変更するかどうかはわかりませんし、テストする立場にありません。
4
Josh Bruce