したがって、次の状況が発生します。プロジェクトごとに専用ユーザーがいるサーバー(例:foo
)と、jenkins
ユーザーとして実行されるjenkinsサーバー。 foo
ユーザーのSSHキーペアを生成し、公開キーをデプロイキーとしてgithubリポジトリに追加しました。 (私はfoo
ユーザーでリポジトリのクローンを作成できることを確認しました)
Jenkinsでは、「ManageJenkins」>「ManageCredentials」で、ユーザー名「foo」と「Global」スコープのfoo
の秘密鍵を持つ「SSHusernamewithprivatekey」として認証を設定します。
そこで、Jenkinsジョブを正しいワークスペース(たとえば、ユーザーfoo
の完全な所有権を持つ/home/foo/deployment
)と資格情報「foo」を使用します。 「ソースコード管理」には、リポジトリのSSH URL([email protected]:foo/foo.gitなど)を使用したかったのですが、アクセス許可の問題があることがすぐに通知されます。
Failed to connect to repository : Command "git -c core.askpass=true ls-remote -h [email protected]:foo/foo.git HEAD" returned status code 128:
stdout:
stderr: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
HttpsバージョンのURL( https://github.com/foo/foo.git )を使用すると、エラーは表示されなくなりますが、ジョブを実行すると、コンソール出力に次のエラーが表示されます。 :
Started by user developer
[EnvInject] - Loading node environment variables.
Building in workspace /home/foo/deployment
Cloning the remote Git repository
Cloning repository https://github.com/foo/foo.git
> git init /home/foo/deployment # timeout=10
ERROR: Error cloning remote repo 'Origin'
hudson.plugins.git.GitException: Could not init /home/foo/deployment
[long stacktrace]
Caused by: hudson.plugins.git.GitException: Command "git init /home/foo/deployment" returned status code 1:
stdout:
stderr: /home/foo/deployment/.git: Permission denied
[long stacktrace]
ERROR: null
Finished: FAILURE
キーペアはパスフレーズを使用していません。これを最初に機能させる場合は、パスフレーズを追加したいと思います。 Jenkinsは、Ubuntu 14.04.2 LTS(GNU/Linux 3.13.0-65-generic x86_64)ボックスで実行されます。
ここで何が欠けていますか?私が提供した資格情報が使用されていないようです。これが、アクセス許可で爆発する理由を説明しています。しかし、なぜそれらが使用されていないのか分かりませんか?そして、なぜgit@
URLを使用できないのですか?
git init
でパーミッションの問題が発生するため、/home/foo/deployment
で手動で実行しましたが、Jenkinsジョブを再実行すると、git fetch
でチョークが発生し、パーミッションの問題が発生します。
ああ、とてもばかげた私。 SSHユーザーエージェントは、明らかにjenkins
ユーザーがfoo
としてリモートリポジトリに接続することのみを許可しますが、ローカルファイルシステムに書き込むためのアクセス許可を付与しません。