tail -f /dev/null

If you haven't had any obstacles lately, you're not challenging. be the worst.

ローカル環境におけるJenkinsの構築、設定(Mac)

1年以上経過しており情報が古い可能性があります

Packageから落とした場合と、Homebrewから落としてきた場合のJenkins設定まとめ

動作環境

  • MacOSX 10.11
  • Jenkins 1.634
  • JDK 1.8.0_65
  • Homebrew 0.9.5 (git revision 9942; last commit 2015-11-07)
  • Ruby 2.2.3
  • bundler 1.10.6

目標

  • テスト自動化
  • デプロイ自動化
  • 通知を適度なタイミングで届ける


Packageからのインストール

構成

  • Jobホーム
/Users/Shared/Jenkins/Home/jobs/xxx
  • 設定ファイルの置き場所
/Users/Shared/Jenkins/Home/jobs/xxx/config.xml


Jenkinsへの書き込み権限の付与

Packageでインストールすると、jenkinsという名前のユーザーをJenkinsが自動で作成する。

% sudo chown jenkins /var/log/jenkins


f:id:hrt0kmt:20151027175741p:plain

パス設定

# Jenkins用
export JENKINS_HOME="/Users/Shared/Jenkins/Home"


アンインストール

// 選択肢1
% sh /Library/Application\ Support/Jenkins/Uninstall.command

// 選択肢2
% sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
% sudo rm -rf /Applications/Jenkins "/Library/Application Support/Jenkins" /Library/Documentation/Jenkins
% sudo rm -rf /Users/Shared/Jenkins
% sudo dscl . -delete /Users/jenkins
% sudo dscl . -delete /Groups/jenkins


Jenkinsの停止

% sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist


アップデート

/Applacations/Jenkins/jenkins.war を最新verへ切り替える。


環境設定ファイルの編集

% sudo vi /Library/LaunchDaemons/org.jenkins-ci.plist

  <!-- 追加 -->
  <key>EnvironmentVariables</key>
  <dict>
  <key>JENKINS_HOME</key>
  <string>/Users/Shared/Jenkins/Home</string>
  <key>JAVA_HOME</key>
  <string>/Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home</string>
  </dict>


logや設定ファイルの確認

// logファイル
% vi /Users/Shared/Jenkins/Home/jobs/{Project_name}/builds/1/log

// Daemonの確認
% vi /Library/LaunchDaemons/org.jenkins-ci.plist


エラーまとめ

  • java.io.IOException: Cannot run program "cmd"
    • Windows環境ではない環境で実行している。
  • ビルドに失敗する...
    • /var/log/jenkins 配下のログを消す。


デバッグ

シェルの実行でenvを用い、環境変数を表示させる。


Homebrewからのインストール

Homebrewの環境構築

Homebrewの環境構築はこちらを参照。


Jenkinsのインストール

brew install jenkinsよりインストール可能。

% brew install jenkins
jenkins: Java 1.6+ is required to install this formula.
You can install with Homebrew Cask:
  brew install Caskroom/cask/java

You can download from:
  http://www.oracle.com/technetwork/java/javase/downloads/index.html
Error: An unsatisfied requirement failed this build.

JDKがなくErrorが表示されてしまので、Logの通りJDKをインストール。

% brew install Caskroom/cask/java
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

This Cask makes minor modifications to the JRE to prevent issues with
packaged applications, as discussed here:

  https://bugs.eclipse.org/bugs/show_bug.cgi?id=411361

If your Java application still asks for JRE installation, you might need
to reboot or logout/login.

Installing this Cask means you have AGREED to the Oracle Binary Code
License Agreement for Java SE at
==> Downloading http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-macosx-x64.dmg
==> installer: Package name is JDK 8 Update 66
🍺  java staged at '/opt/homebrew-cask/Caskroom/java/1.8.0_66-b17' (2 files, 227M)

再度、jenkinsのインストール。

% brew install jenkins

Note: When using launchctl the port will be 8080.

To have launchd start jenkins at login:
  ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
Then to load jenkins now:
  launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
Or, if you don't want/need launchctl, you can just run:
  jenkins


Logにはln -sfvより.plistシンボリックリンクを貼るとあるが、HomebrewのUpdateに合わせて.plistもUpdateされてしまうため、シンボリックリンクではなくコピーする。

% cp -p /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents


設定ファイルの更新

% vi ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

以下、初期設定状態。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>homebrew.mxcl.jenkins</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/bin/java</string>
      <string>-Dmail.smtp.starttls.enable=true</string>
      <string>-jar</string>
      <string>/usr/local/opt/jenkins/libexec/jenkins.war</string>
      <string>--httpListenAddress=127.0.0.1</string>
      <string>--httpPort=8080</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>
 

