読者です 読者をやめる 読者になる 読者になる

Jenkinsのログインシェルを変更する

Jenkins をインストールすると jenkins ユーザーが作成されるが、su コマンドを使っても jenkins ユーザーには切り替えできない。
これはデフォルトのログインシェルが /bin/false に設定されているから。

# cat /etc/passwd | grep jenkins
jenkins:x:498:498:Jenkins Continuous Build server:/var/lib/jenkins:/bin/false

chsh コマンドを使って /bin/bash に変更すればよい。

# chsh jenkins
jenkins のシェルを変更します。
新しいシェル [/bin/false]:

Ansible 対応

Jenkins において、ジョブのよくわからない失敗の原因は、ユーザー権限に基づくものであることが多い。jenkins ユーザーに変更して確認できないのは不便なため、あらかじめ Ansible によってログインシェルを変更しておいた方が便利だと思う(もちろん Jenkins 自体のインストールも)。
下記は Amazon Linux 用の Role で jenkins.yml として実際に使っている。未検証だが CentOS6, CentOS7 でもたぶん使えるはず。

---
- name: install jdk7
  yum: name=java-1.7.0-openjdk-devel state=latest

- name: download jenkins repo
  get_url:
    url: http://pkg.jenkins-ci.org/redhat/jenkins.repo
    dest: /etc/yum.repos.d/jenkins.repo

- name: import jenkins gpg key
  rpm_key:
    state: present
    key: http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

- name: install jenkins
  yum: name=jenkins state=present

- name: change login shell
  user: name=jenkins state=present shell=/bin/bash

- name: ensure running jenkins
  service: name=jenkins state=started enabled=yes
  1. JDK インストール
  2. Jenkins のレポジトリをダウンロード
  3. GPG 鍵のインポート
  4. Jenkins のインストール
  5. ログインシェルの変更
  6. Jenkins の起動

追記

chsh によってデフォルトのログインシェルを変更しなくても su コマンドに -s オプションをつけるだけで jenkins ユーザーに変更できた。

# su -s /bin/bash - jenkins

とはいえ、-s オプションの存在を Jenkins サーバを利用する他メンバーが知ってるとは限らないので、変更しちゃった方が便利と考えている。