2

ここで私の質問を続けます: Jenkins pass or fail build on external executable

私のビルド プロセスは、MS Build を使用してソースからビルドし、ビルド プロセスの一部としてカスタム プログラムを実行するようになりました。プログラムでコンソールに書き込んでいるものはすべて、コンソール出力に記録されています。

ただし、ユーザーインターフェイスの「変更」および/または「ステータス」部分にいくつかのエントリを記録したいと思います(SVNと同様)。

これはどのように行うことができますか?

4

4 に答える 4

2

ビルドごとに通常の Jenkins の「変更」リンクに独自のログを追加するために行ったことは次のとおりです。チェックアウトや更新などを行うために、(svnant を使用して) svn ant ルーチンを作成する必要がありました...

それを機能させるための私のトリック:
1.)「ソースコード管理」の下に「Subversion Modules」を追加します。セクションには記入しないでください。何もチェックしたくありません。作成した changelog.xml ファイルを Jenkins に表示させるには、これを行う必要があります。そうしないと、存在する可能性がありますが、Jenkins は表示しません。ジョブの config.xml ファイルでは、これがないと SCM...null... が表示されます。空の svn リポジトリを追加すると、svn を使用していると見なされ、changelog.xml が表示されます。(これがいつまで機能するか誰が知っていますか?)

ビルドでは、これらの手順を次の順序で実行する必要があります
。 2.) create-changelog ターゲットを記述します。ビルド フォルダーでコードのリビジョンを見つける必要があります。svn でコードのリビジョンを見つけます。start-rev から stop-rev まで svn log asXml="true" または "--xml" を実行します。${Jenkins_Home}/jobs/${MYJOB}/builds/${BUILD_NUMBER}/changelog.xml を作成する必要がある場合は、複数のログ ファイルを連結します。

3.) 必要に応じて $workspace 領域を削除できるようになりました。

4.) 更新の svn チェックアウト

5.) ビルド

6.) ビルド後、「変更」リンクに changelog.xml が表示されます

私が抱えていた問題:
scm ポーリングはタグを実行しませんでした。
scm url の柔軟性が十分ではありませんでした。
groovy-postbuild-plugin がジェンキンスの UI を台無しにしてしまったため、現時点では使用できませんでした。
sidebar-link-plugin では、ビルドごとに実行できないようです。ビルド履歴用の他のプラグインで何かできるかもしれませんが、この時点では追求しませんでした。

于 2014-02-18T21:32:37.810 に答える
1
// This is a deliciously convoluted and fragile hack to force Jenkins to show the
// changes via a Groovy Postbuild script:

// fake a Subversion changelog.xml file
changes = new File(manager.build.getRootDir(), "../../workspace/changes.txt")
changelog = new File(manager.build.getRootDir(), "changelog.xml")
changelog.withWriter {
  out ->
out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?><log><logentry revision=\""
  + manager.build.number + "\"><date>"
  + new java.util.Date() + "</date><paths>")
message  = ""
changes.eachLine {
   line ->
     if (line.startsWith("./")) line = line.substring(2)
     if (!".checksums".equals(line)) {
       out.println("<path action=\"M\">" + line + "</path>")
       message += line + "\n"
    }
   }
  out.println("</paths><msg>" + message + "</msg></logentry></log>")
}

// get an instance of the SubversionChangeLogParser
import java.net.URL;
import java.net.URLClassLoader;
baseDir = new File(jenkins.model.Jenkins.getInstance().getRootDir(),
  "plugins/subversion/WEB-INF/")
urls = new URL[2];
urls[0] = new File(baseDir, "classes/").toURI().toURL() 
urls[1] = new File(baseDir, "lib/svnkit-1.3.4-hudson-2.jar").toURI().toURL() 
loader = new URLClassLoader(urls,  manager.getClass().getClassLoader())
svn = loader.loadClass("hudson.scm.SubversionChangeLogParser").newInstance()

// force the current build to take that parser, parse the changelog.xml,
// and force it down AbstractBuild's throat, too
scmField = manager.build.getClass().getSuperclass().getSuperclass().getDeclaredField("scm")
scmField.setAccessible(true)
scmField.set(manager.build, svn)

changeSet = svn.parse(manager.build, changelog)
changeSetField = manager.build.getClass().getSuperclass().getSuperclass().getDeclaredField("changeSet");
changeSetField.setAccessible(true)
import java.lang.ref.WeakReference;
if (changeSetField.getDeclaringClass().isAssignableFrom(WeakReference.class))
  changeSet = new WeakReference(changeSet)
changeSetField.set(manager.build, changeSet)
于 2013-04-24T04:16:11.657 に答える
0

再び私:)

スペクトルの最も単純な端では、サイドバーに別のリンクを追加するだけで、「変更」および「ステータス」リンクとともに、サイドバーリンクプラグイン
https://wiki.jenkins-ci.org/display/JENKINSがあります。 /サイドバーリンク+プラグイン

ジョブ ページ (個々のジョブの実行ではありません) にリンクを作成できます。このリンクは、絶対または相対 (ジョブの構成) の場所にリンクできます。以下をリンク URL に入れることで、ワークスペース内のファイルを参照できます。

ws/my_output.txt

ただし、これはファイルが常にワークスペースに存在することを意味し、せいぜい最後のジョブ実行の結果を表示するだけです。また、リンクをクリックすると、ワークスペース内のファイルに移動し、残りの Jenkins UI は表示されなくなります。

より高度なアプローチは、Groovy Script
https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Pluginを使用することです

例 #1 と #6 を見てください
ここに画像の説明を入力 ここに画像の説明を入力

黄色の感嘆符アイコンの横にあるものは、このプラグインによってジョブのステータス ページに追加されたもので、完全にカスタマイズ可能で、HTML コードを使用できます。ただし、これには Groovy スクリプトの知識が必要ですが、例は簡単に何かを行うのに十分です

于 2012-11-29T17:54:08.907 に答える