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 3 years have passed since last update.

JenkinsにG-Suiteアカウントでログインする

Last updated at Posted at 2021-05-28

ターゲット

  • 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レコードを作成した場合の料金
  • 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

    • Administrator passwordをサーバから確認し貼りつけて Continue
      image.png
  • Customize Jenkins

    • Install suggested pluginsを選択
    • Pluginについてはセットアップ後に必要な分については設定
      image.png
  • Create First Admin User

    • 初回ログインしG-Suiteでログイン可能にするまでの設定を行うユーザを作成
    • 必要な項目を入力し、Save and Continue
      image.png
  • Instance Configuration

    • Jenkins URLはログインの時のURL( 例の場合なら、http://jenkins.example.com )になっていると思うので、そのまま Save and Finish
      image.png
  • Jenkins is ready!

    • Start using Jenkins
      image.png

GCP

  • 新しいプロジェクトを作成します。プロジェクトの一覧画面から「新しいプロジェクト」を選択します。
    image.png

新しいプロジェクト

  • プロジェクト名: jenkins-oauth(任意)
    image.png

  • プロジェクトが作成されたら、認証情報(APIとサービス > 認証情報)の設定画面を開きます。
    image.png

  • 認証情報の設定を完了させるためにはOAuth同意画面の設定が必要になるため、最初に同意画面を作成します。
    image.png

OAuth同意画面

  • OAuth同意画面
    • User Type: 外部
  • アプリ登録の編集
    • OAuth同意画面(最小限の設定のみ記載)
      • アプリ名: Jenkins(任意)
      • ユーザーサポートメール: (任意)
      • デベロッパーの連絡先情報: (任意)
  • スコープ
    • 未設定
  • テストユーザー
    • テスト中にログイン可能なアカウントを設定

認証情報

  • 同意画面を作成したら認証情報を作成します。
    image.png

  • OAuthクライアントIDの作成

  • OAuthクライアントを作成すると、クライアントIDとクライアントシークレットが発行されます。これらはJenkinsの設定で利用するので、メモしておいて下さい。
    image.png

Setup Jenkins

  • Jenkinsに再度ログインし、G-Suiteのアカウントでログイン出来るように設定します。
  • プラグインの管理ページを開きます(Jenkinsの管理 > プラグインの管理)
    image.png
  • 利用可能なプラグインから「Google Login」を検索、チェックし、Install without restart
    image.png
  • インストール後、ログインの設定画面を開きます(Jenkinsの管理 > グローバルセキュリティの設定)
    image.png
  • ユーザー情報で「Login with Google」を選択し、GCPで作成したOAuthクライアント情報を入力します。
    • Google Apps Domainには、認証を許可するG-Suiteのドメインを指定します。
    • 例えばG-Suiteのドメインが example.co.jp であれば、example.co.jpを入力してください。この場合、Jenkinsのサイトのドメインがexample.comだとして、そのドメインとは関係ありません。
      image.png

refs: https://github.com/jenkinsci/google-login-plugin

最後に

  • 設定は以上です。
  • お手持ちのG-SuiteアカウントからJenkinsへログイン出来ると思います。
  • また、設定の不備等があることを想定し、最初のadminユーザでログインした状態のブラウザは残しておいた方がいいかもしれません。

関連記事

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?