#author("2021-02-02T23:08:00+00:00","default:wikiadmin","wikiadmin") #author("2021-06-23T12:09:45+00:00","default:wikiadmin","wikiadmin") -Javaで作られたCIツール。昔はHudsonといった。 #contents *バックアップとリストア [#ia4fe074] **thinbackupを利用したもの [#s69235c6] -thinbackupを手動インストール -フォルダを指定してリストア -pluginは手動で入れる必要があった。 -credentialも作り直す *インストール [#q6ef6034] **rpmインストール [#n4ab8dc4] yumもあるけど、実際には一つのrpmっぽいので下記より取得。 http://pkg.jenkins-ci.org/redhat/ ***コンテキストパスの変更 [#b0c711e7] -起動引数に以下の設定をいれると変えられるとの情報だが、成功してない!! --prefix=/jenkins /etc/sysconfig/jenkinsに入れたら成功! JENKINS_ARGS="--prefix=/jenkins" ***設定値 [#w55c91f6] /etc/sysconfig/jenkinsに記載がある |JENKINS_HOME|/var/lib/jenkins| |JENKINS_PORT|8080| **warインストール [#kfe12879] Tomcatなどにwarを配置するだけ。単体でも動く ***環境変数やJavaプロパティの確認 [#h805cf78] http://example.com/jenkins/systemInfo ***CSSやJSなどの場所 [#na4d78a6] webapps以下のxxxフォルダがhttp://JENKINS_SERVER/jenkins/static/ランダム文字列/xxxとして読み込まれる。ここを直接書き換えて再起動すれば反映される。 *起動 [#ve7a9da3] **単体で起動 [#acb8917b] java -jar jenkins.war -http://localhost:8080/でアクセスする。そうするとホームディレクトリの.jenkinsに展開される。JENKINS_HOMEを指定するとそこを見るようだ。 **サーブレットコンテナ利用 [#wf88ad83] -warを置くだけ **Apache連携 [#off06d85] /etc/httpd/conf.dに以下のファイルをajp.confとして配置 /etc/httpd/conf.dに以下のファイルをproxy.confとして配置 ProxyRequests Off ProxyPass /jenkins ajp://localhost:8009/jenkins ProxyPassReverse /jenkins ajp://localhost:8009/jenkins ProxyPass / http://localhost:8080/ nocanon ProxyPassReverse / http://localhost:8080/ ProxyRequests Off AllowEncodedSlashes NoDecode **コンテキストパス変更 [#ha084c52] jenkins2.0だとwarではないので、--prefix=/jenkins **Plugin install [#n2c4a499] -jpiファイルをJENKINS_HOME/pluginsディレクトリに配置しておき再起動 **マスター、スレーブ構成 [#qe7d464e] マスターにだけwarインストールして、スレーブはslave.jarを立ち上げておきSSH接続する。 *ディレクトリ構成 [#k9be9722] **Jobのホームディレクトリ [#ac337d83] HUDSON_HOME/jobs/各ジョブの名前_DIR **Jobsのホームディレクトリ以下の構成 [#e06ba81c] ***ファイル [#def64930] -config.xml 設定内容 **ソース置き場 [#gb463e43] -CVSやSVNから取ってきたソースの置き場は各JOB共通のようだ。 ***ディレクトリ [#b10e4830] -workspace ビルドしたものが配置される。 - *Manage and Assign Roles 設定 [#s3f217fb] Role Strategy Pluginを利用して、不必要なJOBを隠す。 **Global roles [#mf7ee485] プロジェクト単位のユーザーには全体のRead以外の権限はつけない。Readの権限を付けないと「アクセスできませんxxxには、全体/Read パーミッションがありません。」となるのでReadの権限は最低必要。ViewのRead権限をつけるとタブが全部見えるが、中身のプロジェクトはProject rolesで定義されたものしか見えないので、ViewのRead権限は不要だろう。 **Project Roles [#v09361c7] Jobを正規表現で指定して、その単位で権限制御できる。これ単体ではログインしても何も見れないので、全体Viewの権限+プロジェクトの権限を各ユーザーにアサインする。プロジェクトのメンバーには閲覧+ビルドのみ。プロジェクトの管理者にはジョブとビルドのすべての権限を付与しておくとよいだろう。 **Assign role [#jfb8d799] 前述のように全体Readのグローバル権限+プロジェクト単位の権限を二つ付与する必要がある。新規作成ユーザーは何も見れないので権限の作りすぎも要注意である。 *リモートからJOB実行 [#da7f1b9f] 設定画面でトークンを設定して、指定通りのURLをたたくと外部からJOBを実施できる。 *CUIツール [#c399f9b8] jarファイルのCLIが追加。jenkins.jarというものを実行する **CUIツールの入手 [#r85098fe] 起動しているhudsonからダウンロードする。 http://jenkinsURL/cli **実行 [#vf322fc6] ***バージョン情報取得 [#o4dd980e] java -jar jenkns.jar -s http://127.0.0.1:8080/ version ***コピー実行 [#eb020b66] java -jar jenkins.jar -s http://127.0.0.1:8080/ copy-job コピー元 コピー先 ***認証 [#keb73742] java -jar jenkins-cli.jar [-s JENKINS_URL] -auth kohsuke:abc1234ffe4a *逆引き [#c1b071c8] **複数選択のパラメータを渡したい [#la71a7c6] パラメータでテキストを用意しておくと、複数のパラメータがスペース区切りで出力される。 -出力例 JOB1 JOB2 JOB3 JOB4 **各ジョブで使うパラメータを外部ファイルで共通化したい [#x60c570f] Extended Choice Parameter pluginかExtensible Choice Parameter pluginを使う。名前が似ているが、よりダウンロード数の多いExtended Choice Parameter pluginを使ってみた。 ***Extended Choice Parameter plugin [#t93fb1c5] 設定でファイルからの読み込みやデリミタ―を指定してのパラメータ文字列を指定できる。複数選択パラメータも可能(A,B,Cのように出てくる)。複数JOB共通で使いたい場合はファイルにしておく。 -properitesファイルの例 param1=hoge,fuga,piyo param2=db1,db2,db3 ***下流ジョブの実行完了を待って、後続ジョブを実施したい→JOIN Plugin [#v2929d44] ただしJOINPluginが実行完了を待つのはビルド後のJOBに限る。 *プラグイン [#c4f38323] |ThinBackup|★★|設定バックアップ用。cronの書式で指定できる。世代管理もできるので便利!| |Workspace Cleanup|★|ワークスペース削除用プラグイン。gitなどで前回のコミット失敗した時を考えるとあったほうが良い| |Role Strategy Plugin|★★★|権限管理ができる| |Build Pipeline Plugin|★|上流、下流の関係が一目瞭然。ただし見るだけ| |Build Flow Plugin|★|DSLで制御できるらしいぞ!| |SSH Plugin|★★★|SSH操作実行| |Git Plugin|★|Gitと連携する場合に必要| |Categorized View Plugin|★|JOBビューの階層化| |Configuration Slicing Plugin|★|設定のコピー。ただ一部のみ対応の感じがあるが・・| |Copy Artifact Plugin|成果物をコピーするPlugin| |Copy To Slave Plugin|| |Join Plugin|複数のJOB到着を待って、後続JOBを流せるプラグイン| |Matrix Authorization Strategy Plugin|マトリックスベースの認証制限を実現する| |Parameterized Trigger Plugin|★★★|上流ジョブから下流ジョブへパラメータ引き継ぎができる| |Role Based Plugin|ロールによる認証制御を可能にする| |Timestamper Plugin|★★|コンソールに時間経過を出力する| |Extended Choice Parameter Plugin|選択肢リストを各ジョブで共有できる| Role Based Pluginの説明(有効にするには設定画面変更必要) http://techracho.bpsinc.jp/morimorihoge/2013_09_12/13642 -以下はおまけ系 |Emotional Jenkins Plugin|ビルド失敗でアイコンが変化| **build flow plugin 研究 [#z5004ca1] -並行制御は下流ジョブの終了までは考慮しない。各並行の中に下流ジョブを定義する -if文などが使える // パラメータの表示 out.println params // if if (params["TARGET_BRANCH"] == "master") { out.println "TARGET_BARNCH is master" } else { out.println "TARGET_BARNCH is not master" } join = parallel ([ first: { build("job1", param1: "passed by build flow", TARGET_BRANCH: params.TARGET_BRANCH) }, second: { build("job2") }, third: { build("job3") } ]) out.println join.first.result.name // job4 will be triggered after jobs 1, 2 and 3 complete build("job4") *設定ファイル(config.xml)を直接変更 [#ycd3a86b] たくさんのjobを扱う場合ブラウザ経由で操作するとめんどくさい。イレギュラーではあるが設定ファイルやディレクトリを直接変更した場合の反映方法をまとめた **JOBコピー [#n0f07afa] 初期状態ではユーザホームディレクトリに.hudsonというディレクトリができる。ここのjobsディレクトリにjob毎にディレクトリができているのでこいつをコピーする。 **JOBバックアップ [#j2798f60] バックアップするプラグインもあるが、他サーバーにJOBを移行したい場合にはjobs/ジョブ名/config.xmlをtarで固める。 cd $JENKINS_HOME find jobs/ -name "config.xml" -print0 | tar -cvz -T - --null -f /var/tmp/jenkinsjobs.tar.gz findとtarの間にxargsを使ってしまうと、アーカイブするファイル数が多い場合に tarが複数回起動されてしまい、すべてのファイルが含まれたアーカイブファイルを作れない。 **設定変更 [#da7c08bb] 各ジョブのディレクトリに入りconfig.xmlを変更する。 **設定反映 [#z3d4b8c5] そのままではhudsonのメモリ上にあるものが使われてしまう。故に強制的にファイルシステムから再読み込みさせる。これはメニューに用意されている。 [hudsonの管理]から[設定の再読み込み]を実行する。 **デバッグテクニックなど [#u7862c42] |環境変数の表示|シェルの実行でenv| **主な環境変数 [#df22c1d2] |WORKSPACE|JOBのワークスペース| |JENKINS_HOME|JENKINS全体のHOME| *トラブルシューティング [#pfb294e1] **ピン止めされたプラグイン [#kec8d927] このバージョンのJenkinsでは、プラグインマネージャーでピンが設定されている次のプラグインがインストールされています。ピンが設定されているプラグインを、少なくともJenkinsにバンドルされているバージョンにアップデートすることを推奨します。 Jenkins標準のプラグインはJenkins本体をアップデートしたときに合わせてアップデートされるが、バージョンを固定したい時がある。その場合に上記メッセージが出る。 **[No valid crumb was included in the request] [#z71ebe16] この場合、トークンチェックに引っかかっているようだ。 正常な遷移にもかかわらず出てしまう場合がある。 その場合「Jenkinsの管理」→「グローバルセキュリティの設定」の画面を開き CSRF対策をOFFにすることで回避できる。 #counter