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