speg03の雑記帳

主に未来の自分のために試したことなどを記録しています

Jenkinsでプロキシ認証を越えてyum update

プロキシ認証を含んだ処理のジョブ設定を行う話。共有サーバなどを利用しており認証情報が他人から見えないようにしたい場合に有効。

プロキシ認証情報の入力

Jenkinsジョブ設定のビルドパラメータで以下を設定する。

  • PROXY_USER ユーザID
  • PROXY_PASS パスワード

f:id:speg03:20200327214113p:plain

自動ビルド時にはここで入力されたデフォルト値が使用され、手動ビルドの場合はパラメータの入力欄が画面に表示される。

jenkinsユーザのsudo設定

yum updateはroot権限がないと実行できないので、jenkinsユーザが実行できるようsudoの設定を行う。

visudo (/etc/sudoers)で、jenkinsユーザがsudoで実行できる権限について以下を設定する。

# localhost上でのyum update -yのみパスワードなしで実行できる
# "localhost"の個所は`uname -n`で表示されるマシン名を使うこと
jenkins localhost=NOPASSWD: /usr/bin/yum update -y

# 通常の端末上でなくても実行できる
Defaults:jenkins !requiretty

# プロキシ環境変数を引き継ぐ
Defaults:jenkins env_keep += "http_proxy https_proxy"

ビルドスクリプト

以下のようなyum-update.shをSCMからチェックアウトするなどして、ジョブ設定のビルドのシェルスクリプト欄ではこのシェルスクリプトを実行するようにする。

#!/bin/bash

# コマンドのechoを止めてパスワードがログ出力されるのを防ぐ
set +x

# プロキシ認証
export http_proxy=http://$PROXY_USER:$PROXY_PASS@proxy.example.com:8080
export https_proxy=$http_proxy

# プロキシ認証の通信テスト
/usr/bin/curl -I http://www.google.co.jp 2>&1 | /bin/grep '200 OK'
if [ $? -ne 0 ]; then
  echo "Proxy Authentication Failed"
  exit 1
fi

# コマンドのechoを元に戻す
set -x

sudo /usr/bin/yum update -y

f:id:speg03:20200327214250p:plain

この例からもわかるようにビルドパラメータで設定した変数はビルド設定から呼び出された子プロセスのシェルでも有効になっている。