EC2に立てたJenkinsのソースコード管理でGitHubを使う方法


概要

AWS EC2に立てたJenkinsのソースコード管理でGitHubのprivateリポジトリを使う。
なかなかうまくいかなくてハマったので備忘録を兼ねてメモ。

環境

  • AWS EC2(OS: Amazon Linux 2)
  • Jenkins 2.235.1

1. Jenkinsにgitを認識させる

これに気付かずめっちゃハマった。

  • Jenkinsの管理 > Global Tool Configuration からGitを設定する
    • install済のgitのパスを指定する
    • 自動インストールを選択する
  • どうせgitは使うと思うので、サーバーにgitをinstallして設定した
$ sudo yum install -y git
$ git --version
git version 2.23.3
$ which git
/usr/bin/git

2. 公開鍵と秘密鍵を作成する

  • /var/lib/jenkins/.ssh/に鍵を作成する
    • 公開鍵: id_rsa_github.pub
    • 秘密鍵: id_rsa_github
  • パスフレーズはなしでOK
  • デフォルトだとjenkinsユーザーにスイッチできないのでrootで作成して所有者を変更する
    • /etc/passwd/を見るとjenkinsユーザーは/bin/false
// .sshディレクトリを作成する
$ cd /var/lib/jenkins/
$ sudo mkdir .ssh
$ sudo chmod 700 .ssh/
$ ls -la | grep ssh
drwx------  2 root    root       6 Jun 29 15:08 .ssh

// 鍵を作成する
$ sudo su -
# cd /var/lib/jenkins/.ssh/
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): id_rsa_github
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_rsa_github.
Your public key has been saved in id_rsa_github.pub.

// 所有者を変更
# chown jenkins:jenkins id_rsa_github.pub
# chown jenkins:jenkins id_rsa_github
# cd ../
# pwd
/var/lib/jenkins
# chown jenkins:jenkins .ssh/
# ls -la | grep ssh
drwx------  2 jenkins jenkins   52 Jun 29 15:14 .ssh
# exit

3. .ssh/configを作成する

  • id_rsa以外の名前で作成した場合はconfigで設定する必要あり
    • id_rsaの場合はデフォルトで見に行くので不要(のはず)
$ sudo touch .ssh/config
$ sudo vi .ssh/config
Host github.com
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_github
  User git

// 所有者を変更
$ sudo chown jenkins:jenkins .ssh/config

4. GitHubに公開鍵を登録する

  • pullできれば良いので、リポジトリのDeploy Keysに登録する
  • Settings > Deploy keys > Add deploy key

5. ssh接続の確認

  • サーバーからsshが通るか確認しておく
$ sudo -u jenkins ssh -T github.com
Hi tamorieeeen/repositpry_name! You've successfully authenticated, but GitHub does not provide shell access.

6. JenkinsのJobで設定する

  • ソースコード管理でGitを選択
  • リポジトリ
    • リポジトリURL: GitHubのClone with SSHのURL
    • 認証情報: なし
  • 今回はサーバー上でid_rsaを管理しているので認証情報はなしでOK

参考