0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

jenkinsでgithubからクローンする

Posted at

はじめに

船井総研デジタルのoswです。業務でjenkinsに触れることになったので学習記録を残します。参考になる方がいらっしゃれば幸いです。

学習環境

  • Windows 11 (WSL2 Ubuntu)
  • jenkins 2.387.1 (AWS EC2)

githubからクローンする方法

jenkinsでgithubからクローンするには大きく分けて次の方法があるようです。jenkinsに限らず、個人で扱う場合は1の方法でも良いかもしれませんが、セキュリティ的な観点ではDeploy keyを登録して個別にアクセス許可を与える方が良さそうです。

  1. 全てのリポジトリ(public / private)にアクセス可能な設定をする
    1. jenkinsユーザの公開鍵をgithubに登録する
    2. Personal Access Tokenを登録する
  2. 特定のリポジトリ(public / private)にアクセス可能な設定をする
    1.アクセスしたいリポジトリにDeploy keyを登録する

全てのリポジトリ(public / private)にアクセス可能な設定をする

jenkinsユーザの公開鍵をgithubに登録する

こちらは普段からgithubで公開鍵認証をしてる方なら直感的にわかる方法かと思います。jenkinsのジョブが走る際、ジョブの実行ユーザはjenkinsのようです。

そのため、jenkinsユーザの公開鍵を作成し、それをgithubに登録します。ただ、jenkinsユーザはログインシェルが設定されていないため一時的に設定し、用が済んだら元に戻しておきます。

別ユーザで鍵を作成、chownなどしてからjenkinsユーザの.sshに入れても良いと思います。

# jenkinsユーザのログインシェルを確認する(/bin/false なのでjenkinsユーザに切り替えられない)
$ sudo cat /etc/passwd | grep jenkins
jenkins:x:995:993:Jenkins Automation Server:/var/lib/jenkins:/bin/false

# シェルを変更するため chsh をインストールする。EC2環境ではこれを利用しますが、その他は chsh を指定していただければ良いかと思います
$ sudo yum -y install util-linux-user

# jenkinsユーザのログインシェルを設定する
$ sudo chsh -s /bin/bash jenkins

# jenkinsユーザのログインシェルを確認する(/bin/bash なのでjenkinsユーザとしてログイン可能)
$ sudo cat /etc/passwd | grep jenkins
jenkins:x:995:993:Jenkins Automation Server:/var/lib/jenkins:/bin/bash

# jenkinsユーザに切り替え
sudo su - jenkins

# 公開鍵を作成する。今回はパスフレーズなしにします
$ ssh-keygen -t ed25519 -N '' -C ''

# 作成した公開鍵の中身をまるまるメモしておく
$ cat .ssh/id_ed25519.pub

# githubの公開鍵を取得する
$ ssh-keyscan -t ed25519 github.com > ~/.ssh/known_hosts

# jenkinsユーザからログアウト
exit

# ログインシェルを元に戻す。これでjenkinsユーザにはログインできなくなる
$ chsh -s /bin/false jenkins

githubの公開鍵を取得する件については補足を参照してください。

あとはコピーしておいた公開鍵をgithubに登録します。

  1. githubにログインし、右上のプロフィールアイコンからSettingを押下
    githubアカウント設定メニュー.png
  2. 左ペインのSSH and GPG keysを押下
    SSHキー登録メニュー.png
  3. New SSH keyを押下
    公開鍵の登録画面に遷移.png
  4. Titleを入力, Keyにはメモした鍵をそのままを入力し、Add SSH keyを押下
    公開鍵を登録.png

このようにすると、ジョブの作成時に認証情報を指定せずにプライベートリポジトリもクローンできるようになります。(クローンするためのURLはSSHを指定)

下記は「フリースタイル」でジョブを作成、「ソースコード管理」をONにしてプライベートリポジトリを指定しています。
image.png

githubに登録したjenkinsユーザの公開鍵を削除すると下記のようにエラーとなります。
image.png

補足

githubに公開鍵を登録する場合、予めgithubの公開鍵をknown_hostsとして登録しておく必要があります。これはsshなどで接続する際、ホスト認証をする過程でknown_hostsを見に行く訳ですが、初回接続時にプロンプトが表示されyesと入力しないとknown_hostsに登録されません。

jenkinsのジョブを実行した場合、プロンプトは表示されないためそのままエラーとなりジョブ自体が失敗します。そのため、予めknown_hostsとして登録しています。

Personal Access Tokenを登録する

jenkinsユーザの公開鍵をgithubに登録する公開鍵認証の方法では鍵の生成、githubに生成した鍵の登録、githubの公開鍵をknown_hostsに登録、と結構手間がかかります。Personal Access Tokenを登録する場合は公開鍵認証よりもだいぶ楽になります。

  1. githubにログインし、右上のプロフィールアイコンからSettingを押下
    githubアカウント設定メニュー.png
  2. 左ペインのDeveloper settingsを押下
    image.png
  3. 左ペインのPersonal access tokens > Tokens(classis)を押下し、Generate new token > Generate new token(classic)を押下
    image.png
  4. Noteにトークンの表示名を付けます。repoにチェック(リポジトリの操作が可能)し、ページ下部のGenerate tokenを押下
    image.png
  5. 生成されたトークンをメモしておきます。2度と見れないようですので、メモしてないとトークンを作り直すことになります。
    image.png
  6. jenkinsダッシュボード > Jenkinsの管理 > Manage Credentials > System > グローバルドメイン > Add Credencialsを押下。下記情報を入力してCreateします。
    1. ユーザー名: githubアカウント名 (Treat username as secretにチェックを入れるとユーザー名が隠蔽され、認証情報一覧にはIDが表示されます)
    2. パスワード: 先程メモしたトークン
    3. ID: 認証情報の識別子
      image.png

公開鍵を使った時と同様、「フリースタイル」のジョブを作成し、認証が通ることを確認します。クローンで指定するURLはHTTPSを指定し、認証情報には先程作成した認証情報を選択します。正しく設定出来ているとエラーは出ません。
image.png

ここで、認証情報を外すとエラーが発生します。
image.png

特定のリポジトリ(public / private)にアクセス可能な設定をする

アクセスしたいリポジトリにDeploy keyを登録する

これも公開鍵を登録することで認証を通します。流れはjenkinsユーザの公開鍵をgithubに登録するとほぼ同じです。

異なるのは作成した公開鍵をDeploy keyとして登録するか否かです。Deploy keyとして登録するには次のようにします。

  1. アクセスを許可したいリポジトリのSettings > Deploy keysを押下
    image.png

  2. Add deploy keyを押下
    image.png

  3. Titleを入力, Keyには作成した公開鍵の中身を入力し、Add keyを押下。(Allow write accessをチェックするとpushが出来るようになるようです)
    image.png

github側に登録した公開鍵を削除し、Deploy keyを登録したリポジトリとそうでないリポジトリを並べて設定してみると、次のようにDeploy keyを登録したリポジトリは認証情報も設定せずエラーにはなりません。(クローンはSSH方式)

リポジトリ名 Deploy key登録
test なし
test2 あり

image.png

testリポジトリはDeploy keyを登録してませんが、Personal Access Tokenを使えばエラーは発生しません。(クローン方式をSSH -> HTTPSに変更する必要あり)
image.png

おわりに

公開鍵の作成はちょっと手間ですが、認証情報を設定する必要もなくなるので便利ですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?