我一直在努力尋找一種方法將Jenkins(從SVN拉)生成的變更列表包含到我們的Testflight筆記中。我使用Testflight插件,它有一個註釋字段 - 但似乎沒有任何jenkins創建嵌入該信息的參數/標記。獲取訪問Jenkins中的構建變更日誌
有沒有人有過這樣的事情?
我一直在努力尋找一種方法將Jenkins(從SVN拉)生成的變更列表包含到我們的Testflight筆記中。我使用Testflight插件,它有一個註釋字段 - 但似乎沒有任何jenkins創建嵌入該信息的參數/標記。獲取訪問Jenkins中的構建變更日誌
有沒有人有過這樣的事情?
看起來TestFlight插件擴展了放置在「Build Notes」字段中的變量,所以問題是:我們如何才能將當前構建的變化變爲環境變量?
據我所知,Subversion插件不通過環境變量提供這些信息。但是,所有Jenkins SCM插件都集成了更新日誌信息,您可以通過Web UI中的「更改」鏈接查看每個構建的信息。
即使構建正在進行中,也可以通過Jenkins API訪問此信息。
舉例來說,如果你加入,你運行該命令的 「執行shell」 構建步驟:
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文本到一個臨時文件:
CHANGELOG="New in this build:\n- First commit.\n- Second commit."
然後,通過使用與Environment Properties File Path選項生成步驟加載該文件時,$CHANGELOG
變量將存在在您的環境中並持續到構建結束,允許您在「構建註釋」字段中使用它。
注:我沒有用過TestFlight插件自己(雖然我參加了一個快速瀏覽一下代碼),而我只用一個Git倉庫測試的更改API。同樣,我沒有測試應如何使用EnvInject插件對新行進行編碼,因此可能會導致問題。
非常感謝你,克里斯托弗! – 2012-08-08 01:54:24
順便說一句,「然後你可以格式化這個信息,但你喜歡」 - 我用:'sed -e「s/<\/*comment> // g」| sed'/^$/d; G'去掉XML'
爲了得到多個變化消息的乾淨的輸出,我用@ makdad的這種變化: '的sed -e「S/<\/comment> //克; S/
Testflight插件爲此提供了一個選項。這裏的承諾:
https://github.com/jenkinsci/testflight-plugin/commit/e8edfef012d4bdefb95ee24818891a27ac920a36
我沒有看到它在最近testflight-插件的發行,所以我從建git的插件,並有這個選項。
如果testflight作爲下游項目運行,這不會對您有所幫助。 – 2013-11-13 09:24:13
我用這一個在這裏找到:http://jenkins.361315.n4.nabble.com/Get-SVN-changes-td3511042.html
${CHANGES, showPaths=true}
很簡單,它爲SVN。
這似乎是email-ext插件的一個功能,所以它可以用於在電子郵件中發送更改日誌,但不能在其他地方發送。 – 2015-07-11 13:47:52
我做這覆羽XML來更新日誌一些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
鑑於詹金斯日誌改變了形式,我更新原始帖子中的XML內容。此外,由於原始TestFlight死亡,並且插件現在已經過時,我將內容放入HTML文件以供HockeyKit使用。它確實是一個帶有換行符的文本文件。製作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環境變量,應該存在於任何安裝中。
對於jenkins服務器的認證,curl部分應該是不同的 – 2015-11-12 17:19:14
實際上,通過讀取/解析生成文件夾中的../builds/$BUILD_NUMBER/changelog.xml文件,您可以在生成階段完成之前訪問該信息。 這個文件是在SVN/GIT提交觸發的情況下創建的,而不是在build或post_build階段結束時創建的。這意味着,您可以使用腳本在同一作業的構建階段開始時解析它,並將數據插入到env變量中。
這是如果你不想使用curl和XML。
我需要完全一樣的東西。謝謝你提出這個問題,我更感激你的答案。 – makdad 2012-09-06 02:43:49