#author("2023-04-08T23:38:52+00:00","default:hotate","hotate")
#author("2023-11-02T11:38:22+00:00","default:hotate","hotate")
#contents
&tag(Jenkins);

* 目次 [#r2b2e7f4]
#taglist(tag=Jenkins)

* 情報 [#e7ce85a1]
- http://jenkins-ci.org/
- [[Jenkins のちょっと変わった機能のURL一覧 - 地平線に行く>http://d.hatena.ne.jp/chiheisen/20150425/1429975385]]

** [[2022]]年 [#ma900160]
- [[JenkinsがJava 8の対応を終了し、Java 11が必須に。Java 17の対応も開始 - Publickey>https://www.publickey1.jp/blog/22/jenkinsjava_8java_11java_17.html]] (2022/07/07)
 これまでJenkinsはJava 8もしくはJava 11を実行環境としていましたが、Java 8の対応がなくなることになります。

** 再起動 [#mf5f4399]
- [[Jenkins、Webから再起動する - 技術メモ>http://d.hatena.ne.jp/gnarl/20111122/1321938292]]
 http://{JENKNS_HOST}/safeRestart

** アイコン [#l11c8c95]
- [[Jenkins Artwork>https://www.jenkins.io/artwork/]]
 This page simply catalogues the many clever variations of Jenkins created by members of the Jenkins community.

* [[書籍]] [#t2aad247]
- [[[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus) | Amazon>https://amzn.to/2T144Qy]]
-- コメント:分かりやすい。オススメ。(2018/12/23)

* 動作環境 [#q64752e2]
** [[Homebrew]] [#v71b433d]
- [[OS XにJenkinsをHomebrewでセットアップする - Qiita [キータ]>http://qiita.com/makoto_kw/items/cbe93d4ebbc35f3b43fd]]

** [[Java]] [#m05ad50e]
- [[JenkinsとOpenJDK 8とJava 11についての考察 - Qiita>https://qiita.com/tomonorimatsumura/items/1774016dbcd4048ff7b8]]
 - 今後2年から3年は Java 8とJava 11 両方を主軸に開発する
 - コミュニティーとしてはJava 8と直ちに決別するような急激な変化は望んでいない


* API [#x5bd6304]
- [[Jenkins APIでジョブ情報を取得する - Qiita>http://qiita.com/tamikura@github/items/033ab9180561b6232509]]
 http://<jenkins host>/api/json


** [[セキュリティ]](CSRF:[[クロスサイトリクエストフォージェリ]])[#va4f676c]
- [[Remote access API - Jenkins - Jenkins Wiki>https://wiki.jenkins.io/display/JENKINS/Remote+access+API]]
 CSRF Protection
 If your Jenkins uses the "Prevent Cross Site Request Forgery exploits" security option (which it should), 
 when you make a POST request, you have to send a CSRF protection token as an HTTP request header.
- [[CSRF Protection Explained – CloudBees Support>https://support.cloudbees.com/hc/en-us/articles/219257077-CSRF-Protection-Explained]]
 How do I enable CSRF protection?
 curl -u "admin:admin" 'http://localhost:8080/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
- [[api - How to request for Crumb issuer for jenkins - Stack Overflow>https://stackoverflow.com/questions/16738441/how-to-request-for-crumb-issuer-for-jenkins]]

** [[Ruby]] [#m898bff2]
- [[arangamani/jenkins_api_client: Ruby Client libraries for communicating with Jenkins Remote Access API>https://github.com/arangamani/jenkins_api_client]]
 Ruby Client libraries for communicating with Jenkins Remote Access API 


* アプリケーション連携 [#v57175d1]
- [[Growl]]
-- [[Hudson Growl Pluginでビルド結果をGrowlへ通知>http://unicus.jp/skmk/archives/361]]


* 関連 [#i3e75743]
#taglist(tag=Jenkins)


* 設定 [#zc9f8299]
** [[macOS]] [#d8b6356d]
- [[Starting and Accessing Jenkins - 日本語 - Jenkins Wiki>https://wiki.jenkins-ci.org/display/JA/Starting+and+Accessing+Jenkins]]
 $ java -jar jenkins.war --httpPort=9000 --ajp13Port=9001 --prefix=/jenkins
- [[Jenkins on Mac OS Xでの、出力結果の文字化けを解消する - 高尾宏治日記 on はてな>http://d.hatena.ne.jp/kouji0625/20130628/p1]]
 javaArgs="-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
- [[Jenkinsの起動オプションを細かく指定して起動 - Qiita [キータ]>http://qiita.com/quattro_4/items/769f875baa17ce4725e8]]
 細かいカスタマイズをする場合はシェルの方が扱いやすい
- [[Jenkinsのセッションタイムアウトの設定 - Qiita>http://qiita.com/ayweak/items/f60b1f83387de7261066]]
 jenkins.xml の <arguments>...</arguments> の中の末尾に --sessionTimeout=1440 (1440 分) と追記して Jenkins サービスを再起動
- [[jenkins ユーザーが ant を実行できないときの対処法 · 1000g>http://1000k.github.io/2013/07/02/jenkins-user-cannot-run-ant/]]
 キー: PATH
 値: ${PATH}:/usr/local/bin
-- コメント:[[Homebrew]]で導入したツールの場合、[[Homebrew]]を優先させる為、/opt/homebrew/bin:${PATH} と設定する。(2022/05/02)


** [[Apache]]用の設定 [#kd531a2e]
 <Location /jenkins>
    ProxyPass http://localhost:8080/jenkins
    ProxyPassReverse http://localhost:8080/jenkins
 </Location>


** [[Subversion]]連携 [#fba078d6]
- [[Subversion Plugin - Jenkins - Jenkins Wiki>https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin]]
- [[Subversion]]コミットをトリガーにして、Jenkinsへ通知させることが出来る(トークン使用)。
-- 事前にプロジェクトの設定にてトークンを登録しておく必要あり。
-- 但し、ジョブを非公開にしている場合、wgetでAPIを呼び出しても404が返ってしまう。
 wget http://127.0.0.1/jenkins/job/ProjectFoo/build?token=xxxx
-- そこで認証情報を一緒に渡せば良い。
--- [[Monitoring external jobs - 日本語 - Jenkins Wiki>https://wiki.jenkins-ci.org/display/JA/Monitoring+external+jobs]]


** [[セキュリティ]] [#pd68cb9b]
 System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "default-src 'self'; img-src 'self'; style-src 'self';")
 System.getProperty("hudson.model.DirectoryBrowserSupport.CSP")
 <string>-Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; img-src 'self'; style-src 'self';"</string>


** [[LDAP]] [#j753a68f]
- [[CI/CD関連ツールのユーザー情報をLDAPで一元管理してみる>https://qiita.com/kazuki43zoo/items/0d4e5c22d7c76fc3c76f#jenkins]]
 「Test LDAP settings」ボタンをクリックすると、設定内容が正しいか確認することができる。画面キャプチャでは、uid=kazukiを使って接続テストした後の状態になっている。
- [[jenkinsci/ldap-plugin>https://github.com/jenkinsci/ldap-plugin]]
 This plugin provides yet another way of authenticating users using LDAP.
- [[jenkins - LDAPフィルターでの{数値}の意味は? - ITツールウェブ>https://ja.ojit.com/so/jenkins/2270123]]
 これはLDAP仕様の一部ではありません。これは、Jenkins LDAPプラグインによって提供される拡張機能

** パイプライン [#z22dea59]
- [[JenkinsでDeclarative Pipelineを使ったアレコレ(2019/3現在) - Qiita>https://qiita.com/mas0061/items/7024169f306390aa1717]]
 見つけたのが、Jenkins公式で開発されている warnings-ng-plugin 。
 プラグインの ng はNext Generationなので、今後はこっちを開発していく方針っぽい。
 このプラグインは、静的解析ツールが出した警告や問題を収集して視覚化してくれる。


** [[プロキシ]] [#tb024054]
- [[JenkinsからMavenを自動インストールした場合のProxy設定 - Qiita>https://qiita.com/kinunori/items/96cfbf26f661f9b383ea]]
 MavenのProxy設定を記述するsettings.xmlのパス
 /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/"Jenkins上から入力したMaven名"/conf/settings.xml
-- コメント:(1) まず[[Jenkins]]プラグインの[[プロキシ]]設定で[[Maven]]をインストールし、(2)次に[[Maven]]が使うプロキシを上記で設定する。ただし、[[Windows11]]では下記の設定でも正常に機能した。(2023/11/02)
 ~/.m2/settings.xml
- [[Jenkinsのプラグイン管理でHTTPプロキシを設定するとGitプラグインがそのHTTPプロキシ設定を使ってリポジトリにアクセスしてしまう - torutkのブログ>https://torutk.hatenablog.jp/entry/20160130/p1]]
 回避策は、Jenkinsのプラグインの管理でHTTPプロキシの設定の対象外ホストにHTTPプロキシ経由でないGitリポジトリを指定します。


* [[バックアップ]]ジョブ [#y17a18d4]
** [[macOS]]のサイト [#od4a28bb]
 src_path=/Users/foo/Sites
 dst_archive=Sites_$BUILD_ID.zip
 ditto -v -c -k --keepParent $src_path $dst_archive
 find . -type f -name "Sites_*" -mtime +8 -exec rm -f {} \;

** [[Subversion]]リポジトリ [#tb04f171]
 src_path=/Users/foo/svn
 for svnrep in $src_path/*
 do
   if [ -f $svnrep/format ]; then
     svnadmin dump $svnrep | gzip > svn_${svnrep##*/}_$BUILD_ID.svn.gz
   else
     echo ' -Not svn repository: '$svnrep
   fi
 done
 find . -type f -name svn_*.svn.gz -mtime +7 -exec rm -f {} \;

** [[Trac]] [#d8c0953e]
 # source folder path for backup
 src_path=/foo/data/trac
 rm -rf ./trac 
 for tracrep in $src_path/*
 do
 if [ -f $tracrep/VERSION ]; then
   echo ' -Trac repository: '$tracrep
   /opt/local/bin/trac-admin-2.6 $tracrep hotcopy trac/${tracrep##*/}
 else
   echo ' -Not trac repository: '$tracrep
 fi
 done
 
 # archive
 zip -r trac_$BUILD_ID.zip trac
 
 # move the archives
 mv trac_*.zip /foo/backup/


* ビルド [#g411927f]
** [[curl]] [#k98eb070]
- [[Jenkins のジョブを外部からビルドするには API Token を利用する - @kyanny's blog>https://blog.kyanny.me/entry/2014/12/20/020700]]
 $ curl -X POST -u kyanny:xxxxxxxx http://jenkins.example.com/JOB_NAME/build

** [[PowerShell]] [#f94f2caf]
- [[PowerShellでJenkinsのビルドを実行する - Qiita>https://qiita.com/HiDARi/items/4a1532d11ee3b42061a7]]
 PowerShellからリモートビルドを行うには,PowerShell3.0で導入されたInvoke-WebRequestコマンドレットを使うのが簡単です.


* ジョブ [#b481ad1b]
** [[PowerShell]] [#v10ab51f]
- [[JenkinsでPowerShellを使う際の注意事項 - Qiita>https://qiita.com/Helicobacter_pylori/items/9d442c9050eacdbf56ad]]
 ここでは、JenkinsからPowerShellで複数のマシンをコントロールする際にハマりやすいところを中心にメモしておきます。


** Jennkinsfile [#w3d42583]
- [[Jenkinsfileの書き方 - Qiita>https://qiita.com/lufia/items/18cdb01f86a6d5040c60]]
 現状のJenkinsfileは2通り書き方があって、pipelineがルートになっている場合はDeclarative Pipelineという。この場合は、Groovyスクリプトを直接書くことができず、Groovyを書きたければscriptディレクティブを使う必要がある。この記事では主にこちらを扱う。
- [[jenkinsのpipeline入門(jenkinsfile) - SIerだけど技術やりたいブログ>http://kimulla.hatenablog.com/entry/2017/01/31/002055]]
 本記事は scripted pipeline の書き方です。

** [[シェルスクリプト]] [#lf9a5aa4]
- [[Jenkinsのシェルの実行について - Qiita>https://qiita.com/mechamogera/items/f689b95670127d5bf046]]
 オプション-x:シェルスクリプト内で実際に実行されたコマンドを表示する
 オプション-e:0でない終了コードを返した時点でスクリプトがexitする
- [[Jenkinsで使うシェルスクリプトは-xeつけた方がよかった - くりにっき>https://sue445.hatenablog.com/entry/2014/05/23/143737]]
 エラーが起きたらそこで中断されてステータスコードも非0が返却

** コンソールログ [#edabc5c0]
- [[Jenkins "Console Output" log location in filesystem - Stack Overflow>https://stackoverflow.com/questions/37386581/jenkins-console-output-log-location-in-filesystem]]
-- コメント:下記を使うとコンソールログを[[grep]]出来た。(2020/02/16)
 logFilename=${JENKINS_HOME}/${JOB_URL:${#JENKINS_URL}}
 logFilename=${logFilename//job\//jobs\/}builds/${BUILD_NUMBER}/log
 grep "**Failure**" ${logFilename} ; exitCode=$?
 [[ $exitCode -ne 1 ]] && exit 1
- [[【Jenkins】ジョブのログから成功/失敗を判定|かびねこ|note>https://note.com/kabineko/n/nbd56d7468d63]]
 「ビルドログを解析して特定の文字があったらジョブを失敗扱いにできるよ!」というネ申プラグインがあるらしい。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS