LoginSignup
39

More than 5 years have passed since last update.

Jenkins環境構築でのメモ

Last updated at Posted at 2014-12-01

Jenkinsで「githubを監視して、変更があったらrakeを走らせる」というジョブを作成した。
そのとき躓いたところや、ポイントだと思ったところをメモしておく。

おおまかな環境構築の流れはCentOSにyumでjenkinsをインストールする - 文系プログラマによるTIPSブログを参考にした。

jenkinsユーザへの変更

jenkinsユーザへ切り替えると、諸々の作業が楽になる。
しかし、yumでインストールしたjenkinsでは、デフォルトで切り替えられないように設定されている。

/etc/passwdのjenkinsの行を次のように変更すると、切り替えられるようになる。

/etc/passwd
jenkins:x:496:497:Jenkins Continuous Build server:/var/lib/jenkins:/bin/bash

(参考:RSpecをrvm×Jenkinsで実行するまでの試行錯誤をメモ

wget実行時にプロキシに引っかかる

インストールのため、下記を実行。

$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ sudo yum install jenkins

1行目を実行したときに、
proxy URL ftp://ID/PW@proxy.yourdomain.com:port に間違いがあります: HTTPでなければなりません。
と表示されるエラーが発生した。

How to Use WGET with a Proxy Serverを参考にして、/etc/wgetrc

/etc/wgetrc
http_proxy=http://proxy.yourdomain.com:port/
proxy_user=userID
proxy_password=password

のようにプロキシ情報を追加したところ、エラーが出なくなった。

使用するポートを変更する

ポート番号を変えたい場合は、/etc/sysconfig/jenkinsを次のように書き換える。

/etc/sysconfig/jenkins
JENKINS_PORT="変更後ポート番号"

ちなみに、そのポート番号が使われているかどうかを調べたいときには

$ netstat -tanp

というコマンドを使う。

(参考:管理者必見! ネットワーク・コマンド集 - netstatコマンドでポートを利用しているプロセスを調べる:ITpro

githubとの連携

jenkinsインストール時に~jenkins/.sshが自動生成されると書いてあるサイトもあったが
見つからなかったので、自分でssh鍵を生成。

$ cd /var/lib/jenkins
$ mkdir .ssh
$ sudo chown jenkins .ssh
$ sudo -u jenkins -H ssh-keygen -t rsa -C jenkins@hoge.com
$ chmod 744 ../.ssh

ssh鍵が生成できたら、githubで使用しているユーザのsshに追加する。
(リポジトリに追加すると、複数のリポジトリを扱えなくなってしまう。)

sshで外のサーバへログインするためには、SOCKSプロキシを経由する必要があったので
connect.cを拾ってきて~jenkins/.ssh/configに下記を加えた。
(connect.cの所在はググるのがいちばん手っ取り早いらしい。)

~jenkins/.ssh/config
Host github.com
    User git
    HostName ssh.github.com
    Port 443
    ProxyCommand /usr/bin/connect -S socks.yourdomain.com:port %h %p
    IdentityFile ~jenkins/.ssh/id_rsa

環境変数にIDとパスワードを設定すればOK。
(Jenkinsの管理>システムの設定>グローバルプロパティ>環境変数)

キー
SOCKS5_USER ID
SOCKS5_PASSWD パスワード

~jenkins/.ssh/configもchownで所有者をjenkinsに変更しておく。
下のコマンドで、githubにアクセスして設定ができたか確認できる。

$ sudo -u jenkins ssh git@github.com

(参考:Jenkins+GitHubのプライベートリポジトリ - Qiita
 GitHubとJenkins連動 自動デプロイ 開発環境設定編 at ITエンジニアmegadreamsの開発日記

githubから取得した最新ファイルを置くディレクトリを指定

デフォルトでは全てworkspace直下に置かれてしまう。
1つのジョブで複数のリポジトリにアクセスしたときなどに困るので、
ディレクトリを指定して取得してくるようにする。

  1. ジョブの設定画面>ソースコード管理>Gitを選択
  2. Additional Behavioursという項目でCheck out to a sub-directoryを選択
  3. Local subdirectory for repoという設定項目が現れるので、ファイルを置きたいディレクトリ名を書く

(参考:Jenkinsで1つのジョブで複数のGitリポジトリをビルドする方法 - wadahiroの日記
 [#JENKINS-13086] Clone to directory named for repository - Jenkins JIRA

ERROR: Repository not found

上記のエラーが出て、ビルドが失敗していた。
結局はリポジトリ名のタイポが原因だったが、上記のエラーが出た場合には次のことをチェックしてみると良いらしい。

スペルミス

githubからコピーしてくるとミスがない。

権限

リポジトリにアクセスする権限があるのかどうか。

ssh接続

ssh -T git@github.comで確認してみる。

本当に存在するのか

削除されていたり、とか。

(参考:Error: Repository not found

rakeを実行するジョブ

~jenkins/.bashrcに下記を加えて、rvmのPATHを追加しておくだけでOK。

[[ -s "(rvmの場所)/scripts/rvm" ]] && source "(rvmの場所)/scripts/rvm"
PATH=$PATH:(rvmの場所)/bin

RakeプラグインやRVMプラグインなど様々なプラグインがあるみたいだが、
今回はどちらも使わずに実行できた。

#!/bin/bash -xe
cd $WORKSPACE/directory_name
source ~/.bashrc
bundle install --path vendor/bundle --without production development
rake db:drop db:migrate RAILS_ENV=test
rake

(参考:【jenkins】 RVMが正常に動作しない bundle: command not found

pushされたブランチに対してビルドを実行する

Gitプラグインの$GIT_BRANCH変数と、Parameterized Trigger pluginを使う。

JenkinsがGithubにpushされたbranchをテストする - Perl日記を参考に、
監視するジョブと処理を行うジョブを分けるとわかりやすくなった。
詳細な設定は上記リンクを参考にすると良い。

要約すると、

  1. 監視ジョブの後処理>Predefined parametersを選択し
    branch=${GIT_BRANCH}を設定して、ブランチ名を下流ジョブ(処理用)に渡す。
  2. 下流ジョブではビルドのパラメータ化にチェックを入れて、branchパラメータを受け取る。
    そして、ソースコード管理>Git>Branches to buildを$branchに設定すると
    変更があったブランチに対してビルドを実行できる。

シェルの途中で失敗したときにジョブを停止する

#!/bin/bash -xe

または

#!/bin/sh -xe

のどちらかを書くだけ。
シェルの途中で失敗した場合に、ジョブが停止される。

(参考:Jenkinsで使うシェルスクリプトは-xeつけた方がよかった - くりにっき

(おまけ)プラグインいろいろ

Jenkinsに入れているプラグインまとめ(Rails中心) - くりにっきに、
ジョブ内容に関わらず役立ちそうなプラグインが紹介されている。

Dependency Graph View Plugin - Jenkins - Jenkins Wikiも入れておくと便利そう。

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
39