2012-08-06 41 views
36

我一直在努力尋找一種方法將Jenkins(從SVN拉)生成的變更列表包含到我們的Testflight筆記中。我使用Testflight插件,它有一個註釋字段 - 但似乎沒有任何jenkins創建嵌入該信息的參數/標記。獲取訪問Jenkins中的構建變更日誌

有沒有人有過這樣的事情?

+0

我需要完全一樣的東西。謝謝你提出這個問題,我更感激你的答案。 – makdad 2012-09-06 02:43:49

回答

33

看起來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插件對新行進行編碼,因此可能會導致問題。

+0

非常感謝你,克里斯托弗! – 2012-08-08 01:54:24

+6

順便說一句,「然後你可以格式化這個信息,但你喜歡」 - 我用:'sed -e「s/<\/*comment> // g」| sed'/^$/d; G'去掉XML''標籤並清理換行符。 – makdad 2012-09-06 03:03:47

+0

爲了得到多個變化消息的乾淨的輸出,我用@ makdad的這種變化: '的sed -e「S/<\/comment> //克; S//\噸* /克; S/<\/*changes> //克「| sed'/^$/d; G'' – 2014-02-22 17:01:05

2

我做這覆羽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 
7

鑑於詹金斯日誌改變了形式,我更新原始帖子中的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環境變量,應該存在於任何安裝中。

+0

對於jenkins服務器的認證,curl部分應該是不同的 – 2015-11-12 17:19:14

2

實際上,通過讀取/解析生成文件夾中的../builds/$BUILD_NUMBER/changelog.xml文件,您可以在生成階段完成之前訪問該信息。 這個文件是在SVN/GIT提交觸發的情況下創建的,而不是在build或post_build階段結束時創建的。這意味着,您可以使用腳本在同一作業的構建階段開始時解析它,並將數據插入到env變量中。

這是如果你不想使用curl和XML。

相關問題