Jenkins



Sitemap | Profile | タグ一覧
最近の更新
ドライランのありがたみを改めて知る
2024/04/04
伊豆半島
2024/03/31
お出かけチェックリスト
2024/03/29
Ruby
2024/03/27
Kubernetes
2024/03/22
音楽データをDisplayAudioで聞く
2024/03/09
Redmine
2024/02/05
git
2024/02/02
経済
2024/01/08
どうする家康
2023/12/17
MX-Linux
2023/11/06
國體関連学-休学のご連絡
2023/08/13
Debian
2023/08/02
CentOS
2023/06/13
Dell-XPS13
2023/05/23
ベルト
2023/05/18
SourceForge
2023/04/17
確定申告
2023/02/19
さらば「まぐまぐ」
2023/01/09
風猷縄学
2022/11/23


[-] 1. 導入記

CI(継続的インテグレーション --Continuous Integration)ツールの1つ。

本業でも仲間が使い始めただけでなく、 セットアップの一部をやることになったので、 個人環境でもちょいと触ってみる。

Capistrano も合わせてここに記述する。

[-] 1.1. Jenkins

  1. インストール(@Ubuntu 16.04) https://www.digitalocean.com/community/tutorials/how-to-install-jenkins-on-ubuntu-16-04 が参考になる。
  2. セットアップ
    1. (僕の環境固有)ruby の path(/home/ruby/ruby-2.2.0/bin)を jenkins が認識するように設定
      $ sudo -u jenkins vi /var/lib/jenkins/.profile
      …
      export PATH_BASE=$PATH
      export PATH=/home/ruby/ruby-2.2.0/bin:$PATH_BASE
    2. この段階の動作ではセキュリティ的にまずい。 素早く簡単なセキュリティ を参考に、以下とする:
      • 取り急ぎ簡単な認証
      • 外部からアクセス出来るようにしたい
        • → http は止めて https で稼働
    3. で、/etc/default/jenkins を変更:
      ...
      x="--webroot=/var/cache/jenkins/war --ajp13Port=$AJP_PORT"
      x="$x --httpPort=-1"                                # http を停止
      x="$x --httpsPort=8443"                             # https 8443 で稼働
      x="$x --argumentsRealm.passwd.[MYADMIN]=[PASSWORD]" # [MYADMIN]ユーザを指定
      x="$x --argumentsRealm.roles.[MYADMIN]=admin"       # [MYADMIN]を管理者に
      JENKINS_ARGS=$x
      で、再起動:
      $ sudo service jenkins restart
      • https://[MYHOST]:8443/ にアクセスできれば ok。
    4. パスワード設定
      1. Jenkins トップ画面 > Jenkinsの管理 > グローバルセキュリティの設定
      2. 「セキュリティを有効化」を on
      3. ユーザ情報: 「サーブレットコンテナの認証」を選択
      4. 権限管理:「互換性モード」を選択
    5. git plugin
      1. Jenkins トップ画面 > Jenkinsの管理 > プラグインの管理
      2. git plugin を探し、インストール
      3. jenkins を再起動
  3. プロジェクトの登録
    1. トップ画面 > 新規ジョブ作成
    2. ジョブ名 [MY_PROJECT]
    3. フリースタイル・プロジェクトのビルド
    4. OK
    5. 古いビルドの破棄
      1. ビルドの保存最大数: 10
    6. git
      1. jenkins 公開鍵を gitolite に登録
      2. git URL を指定
      3. job起動 polling は良くないと jenkins 作者自身が述べておられる:
        http://kohsuke.org/2011/12/01/polling-must-die-triggering-jenkins-builds-from-a-git-hook/
        そこで、git push をトリガーに job が走るように設定する。
        1. jenkins の参照する git の post-receive に下記を記述:
          curl --insecure https://localhost:8443/git/notifyCommit?url=[myGIT-URL]
        2. Jenkins > 該当Project > Configure > "Build Triggers" 節 > Poll SCM のチェックボックスを on。Schedule は空欄に。
        3. git push して正しく起動しているか、以下の方法で確認:
          1. 実際に git push してみる
          2. 端末から上記 curl ... コマンドを叩いて、動作するか見る
          3. Jenkins > 該当プロジェクト > Git Polling Log で、 処理されているか見る。