<string>--httpPort=8080</string><string>--httpPort=8081</string>へ変更。
<string>-Dfile.encoding=utf-8</string> を追加。 外部からアクセスさせる場合は <string>--httpListenAddress=127.0.0.1</string> の行を削除。 メモリの設定を適宜。

自動で起動するようにload

% launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

// 停止は loadをunloadへ変更するだけ。 


Jenkinsへ接続

http://localhost:8081/ へアクセスを行う。


新規プロジェクトの作成

% rails new circle -T


Gemの更新

% bundle install



Jenkinsの各種設定

パス ( 環境変数 ) の設定

http://localhost:8081/configure のグローバルプロパティより設定可能。

設定を行わないと command not found となってしまう。

f:id:hrt0kmt:20151116125827p:plain


再起動

% sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
% sudo launchctl   load /Library/LaunchDaemons/org.jenkins-ci.plist


もしくはブラウザで http://{JENKINS_HOST}/safeRestart より再起動


プラグインのインストール

以下をインストール

  • Git client
  • Git plugin
  • Slack Notification Plugin


セキュリティ

方法1. セキュアに127.0.0.1からのみアクセス可能にする
% sudo touch /Library/Preferences/org.jenkins-ci
% sudo defaults write /Library/Preferences/org.jenkins-ci httpListenAddress -string 127.0.0.1


方法2. ユーザーを作成

http://localhost:8080/configureSecurity/行列による権限設定から、admin と operator ユーザーを作成。adminにはすべての権限を付与し、operatorには全体のread権限とジョブのreadとbuild権限を付与する。

適用ボタンではなく、保存ボタンを押下する

http://localhost:8080/securityRealm/ から、admin と operator ユーザーを登録する。

f:id:hrt0kmt:20151030211740p:plain


スケジュール作成

f:id:hrt0kmt:20151027113327p:plain

// 毎時起動
H * * * *

// 5分ごとに
H/5 * * * *


ログインできなくなった場合

一旦Jenkinsを停止させる。

% launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

Jenkinsのconfig.xmlを編集し、Securityを一旦消す。

vi ~/.jenkins/config.xml
  <mode>NORMAL</mode>
// falseへ変更。
  <useSecurity>false</useSecurity>
// ここから
  <authorizationStrategy class="hudson.security.ProjectMatrixAuthorizationStrategy">
    <permission>com.cloudbees.plugins.credentials.CredentialsProvider.Create:admin</permission>
    <permission>com.cloudbees.plugins.credentials.CredentialsProvider.Delete:admin</permission>
    <permission>com.cloudbees.plugins.credentials.CredentialsProvider.ManageDomains:admin</permission>
    <permission>com.cloudbees.plugins.credentials.CredentialsProvider.Update:admin</permission>
    <permission>com.cloudbees.plugins.credentials.CredentialsProvider.View:admin</permission>
    <permission>hudson.model.Computer.Build:admin</permission>
    <permission>hudson.model.Computer.Configure:admin</permission>
    <permission>hudson.model.Computer.Connect:admin</permission>
    <permission>hudson.model.Computer.Create:admin</permission>
    <permission>hudson.model.Computer.Delete:admin</permission>
    <permission>hudson.model.Computer.Disconnect:admin</permission>
    <permission>hudson.model.Hudson.Administer:admin</permission>
    <permission>hudson.model.Hudson.ConfigureUpdateCenter:admin</permission>
    <permission>hudson.model.Hudson.Read:admin</permission>
    <permission>hudson.model.Hudson.Read:operator</permission>
    <permission>hudson.model.Hudson.RunScripts:admin</permission>
    <permission>hudson.model.Hudson.UploadPlugins:admin</permission>
    <permission>hudson.model.Item.Build:admin</permission>
    <permission>hudson.model.Item.Build:operator</permission>
    <permission>hudson.model.Item.Cancel:admin</permission>
    <permission>hudson.model.Item.Configure:admin</permission>
    <permission>hudson.model.Item.Create:admin</permission>
    <permission>hudson.model.Item.Delete:admin</permission>
    <permission>hudson.model.Item.Discover:admin</permission>
    <permission>hudson.model.Item.Read:admin</permission>
    <permission>hudson.model.Item.Read:operator</permission>
    <permission>hudson.model.Item.Workspace:admin</permission>
    <permission>hudson.model.Run.Delete:admin</permission>
    <permission>hudson.model.Run.Update:admin</permission>
    <permission>hudson.model.View.Configure:admin</permission>
    <permission>hudson.model.View.Create:admin</permission>
    <permission>hudson.model.View.Delete:admin</permission>
    <permission>hudson.model.View.Read:admin</permission>
  </authorizationStrategy>
  <securityRealm class="hudson.security.SecurityRealm$None"/>
// ここまでを削除。
  <disableRememberMe>false</disableRememberMe>


Jenkinsを再起動させる。

% launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

その後、再度セキュリティを設定より設定し直す。