下文章來源于極狐GitLab ,作者極小狐
極狐GitLab.
極狐GitLab 一體化安全 DevOps 平臺,幫助用戶實現開發、安全和運維的高效協同。極狐GitLab 由極狐信息技術(湖北)有限公司獨立運營,公司投資方包括GitLab Inc.,紅杉寬帶,以及高成資本等。官網: GitLab.cn
點擊藍字 關注我們
極狐GitLab 的漏洞報告功能可以讓開發人員在統一的平臺上面管理代碼,對其進行安全掃描、管理漏洞報告并修復漏洞。但有些團隊更喜歡使用類似 Jira 的單獨工具來管理他們的安全漏洞。他們也可能需要以易于理解的格式向領導層展示漏洞報告。
極狐GitLab 的漏洞報告可以通過一鍵點擊的方式導出為 CSV,方便在其他工具中進行分析。但在某些情況下,一個簡單的 PDF 報告就足夠了。
使用極狐GitLab 的 API,可以輕松查詢漏洞信息并將報告詳細信息發送到其他地方,比如 PDF 文件或 Jira 項目。在本博客中,我們將向您展示如何將 GitLab 的漏洞報告導出 HTML/PDF 格式,或直接導出到 Jira。
請注意,本教程中使用的腳本僅供參考,并不受極狐GitLab 支持。
導出為 HTML/PDF
要將漏洞報告導出為 HTML 或 PDF,可參考 custom-vulnerability-reporting 項目1。
該項目包含一個腳本,用于查詢項目的漏洞報告,然后基于漏洞報告的數據生成HTML文件。項目中配置的流水線會運行此腳本,并將HTML文件轉換為PDF格式。
要使用導出工具,首先需要對該項目進行 Fork(派生)2 或導入到新項目3(選擇“通過URL導入存儲庫”,并粘貼原始項目的 git URL)。
按照自述文件 README.MD 的說明設置 CI/CD 變量。您需要以下極狐GitLab 信息:
在設置必需的 CI/CD 變量之后,從項目的流水線頁面手動運行一個流水線。完成流水線后,可以訪問 build_report(用于 HTML)或 pdf_conversion 作業,在側邊欄的“任務制品”下選擇“下載”或“瀏覽”來查看您的文件導出。至此,您就獲得了一個可共享且易于閱讀的項目漏洞的 pdf 報告。
將漏洞信息導出到 Jira
極狐GitLab 允許您通過 UI 使用我們的 Jira 集成? 功能從漏洞中創建 Jira 工單。盡管您可以為需要處理的漏洞單獨執行此操作,但有時團隊需要批量創建 Jira 工單來處理所有的漏洞。我們可以利用極狐GitLab 和 Jira 的 API 來實現這一點。
開始操作之前,請參考 external-vulnerability-tracking? 項目。此腳本與上面的腳本以相同的方式獲取漏洞,但它使用 Jira API 為每個漏洞創建一個工單。每個工單的描述也包含了來自 GitLab 漏洞報告的詳細信息。
要使用導出工具,只需 Fork(派生)該項目? 或導入到新項目?(選擇“通過 URL 導入存儲庫”,并粘貼原始項目的 git URL),并按照自述文件的說明設置 CI/CD 變量。
您需要準備以下 GitLab 信息:
您還將需要以下 Jira 信息:
在根據項目自述文件中的說明設置 CI/CD 變量后,只需從該項目的流水線頁面運行一個流水線,然后就可以看到所有的漏洞信息將會在 Jira 中自動創建工單。如果將來再次運行流水線,腳本將對 Jira 項目運行搜索查詢,防止創建重復的工單。它只會為沒有記錄在 Jira 中的新漏洞創建工單。
參考
Reference
1. custom-vulnerability-reporting:
https://gitlab.com/jwagner-demo/vandelay-industries/engineering/custom-vulnerability-reporting
2. Fork(派生):
https://gitlab.com/jwagner-demo/vandelay-industries/engineering/custom-vulnerability-reporting/-/forks/new
3. 導入到新項目:
https://docs.gitlab.cn/jh/user/project/import/repo_by_url.html
4. Jira集成:
https://docs.gitlab.com/ee/user/application_security/vulnerabilities/#create-a-jira-issue-for-a-vulnerability
5. external-vulnerability-tracking:
https://gitlab.com/smathur/external-vulnerability-tracking
6. Fork(派生)該項目:
https://gitlab.com/smathur/external-vulnerability-tracking/
7. 導入到新項目:
https://docs.gitlab.cn/jh/user/project/import/repo_by_url.html
8. 個人訪問令牌:
https://id.atlassian.com/manage-profile/security/api-tokens
參考資料
1.https://docs.gitlab.com/ee/api/graphql/reference/index.html#queryvulnerabilities
2.https://gitlab.com/jwagner-demo/vandelay-industries/engineering/custom-vulnerability-reporting
3.https://gitlab.com/smathur/external-vulnerability-tracking
4.https://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/
關于極狐(GitLab)
極狐(GitLab) 以“核心開放”為原則,面向中國市場,提供開箱即用的開放式一體化安全DevOps平臺——極狐GitLab。通過業界領先的優先級管理、安全、風險和合規性功能,實現產品、開發、QA、安全和運維團隊間的高效協同,加速和優化企業軟件開發生命周期。極狐GitLab由極狐信息技術(湖北)有限公司在國內獨立運營,提供中國本地化功能和支持服務。極狐(GitLab)公司以“中外合資3.0”模式創立,公司投資方包括GitLab Inc.、紅杉寬帶跨境數字產業基金、高成資本、泰康人壽、淡馬錫等。
景介紹
作為一個測試同學,提交bug是個繞不過去的坎(請不要杠哈,我真不太相信有測試同學從來未提交過bug)。
但是每次提交bug,少則幾項多則幾十項,填得有點頭大有沒有?即使有模板,根據模板再修改,手動填的時候也經常會漏掉一些項有沒有?
所以為了我們這些懶人的福利,自動化提交bug就應運而生了。
測試需求分析
此自動化需求主要涉及到python/pytest,且需要jira API文檔(下文有jira接口文檔鏈接)。
測試流程
自動化腳本實現
bug模板及提交jira手工步驟
提完bug的bug模板參考下圖:
創建bug時,參考下圖,可以看見目前統一模板有如下10個必填項:
項目、問題類型、概要、優先級、嚴重程度、復現概率、bug分類、影響版本、模塊、描述。
此處10個必填項對應后面jira接口的相應字段。
jira提交issue接口定義
createissue接口定義,baseurl參考公司網址,此接口的詳細url為:/rest/api/2/issue,方法為method。
請求體參考下圖的example、update字段,此處非必要,暫時忽略,我們步驟1中說的10個必填項都包含在fields字段中。
一般情況,每個字段可以通過id、name、key3個屬性值來設置,但有些時候name屬性不一定能找到(例如項目),所以建議首先用id和key,然而id有需要調用其他接口獲取,無法直接從界面知道,所以可以首選key。
例如項目的key則為括號里的內容,參考下圖,bug管理demo項目的項目key是BUGDEMO,
此點為本人調用其他接口觀察到的,具體可以找atlassian官方確認咨詢。
經過調用多方接口獲得能成功調用的接口字段屬性如下圖:
summary、description此處暫不用特別關注,在后面步驟中我們將會使用捕捉到的內容進行替換。
更多jira接口文檔詳細參考:https://docs.atlassian.com/software/jira/docs/api/REST/8.5.5/#api/2/issue-createIssue
issue相關信息捕捉
版本及環境:面板機此處是調用獲取設備狀態信息的接口獲取相關固件和算法等版本信息(作為setup調用一次即可):
項目:步驟2中已描述,此處不再贅述。
標題(summary)、詳細描述(description)、附件的捕捉:
(1) 斷言時描述詳細信息(包括失敗字段、預期結果和實際結果),例如下圖:
(2) 加入hook函數pytest_runtest_make_report監聽運行相關信息。
(3)對監聽到的相關信息進行處理,title即為捕捉到的運行的測試用例標題,由于函數title為英文,可以再和中文標題一一映射一下。
description為運行時的詳細輸出,類似于下圖:
out為調試日志寫入到文件,后期作為附件上傳,其內容主要是寫用例時的日志輸出,類似下圖:
其中hook函數pytest_runtest_make_report 更多詳細內容可參考pytest官方文檔(上一節中有附件),日志輸出可以參考logger模塊或是個人的寫日志模塊。
通過以上步驟初步生成的bug如圖:
注意,上傳附件為另外一個接口:
腳本迭代優化
可以不用調用原始的jira接口,python中jira庫中有封裝常用的jira接口,如jira.create_issue等。
可能遇到的問題
捕捉信息可能需要在寫自動化腳本的時候相關操作,都能斷言實際和預期等詳細信息。
附件中的信息也需要自行控制輸出。
如果bug系統非jira,可以自行找其bug系統的接口文檔或其他提交bug操作。
總結
此方案及示例需要配合自身的自動化用例使用,否則手動操作后也無法自動捕捉其錯誤信息。
此方案的重點也是在捕捉錯誤信息,其他調用jira接口對于一個調包俠來說是基本操作,獲取jira模板自行與pm商議即可,此方案如果上線到jenkins通過每日構建每天來run的話可能會出現大量重復的bug(由于開發解決bug沒有那么快),多次后面會有文章來討論如何解決此問題。
文末福利——推薦一個《Python自動化測試學習交流群》給大家:
請關注+私信回復:"測試" 就可以免費拿到軟件測試學習資料,同時進入群學習交流~~
OC]
Jira提供了完善的RESTful API,如果不想直接請求API接口可以使用Python的Jira庫來操作Jira
Jira Python文檔
安裝方法
pip install jira
認證
Jira的訪問是有權限的,在訪問Jira項目時首先要進行認證,Jira Python庫提供了3種認證方式:
通過Cookis方式認證(用戶名,密碼)
通過Basic Auth方式認證(用戶名,密碼)
通過OAuth方式認證
認證方式只需要選擇一種即可,以下代碼為使用Cookies方式認證。
form jira import JIRA
jira=JIRA('http://jira.***.com/', auth=('用戶名', '登錄密碼')
返回的jira對象便可以對Jira進行操作。主要的操作包括:
項目
問題
搜索
關注者
評論
附件
項目(Project)
jira.projects(): 查看所有項目列表
jira.project("項目的Key"): 查看單個項目
項目對象的主要屬性及方法如下:
key: 項目的Key
name: 項目名稱
description: 項目描述
lead: 項目負責人
projectCategory: 項目分類
components: 項目組件
versions: 項目中的版本
raw: 項目的原始API數據
示例
print(jira.projects()) # 打印所有你有權限訪問的項目列表
project=jira.project('某個項目的Key')
print(project.key, project.name, project.lead)
問題(Issue)
Issue是Jira的核心,Jira中的任務,用戶Story,Bug實質上都是一個Issue。
單個問題對象可以通過jira.issue("問題的Key")得到,問題的主要屬性和方法如下:
id: 問題的id
key: 問題的Key
permalink(): 獲取問題連接
fields: 問題的描述,創建時間等所有的配置域
raw: 問題的原始API數據
龍騰原創
聯系作者:xiaowanzi02620
*請認真填寫需求信息,我們會在24小時內與您取得聯系。