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
追記
chsh によってデフォルトのログインシェルを変更しなくても su コマンドに -s オプションをつけるだけで jenkins ユーザーに変更できた。
# su -s /bin/bash - jenkins
とはいえ、-s オプションの存在を Jenkins サーバを利用する他メンバーが知ってるとは限らないので、変更しちゃった方が便利と考えている。