LoginSignup
18
17

More than 1 year has passed since last update.

Jenkinsの罠 !? 知っておくべきJenkinsの知識

Last updated at Posted at 2022-01-15

はじめに

EC2にJekinsをインストールし、jenkinsのジョブを作成して実行するぞ! と意気込んでいたときのことです。

jenkinsのジョブの実行に失敗してしまいました。

私自身、jenkinsについてとても勉強になった出来事だったので、知っておくべきjenkinsの知識として残します。

事前準備

Jenkins用のEC2インスタンスを作成します。今回は、Amazon Linux 2で作成します。

EC2(Amazon Linux2)にJekinsをインストールする方法については以下記事を参考にしました。

今回、jenkinsで定型化するものは以下のようなジョブです。
・ EC2インスタンス起動・停止
・ 検証環境、staging、本番環境でのEC2インスタンスへのデプロイ
・ elasticsearchの全文検索インポート など

そのため、jenkinsからEC2への操作を可能にするためのポリシーをアタッチします。

EC2FullAccessのポリシーをつけたIAMユーザーを作成し、認証情報のタブからアクセスキーの作成を行い、アクセスキーIDとシークレットパスワードをメモしておいてください
(※作成画面以降2度と表示されないのでCSVをダウンロードしておくことをオススメします)

その後、aws configureコマンドで、jenkinsインスタンスにアクセスキーの配置を行います。
(※ここに罠があるので注意)

スクリーンショット 2022-01-12 22.46.24.png

jenkinsインスタンス
# 認証情報を設定
$ aws configure
# 4つ聞かれるのでそれぞれ入力
1. アクセスキー
2. シークレットキー
3. region
4. output形式 => json

# この配下にAWS認証情報(アクセスキー等)がある
$ cd ~/.aws 
$ ls -la
=> config, credentials

Jenkinsのジョブが失敗する

アクセスキーの設置が終わり、jenkinsのジョブを作成し実行したところ、エラーになりました。
jenkinsのコンソール出力を見ると以下のようなエラーメッセージが・・・

スクリーンショット 2021-12-23 14.21.49.png

unable to locate credentials. you can configure credentials by running "aws configure".

AWSの認証情報が設定されていないので、aws configureを実行してください だと!!

おいおい、アクセスキーはさっきちゃんと配置したはずだぞ🤔
設定を確認してもきちんと登録されているはず、、、と思い見てみると、、やはり設定されている。。。

jenkinsインスタンス
# アクセスキー設定情報を確認
$ aws configure list

=> aws_access_key_id = *****************
=> aws_secret_access_key = *****************

ここに罠があった

以下、私が知らなかった事実です。。。

まず、前提として、、、、
Jenkinsをインストールすると、jenkinsユーザーが作成され、EC2内の/var/lib/jenkinsがjenkinsユーザーのホームディレクトリに設定されます。

そうなんです!jenkinsのジョブを実行しているのは、EC2の中のec2-userでもなければ、rootユーザーでもありません。jenkinsユーザーだったのです。

だからEC2内のjenkinsユーザーにAWSの認証情報(アクセスキー)を設定してあげる必要があったのです。
(お気づきだと思いますが、これまでは、ec2ユーザーとrootユーザーに設定していました)

一連の流れを確認すると・・・

jenkinsインスタンス
# EC2内にjenkinsディレクトリが存在することを確認
$ cd /var/lib/jenkins
$ ls -a
=> ~~~ , jenkins, ~~

# jenkinsユーザーになる
$ sudo su - jenkins

# -bash-4.2$になると成功している
-bash-4.2$ pwd
=> /var/lib/jenkins

# ここで認証情報を確認すると・・・やはりなにも設定されていなかった😢
$ aws configure list
=> aws_access_key_id
=> aws_secret_access_key

# jenkinsユーザーに対して、認証情報を設定
$ aws configure 

無事、ジョブが成功しました!

ジョブを実行しているのはjenkinsユーザーである
どうかこれだけは忘れずに。

余談

画面上で作成したJenkinsのジョブはサーバ内jenkinsユーザーの以下に格納されているので、確認できます。

jenkinsインスタンス
# jenkinstユーザーになる
$ sudo su - jenkins
$ ls -la
=> ~~,  jobs, users, logs, ~~
$ cd jobs
$ ls -la
=> 作成したジョブ一覧

# usersにはjekins上のuser一覧、logsにはジョブの実行ログが入っている

こうしてサーバ内に入り、いろいろ見てみると改めて、ソフトウェアがサーバ上で実行されているんだという実感が持ててとても勉強になりました。

以上、jenkins導入後知っておきたい初期知識でした。

憎いおじさんに数時間捕まってしまいました、、、
jenkins.png

参考

18
17
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
18
17