Jenkins によって (SVN プルから) 生成された変更のリストを Testflight ノートに含める方法を見つけるために、私は頭を悩ませてきました。メモ用のフィールドがあるTestflightプラグインを使用していますが、その情報を埋め込むためにジェンキンスが作成するパラメーター/トークンはないようです。
誰かがこのようなことを達成したことがありますか?
Jenkins によって (SVN プルから) 生成された変更のリストを Testflight ノートに含める方法を見つけるために、私は頭を悩ませてきました。メモ用のフィールドがあるTestflightプラグインを使用していますが、その情報を埋め込むためにジェンキンスが作成するパラメーター/トークンはないようです。
誰かがこのようなことを達成したことがありますか?
TestFlight プラグインは「Build Notes」フィールドに配置された変数を展開するように見えるので、問題は、現在のビルドの変更を環境変数にどのように取得できるかということです。
私の知る限り、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 プラグインを使用したことがなく (コードをざっと見てみましたが)、Git リポジトリを使用して変更 API のみをテストしました。同様に、EnvInject プラグインで改行をエンコードする方法をテストしなかったため、問題が発生する可能性があります。
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 環境変数であり、どのインストールにも存在する必要があります。
ここにあるものを使用しています:http://jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html
${CHANGES, showPaths=true}
非常にシンプルで、SVN で動作します。
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
実際、ビルド フォルダー内の ../builds/$BUILD_NUMBER/changelog.xml ファイルを読み取り/解析することで、ビルド フェーズが終了する前にその情報にアクセスできます。このファイルは、ビルドまたは post_build フェーズの終了ではなく、SVN/GIT コミットのトリガーで作成されます。つまり、同じジョブのビルド フェーズの開始時にスクリプトを使用して解析し、env 変数にデータを挿入できます。
これは、curl と XML を使用したくない場合です。