[-] 1.1.1. jdk7

(2015/11/15) 久しぶりに Jenkins (@Ubuntu 12.04 LTS 32bit)を起動しようとしたら 動かない。で、下記が /var/log/jenkins/jenkins.log に…(´・ω・`)ショボーン:

Jenkins requires Java7 or later, but you are running 1.6.0_36-b36 from
/usr/lib/jvm/java-6-openjdk-i386/jre
java.lang.UnsupportedClassVersionError: 50.0
    at Main.main(Main.java:90)

java7 でないと動かない、とのことらしい。

で、

  1. java7 をインストール
    $ sudo apt-get install openjdk-7-jre
  2. デフォルトを java6 から java7 にスイッチ
    $ sudo update-alternatives --config java
    alternative java (/usr/bin/java を提供) には 2 個の選択肢があります。
    選択肢    パス                                         優先度  状態
    ------------------------------------------------------------
        * 0            /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java   1061 自動モード
      1            /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java   1061 手動モード
      2            /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java   1051 * 手動モード
    現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 2
  3. jenkinsを起動
    $ sudo service jenkins start
  4. Webからアクセス

動いた!

参考:

[-] 1.1.2. debug

[-] 1.1.2.1. 現象

以下のエラーが:

[workspace] $ /bin/sh -xe /tmp/hudson503243281910729335.sh
+ /var/lib/jenkins/jobs/[MY_PROJECT]/workspace/bin/jenkins/deploy.sh
/home/ruby/ruby-2.2.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
/home/ruby/ruby-2.2.0/lib/ruby/gems/2.2.0/gems/bundler-1.7.11/lib/bundler/spec_set.rb:92:in
`block in materialize': Could not find json-1.8.3 in any of the sources (Bundler::GemNotFound)
[-] 1.1.2.2. 追跡
  1. jenkins でログイン
    $ sudo -u jenkins -i bash
  2. 以下で確かに再現するなぁ:
    $ cd /var/lib/jenkins/jobs/[MY_PROJECT]/workspace/
    $ ./bin/jenkins/deploy.sh 
    /home/ruby/ruby-2.2.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    Could not find json-1.8.3 in any of the sources
    Run `bundle install` to install missing gems.

[-] 1.2. Capistrano

  1. インストール&セットアップ
    1. Gemfile
      gem 'capistrano', '~> 3.3.0'
      gem 'capistrano-rails'
      gem 'capistrano-bundler'
    2. bundle install
    3. bundle exec cap install
    4. config/deploy.rb を編集

以下は初回だけ必要?(TODO)

  1. jenkins が ruby 2.2 にアクセスできるよう、path を設定
(jenkins サーバにログイン)
$ cd /var/lib/jenkins/jobs/[MY_PROJECT]/workspace
$ sudo -u jenkins -i ./bin/bundle install

[-] 2. Trouble Shoot

[-] 2.1. SSHKit::Runner::ExecuteError

[-] 2.1.1. 背景

  1. Jenkins 内で デプロイサーバからステージングサーバに設定ファイルを コピーしようとして upload タスクを書いた。
  2. うまく動作しないので、Jenkinsサーバにて下記テストをしたところ 上記 SSHKit::Runner::ExecuteError が発生:
    $ sudo -u jenkins env PATH=/home/ruby/ruby-2.2.0/bin:$PATH cap staging some_test
    ...
    cap aborted!
    SSHKit::Runner::ExecuteError: Exception while executing as ...

なお、ここで実は貧乏経費削減で Jenkins サーバ == デプロイサーバ == ステージングサーバ だったりするがそれはさて置く(汗)。

[-] 2.1.2. 原因

デプロイ先(ここではステージングサーバ)用 cap ファイル config/deploy/staging.rb の ssh_options を実行ユーザ Jenkins に合わせて 設定する必要があった:

set :ssh_options, {
  keys:          %w(/var/lib/jenkins/.ssh/id_rsa),
  forward_agent: false,
  auth_methods:  %w(publickey)
}

[-] 3. 参照






Generated by juli 2.3.2