2012-08-06 8 views
36

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

誰もこのようなことを成し遂げたことはありませんでしたか?

+0

全く同じものが必要でした。この質問をいただきありがとうございます。私はその答えにさらに感謝しています。 – makdad

答えて

33

TestFlight Pluginは「ビルドノート」フィールドに変数を展開するように見えるので、問題は次のとおりです。現在のビルドの変更を環境変数にどのように取得できますか?

私の知る限り、Subversionプラグインはこの情報を環境変数で提供していません。しかし、すべてのJenkins SCMプラグインは、ビルドごとにWeb UIの「変更」リンクから確認できるように、変更履歴情報を統合します。

この情報は、ビルドの進行中であってもJenkins API経由でも利用できます。例えば

、あなたは、このコマンドを実行する "シェルの実行" ビルドステップ追加した場合:

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

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

あなたはこれに似たXMLドキュメントを取得しますがこの情報を書式設定することができますが、それを環境変数に入れてTestFlightの "Build Notes"セクションで参照することができます。

ただし、ビルドステップで環境変数を設定することは、デフォルトでは永続的ではありません。—にするには、EnvInject Pluginを使用する必要があります。この場合は、あなたのような内容で一時ファイルにあなたのchangelogのテキストを書くことができ

:次に

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

、このファイルをロードするためにEnvironment Properties File Pathオプションを使用してビルドステップを使用することにより、$CHANGELOG変数が存在することになりますあなたの環境で "ビルドノート"フィールドでそれを使用できるようにビルドの終わりまで持続してください。


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

+0

ありがとう、クリストファー! –

+6

ところで、 "この情報を好きなようにフォーマットすることができます" - 私は使用しました: 'sed -e" s/<\/*comment> // g "| XML ''タグを取り除いて改行を整理するにはsed '/^$/d; G''を使用してください。 – makdad

+0

複数の変更メッセージのクリーンな出力を得るために、私は@ makdadの上で、このバリエーションを使用: 'sedの-e「S/<\/comment> //グラム; S//\トン*/gであり、s/<\/*changes> //グラム"| sed '/^$/d; G'' –

0

Testflightプラグインにはオプションがあります。私が最も最近のtestflight - プラグインのリリースでそれを見ていないので、私はgitのからプラグインを建て

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

、それは、このオプションがあります。ここにコミットです。

enter image description here

+0

testflightが川下のプロジェクトとして実行されている場合、これは役に立ちません。 –

4

私はこの1つを使用していますここで見つける:http://jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html

${CHANGES, showPaths=true} 

非常にシンプルで、それはSVNのために働きます。

+2

これはemail-extプラグインの機能だと思われますので、変更履歴を電子メールで送信することはできますが、他の場所ではできません。 –

2

私は、

note.xmlが

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

実際のPythonコードでなければならない変更ログにXMLを隠れ家いくつかの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 
7

未満で作られ元の投稿から更新された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の環境変数であり、どのinstalationにも存在するはずです。

+0

認証を使用しているジェンキンサーバーでは、カール部分が異なる必要があります。 –

2

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

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

関連する問題