概要

Jenkinsの設定、トラブルに関するメモなどを記述しています。

トラブル

GIT_ASKPASS credentials

  • Jenkinsgitコマンドを使用するとき、資格情報が入力されるのを待ち続けてタイムアウトしてしまう場合がある
     > C:\Program Files\Git\bin\git.exe --version # timeout=10
    using GIT_ASKPASS to set credentials ユーザ名
     > C:\Program Files\Git\bin\git.exe fetch --tags --progress http://example.com/git/test +refs/heads/*:refs/remotes/origin/*
    ERROR: Timeout after 10 minutes
    ERROR: Error fetching remote repo 'origin'
    

diskcheckプラグインでArrayIndexOutOfBoundsException

  • diskcheck0.29にするとArrayIndexOutOfBoundsExceptionが発生してビルドに失敗する場合がある?
    • DiskCheck Plugin - Jenkins - Jenkins Wiki
    • 0.29に更新前はTotal Disk Space Available is: 26Gbほど空き容量はある状態
    • Windows 7 64bit + Jenkins 2.66で発生
    • CentOS release 6.8 (Final) + Jenkins 2.66は問題なし
SCMのポーリングが実行
ビルドします。 ワークスペース: ********************
Disk space threshold is set to :0Gb
Checking disk space Now 
FATAL: 62
java.lang.ArrayIndexOutOfBoundsException: 62
	at org.jenkinsci.plugin.Diskcheck.preCheckout(Diskcheck.java:122)
	at jenkins.scm.SCMCheckoutStrategy.preCheckout(SCMCheckoutStrategy.java:76)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:484)
	at hudson.model.Run.execute(Run.java:1735)
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
	at hudson.model.ResourceController.execute(ResourceController.java:97)
	at hudson.model.Executor.run(Executor.java:415)
[WARNINGS] Skipping publisher since build result is FAILURE
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in  5 second
Finished: FAILURE

PipelineでStackOverflowError

Started by user TERAI Atsuhiro
 > git rev-parse --is-inside-work-tree # timeout=10
Setting origin to https://github.com/aterai/java-swing-tips
 > git config remote.origin.url https://github.com/aterai/java-swing-tips # timeout=10
Fetching origin...
Fetching upstream changes from origin
 > git --version # timeout=10
 > git fetch --tags --progress origin +refs/heads/*:refs/remotes/origin/*
Seen branch in repository origin/master
Seen 1 remote branch
Obtained Jenkinsfile from ...
[Pipeline] End of Pipeline
java.lang.StackOverflowError
	at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
	at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:242)
	at java.io.File.exists(File.java:819)
	at sun.misc.URLClassPath$FileLoader.getResource(URLClassPath.java:1282)
	at sun.misc.URLClassPath$FileLoader.findResource(URLClassPath.java:1249)
	at sun.misc.URLClassPath.findResource(URLClassPath.java:215)
	at java.net.URLClassLoader$2.run(URLClassLoader.java:569)
	at java.net.URLClassLoader$2.run(URLClassLoader.java:567)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findResource(URLClassLoader.java:566)
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:546)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at com.sun.beans.finder.ClassFinder.findClass(ClassFinder.java:103)
	at com.sun.beans.finder.InstanceFinder.instantiate(InstanceFinder.java:93)
	at com.sun.beans.finder.InstanceFinder.find(InstanceFinder.java:66)
	at java.beans.Introspector.findExplicitBeanInfo(Introspector.java:448)
	at java.beans.Introspector.<init>(Introspector.java:398)
	at java.beans.Introspector.getBeanInfo(Introspector.java:173)
	at groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:3313)
	at java.security.AccessController.doPrivileged(Native Method)
	at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:3311)
	at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3288)
	at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:260)
	at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:302)
	at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:312)
	at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:265)
	at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:879)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:125)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:166)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
	at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:52)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
	at com.cloudbees.groovy.cps.CpsTransformer.visit(CpsTransformer.groovy:279)
...

インストール後ジョブがなければ再起動が無効

  • 最近のWeekly版(2.5x頃?)は、「インストール完了後、ジョブがなければJenkinsを再起動する」でジョブが実行中でも再起動されてしまい、ビルドが失敗する?
  • 「ビルドを並列実行」を「しない」にしているビルドを複数を実行すると、後から実行したビルドがビルドキューに入らず、並列実行されてしまう
    • 「システムの設定」で「同時ビルド数」を1にすれば、並列実行されなくなる
    • Jenkins Security Advisory 2017-04-26
      • SECURITY-412: Restart Jenkins immediately, after all builds are finished, or after all plugin installations and builds are finished
    • ジョブがエラーにはならなくなったが、実行中のジョブの終了は待たずにキャンセル扱いになる?

1.597でフォルダ構成が変更

  • Jenkins1.597にアップグレードしたら表示がおかしくなる
    • 1.597で、JENKINS_HOME以下のフォルダ構成が変更になった
    • Exceptionをみると、Disk usage pluginがフォルダ文字列をパースできずにエラーを出している
    • Important: Upgrading to Jenkins 1.597
    • 修正はまだスナップショットなので、当面Disk usage pluginを削除しておくことで対応

Jenkinsの自動更新に失敗

リポジトリブラウザの設定が保存されない

Jenkinsの設定

  • ホームディレクトリ(Windows環境)
    • デフォルトの~/.jenkinsに実行ファイルやビルド結果を一緒に保存すると、バックアップなどが面倒
    • C:\Program Files (x86)\Jenkins\jenkins.exejenkins.warをインストールするとjenkins.xmlなどが編集しづらいので、C:\Jenkins以下にインストールする
    • システム環境変数JAVA_HOMEで指定したバージョンのJavaJenkinsが使用するようにC:\Jenkins\jenkins.xmlを変更
      • <executable>%JAVA_HOME%\bin\java</executable>
  • 高度な設定(Jenkinsの管理、システムの設定にあるボタンをクリック)
    • ワークスペース・ルートディレクトリ: C:/HogeHoge/${ITEM_FULLNAME}
    • ビルド・ルートディレクトリ: ${ITEM_ROOTDIR}/builds

Jenkinsfile

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git url: 'https://github.com/aterai/java-swing-tips.git'
            }
        }
        stage('PMD') {
            steps {
                sh "~/.sdkman/candidates/ant/current/bin/ant -file all.xml pmd"
                step([$class: 'PmdPublisher', pattern: '**/pmd.xml'])
            }
        }
        stage('CheckStyle') {
            steps {
                sh "~/.sdkman/candidates/ant/current/bin/ant -file all.xml checkstyle"
                step([$class: 'CheckStylePublisher', pattern: '**/checkstyle-result.xml'])
            }
        }
    }
}

プラグイン

GIT plugin

  • Git cliant pluginも一緒にインストールされる
    • ログのエンコーディングが変更できない
      • ログの文字コードをShift_JISにカスタマイズする
      • 2.3.5付近で修正された?ようなので、変更は不要になった

Warnings Plug-in

コメント