web-dev-qa-db-ja.com

Jenkinsでビルド変更ログにアクセスする

私は、Jenkinsによって生成された変更のリスト(SVNプルから)をTestflightノートに含める方法を見つけようとして、髪を引っ張ってきました。メモ用のフィールドがあるTestflightプラグインを使用していますが、jenkinsがその情報を埋め込むために作成するパラメーター/トークンはないようです。

誰かがこのようなことを達成する運がありましたか?

37
Jim Weinhart

TestFlightプラグインは、「ビルドノート」フィールドに配置された変数を展開するように見えるので、問題は、現在のビルドの変更を環境変数にどのように取得できるかです。

私の知る限り、Subversionプラグインは環境変数を介してこの情報を提供しません。ただし、すべてのJenkins SCMプラグインは、各ビルドのWeb UIの[変更]リンクで確認できるように、変更ログ情報を統合します。

この情報は、ビルドが進行中であっても、Jenkins APIを介して利用できます。

たとえば、このコマンドを実行する「シェルの実行」ビルドステップを追加する場合:

curl -s "http://jenkins/job/my-job/$BUILD_NUMBER/api/xml?wrapper=changes&xpath=//changeSet//comment"

次のようなXMLドキュメントを取得します。

<changes>
  <comment>First commit.</comment>
  <comment>Second commit.</comment>
</changes>

次に、この情報を好きなようにフォーマットして、TestFlightの「ビルドノート」セクションで参照できる環境変数に配置できます。

ただし、ビルドステップで環境変数を設定することはデフォルトでは永続的ではありません—そのためには EnvInject Plugin を使用する必要があります。

この場合、次のような内容の変更ログテキストを一時ファイルに書き込むことができます。

CHANGELOG="New in this build:\n- First commit.\n- Second commit."

次に、ビルドステップを使用して 環境プロパティファイルパス オプションを使用してこのファイルをロードし、$CHANGELOG変数は環境内に存在し、ビルドの最後まで持続するため、[ビルドノート]フィールドで使用できます。


注:私は自分でTestFlightプラグインを使用していません(コードを簡単に調べましたが)、変更APIをテストしたのはGitリポジトリ。同様に、改行をEnvInjectプラグインでエンコードする方法をテストしなかったため、問題が発生する可能性がありました。

34
Christopher Orr

Jenkinsログの形式が変更されたため、元の投稿のXMLコンテンツを更新しました。また、元のTestFlightが終了し、プラグインが廃止されたため、HockeyKitで使用するためにコンテンツをHTMLファイルに押し込んでいます。これは実際には改行付きのテキストファイルです。 sedの挿入改行を作成するのは困難です。一見すると、文字列は(少なくとも私には)非常にわかりにくいように見えます。

#for distribution in projects
Changelog=$(curl "${BUILD_URL}api/xml?wrapper=changes&xpath=//changeSet//item//msg" | sed -e "s/<\/msg>//g; s/<msg>/\\`echo -e '\r'`/g; s/<\/*changes>//g" )

# Write result to properties file
echo -e "$Changelog" > "${BuildDestinationPath}/"${BUILD_NUMBER}.html

注編集:BuildDestinationPathとChangelogはローカル変数です。キャップ内の変数はJenkins環境変数であり、インストール時に存在する必要があります。

7

私はここにあるこれを使用しています: http://jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html

${CHANGES, showPaths=true}

非常にシンプルで、SVNで機能します。

4
ferventcoder

XmlをCHANGELOGSに変換するpythonの例を作成しました

note.xmlは

<changes>
      <msg>First commit.</msg>
      <msg>Second commit.</msg>
</changes>

実際のpythonコードは以下

from xml.etree.ElementTree import parse
tree = parse("note.xml")
root = tree.getroot()
sentence = 'CHANGELOG =\"' 
cnt = 1
for element in root.findall('msg'):
    tempstring = element.text
    tempstring =str(cnt)+'. '+'\\n'.join(tempstring.splitlines())
    sentence =sentence +tempstring +'\\n'
    cnt = cnt +1
sentence = sentence + '\"'
print sentence
2
I.C.Baek

実際、ビルドフォルダー内の../builds/$BUILD_NUMBER/changelog.xmlファイルを読み取り/解析することにより、ビルドフェーズが完了する前にその情報にアクセスできます。このファイルは、ビルドまたはpost_buildフェーズの終了時ではなく、SVN/GITコミットトリガーで作成されます。つまり、同じジョブのビルドフェーズの開始時にスクリプトを使用して解析し、環境変数にデータを挿入できます。

これは、カールとXMLを使用したくない場合です。

2
Joniale

Testflightプラグインには、このためのオプションがあります。コミットは次のとおりです。

https://github.com/jenkinsci/testflight-plugin/commit/e8edfef012d4bdefb95ee24818891a27ac920a36

最新のtestflight-pluginリリースでは見られなかったので、gitからプラグインをビルドし、このオプションがあります。

enter image description here

0
Kirby Todd