ターゲット
- G-SuiteアカウントでJenkinsのユーザの管理を出来るようにしたい人
設定手順
EC2 Instance
インスタンス性能
- マシンイメージ: Ubuntu Server 20.04 LTS (HVM), SSD Volume Type
- インスタンスタイプ: t2.micro
- ストレージ: /dev/sda1, 8GiB, gp3
その他
- インスタンスはパブリックサブネット上に構築
- パブリックIPアドレスにはEIPを割り当ててもいいが、今回はデフォルトのパブリックIPアドレスを使用
- パブリックサブネットに構築するので、セキュリティグループは自身の環境に合わせて要検討
Route 53
- EC2 InstanceのパブリックIPアドレスに対するAレコードを作成(以下、例として登録したドメインは
jenkins.example.com
) - Route53にIPを指定したAレコードを作成した場合の料金
- 標準的クエリ
- 0.20USD 100 万クエリごと – 最初の 10 億クエリ / 月
- 0.20USD 100 万クエリごと – 10 億クエリ超過 / 月
- refs: https://aws.amazon.com/jp/route53/pricing/
- 標準的クエリ
- EC2インスタンスの前にALBを設置し、AレコードをインスタンスのパブリックIPアドレスではなく、ALBにするとRoute53のクエリへの応答の料金は無料になるが、ALBの料金がかかるのでそこは要検討
Install Jenkins
openjdk
sudo apt update
sudo apt install -y openjdk-11-jdk
java -version
# openjdk version "11.0.11" 2021-04-20
# OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
# OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing)
jenkins
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install -y jenkins
refs: https://www.jenkins.io/doc/book/installing/linux/
nginx
sudo apt install -y nginx
Jenkinsへリダイレクトするための設定を追加(server_name
はRoute53で設定した名称を指定)
cat << 'EOT' | sudo tee /etc/nginx/conf.d/jenkins.conf
upstream jenkins {
keepalive 32; # keepalive connections
server 127.0.0.1:8080; # jenkins ip and port
}
# Required for Jenkins websocket agents
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80; # Listen on port 80 for IPv4 requests
server_name jenkins.example.com; # replace 'jenkins.example.com' with your server domain name
# this is the jenkins web root directory
# (mentioned in the /etc/default/jenkins file)
root /var/run/jenkins/war/;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# pass through headers from Jenkins that Nginx considers invalid
ignore_invalid_headers off;
location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" {
# rewrite all static files into requests to the root
# E.g /static/12345678/css/something.css will become /css/something.css
rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last;
}
location /userContent {
# have nginx handle all the static requests to userContent folder
# note : This is the $JENKINS_HOME dir
root /var/lib/jenkins/;
if (!-f $request_filename){
# this file does not exist, might be a directory or a /**view** url
rewrite (.*) /$1 last;
break;
}
sendfile on;
}
location / {
sendfile off;
proxy_pass http://jenkins;
proxy_redirect default;
proxy_http_version 1.1;
# Required for Jenkins websocket agents
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_max_temp_file_size 0;
#this is the maximum upload size
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffering off;
proxy_request_buffering off; # Required for HTTP CLI commands
proxy_set_header Connection ""; # Clear for keepalive
}
}
EOT
sudo systemctl restart nginx
refs: https://www.jenkins.io/doc/book/system-administration/reverse-proxy-configuration-nginx/
Getting Started Jenkins
-
ブラウザからログイン( 例の場合なら、http://jenkins.example.com )
-
Unlock Jenkins
-
Customize Jenkins
-
Create First Admin User
-
Instance Configuration
- Jenkins URLはログインの時のURL( 例の場合なら、http://jenkins.example.com )になっていると思うので、そのまま Save and Finish
- Jenkins URLはログインの時のURL( 例の場合なら、http://jenkins.example.com )になっていると思うので、そのまま Save and Finish
-
Jenkins is ready!
GCP
新しいプロジェクト
OAuth同意画面
- OAuth同意画面
- User Type: 外部
- アプリ登録の編集
- OAuth同意画面(最小限の設定のみ記載)
- アプリ名: Jenkins(任意)
- ユーザーサポートメール: (任意)
- デベロッパーの連絡先情報: (任意)
- OAuth同意画面(最小限の設定のみ記載)
- スコープ
- 未設定
- テストユーザー
- テスト中にログイン可能なアカウントを設定
認証情報
-
OAuthクライアントIDの作成
- アプリケーションの種類: ウェブアプリケーション
- 名前: Web Client(任意)
- 承認済みのJavaScript生成元: http://jenkins.example.com (例の場合の設定)
- 承認済みのリダイレクトURI: http://jenkins.example.com/securityRealm/finishLogin (例の場合の設定)
-
OAuthクライアントを作成すると、クライアントIDとクライアントシークレットが発行されます。これらはJenkinsの設定で利用するので、メモしておいて下さい。
Setup Jenkins
- Jenkinsに再度ログインし、G-Suiteのアカウントでログイン出来るように設定します。
- プラグインの管理ページを開きます(Jenkinsの管理 > プラグインの管理)
- 利用可能なプラグインから「Google Login」を検索、チェックし、Install without restart
- インストール後、ログインの設定画面を開きます(Jenkinsの管理 > グローバルセキュリティの設定)
- ユーザー情報で「Login with Google」を選択し、GCPで作成したOAuthクライアント情報を入力します。
refs: https://github.com/jenkinsci/google-login-plugin
最後に
- 設定は以上です。
- お手持ちのG-SuiteアカウントからJenkinsへログイン出来ると思います。
- また、設定の不備等があることを想定し、最初のadminユーザでログインした状態のブラウザは残しておいた方がいいかもしれません。