女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【Android開發(fā)者必看】使用JetBrains TeamCity為Android項(xiàng)目構(gòu)建CI/CD管道詳細(xì)指南

龍智DevSecOps ? 2025-03-21 15:42 ? 次閱讀

如果您經(jīng)常發(fā)布 Android 應(yīng)用,您可能已經(jīng)了解定義明確的構(gòu)建、測(cè)試和部署工作流的價(jià)值。如果沒有靈活的自動(dòng)化 DevOps 工作流,就很難維持高速發(fā)布。通過持續(xù)集成和持續(xù)部署 (CI/CD) 自動(dòng)執(zhí)行這些工作流可以讓您的工作變得更加輕松,讓您更早地發(fā)現(xiàn) bug,更快地發(fā)布產(chǎn)品。

JetBrains TeamCity 是一個(gè)用于構(gòu)建可靠管道的 CI/CD 平臺(tái)。它可與流行的 Android 開發(fā)工具無縫集成,并具有人性化界面來配置構(gòu)建和測(cè)試的各個(gè)階段。

本文將向您介紹如何使用 JetBrains TeamCity 為您的 Android 項(xiàng)目設(shè)置 CI/CD 管道。您將探索 Android CI/CD 管道的關(guān)鍵組件,并深入了解如何使用 TeamCity 配置一些示例管道。

了解 Android CI/CD 管道

Android 開發(fā)的有效 CI/CD 管道包含標(biāo)準(zhǔn) DevOps 管道中的所有步驟,并通過附加流程(如工件簽名和自動(dòng)部署到 Google Play 商店的內(nèi)部軌道)對(duì)其進(jìn)行了增強(qiáng)。下面是典型 Android CI/CD 管道中涉及的所有步驟的快速概覽:

1. 代碼簽出和版本控制集成:管道會(huì)先從您的版本控制系統(tǒng)(VCS,如 Git)獲取最新的代碼更改。如果您在使用 TeamCity,您將受益于它與流行的版本控制工具的集成以及在代碼提交或合并時(shí)自動(dòng)觸發(fā)管道的功能。

2. 使用 Gradle 實(shí)現(xiàn)構(gòu)建自動(dòng)化:Android 項(xiàng)目的標(biāo)準(zhǔn)構(gòu)建工具 Gradle 是這一步的核心。TeamCity 會(huì)執(zhí)行 Gradle 命令來編譯您的代碼、匯集資源并生成構(gòu)建工件。TeamCity 的構(gòu)建運(yùn)行程序提供了與不同 Gradle 版本的兼容性和可自定義的構(gòu)建配置環(huán)境。

3. 針對(duì)多個(gè) Android 版本/平臺(tái)的單元和集成測(cè)試:下一步包括運(yùn)行驗(yàn)證個(gè)別代碼模塊的單元測(cè)試和檢查不同組件如何交互的集成測(cè)試(包括 UI 測(cè)試)。TeamCity 允許您配置多個(gè)測(cè)試運(yùn)行程序和框架(例如 JUnit、Espresso),并使用模擬器或設(shè)備實(shí)驗(yàn)室針對(duì)各種 Android 版本和平臺(tái)執(zhí)行測(cè)試。

4. 靜態(tài)代碼分析(以 JetBrains Qodana 為特色)和代碼覆蓋率報(bào)告:靜態(tài)代碼分析有助于盡早識(shí)別潛在的 bug、安全漏洞和代碼樣式不一致。TeamCity 與 JetBrains Qodana 集成,后者是一款靜態(tài)代碼分析工具,具有代碼異味檢測(cè)、復(fù)雜代碼分析以及與各種編程語言集成等功能,可以確保全面的代碼質(zhì)量檢查。此外,TeamCity 可以生成代碼覆蓋率報(bào)告,指示單元測(cè)試執(zhí)行了代碼的哪些部分。這有助于開發(fā)者重點(diǎn)關(guān)注覆蓋率較弱的區(qū)域。

5. 工件生成和簽名(APK 和 AAB):成功構(gòu)建和測(cè)試后,下一步涉及創(chuàng)建可部署工件。對(duì)于 Android 應(yīng)用,這通常涉及生成已簽名的 Android Package Kits (APK) 或 Android App Bundles (AAB)。TeamCity 允許您使用構(gòu)建步驟在管道內(nèi)自動(dòng)執(zhí)行簽名流程。

6. 部署到內(nèi)部測(cè)試和生產(chǎn)環(huán)境(Google Play,Beta 渠道):CI/CD 管道可以將應(yīng)用自動(dòng)部署到各種環(huán)境。TeamCity 允許配置部署到內(nèi)部測(cè)試平臺(tái)或直接部署到 Google Play 上的生產(chǎn)渠道。

7. 持續(xù)監(jiān)控和反饋循環(huán):可靠的 CI/CD 管道不會(huì)隨著部署而結(jié)束。TeamCity 集成了監(jiān)控工具,使您能夠跟蹤應(yīng)用性能、識(shí)別崩潰,以及收集用戶反饋。此反饋循環(huán)使開發(fā)者能夠?qū)栴}做出快速反應(yīng),并持續(xù)提高應(yīng)用質(zhì)量。

使用 TeamCity 構(gòu)建管道

現(xiàn)在,您已經(jīng)了解一般的 CI/CD 管道結(jié)構(gòu),我們來使用 TeamCity 構(gòu)建一個(gè)管道。以下各部分將指導(dǎo)您設(shè)置 TeamCity、創(chuàng)建針對(duì)您的 Android 項(xiàng)目量身定制的構(gòu)建配置、運(yùn)行集成自動(dòng)化測(cè)試,以及最后配置應(yīng)用的打包和部署。

為了簡(jiǎn)單起見,本教程使用云托管版本的 TeamCity,該版本提供 14 天的免費(fèi)試用。您可以使用 GitHub、GitLab、Bitbucket 或 Google 賬號(hào)注冊(cè),也可以使用老式的電子郵件地址和密碼組合注冊(cè)。在進(jìn)入下一步之前,請(qǐng)務(wù)必激活試用版或訂閱。(如需進(jìn)一步支持,請(qǐng)咨詢JetBrains授權(quán)代理-龍智)不過,您也可以使用 TeamCity Cloud 和自托管構(gòu)建代理,甚至 TeamCity On-Premises 來實(shí)現(xiàn)本教程的目的。請(qǐng)記住,使用自托管構(gòu)建代理或 TeamCity On-Premises 需要您在代理上單獨(dú)安裝 Android SDK。

設(shè)置 TeamCity:

訪問 TeamCity Cloud 實(shí)例后,您看到的初始視圖將如下所示:

wKgZO2fdFQ2AaX24AABfYPq4YQs663.pngTeamCity Cloud 儀表板

要開始處理 Android 項(xiàng)目,請(qǐng)點(diǎn)擊頁面中間的 Create project…(創(chuàng)建項(xiàng)目…)。然后,系統(tǒng)會(huì)要求您提供項(xiàng)目源代碼的鏈接。如果您使用 Git 托管服務(wù)提供商(如 GitHub 或 Bitbucket Cloud)注冊(cè),請(qǐng)隨時(shí)查看其相應(yīng)部分,并使用專門的項(xiàng)目創(chuàng)建流程。不過,如果您有倉庫 URL,可以直接在 From a repository URL(從倉庫 URL)標(biāo)簽頁中使用。TeamCity 會(huì)自動(dòng)檢測(cè) Git 托管服務(wù)提供商,并從中拉取項(xiàng)目。

wKgZO2fdFQ2ARD8mAADJyYH-JAQ914.pngCreate Project(創(chuàng)建項(xiàng)目)頁面

如果您手頭沒有 Android 項(xiàng)目,可以使用以下倉庫學(xué)習(xí)本教程:

bash https://github.com/krharsh17/android-app-teamcity

如果您要訪問的倉庫是私有倉庫,或使用用戶名和密碼組合進(jìn)行了加密,您可以在此處提供相應(yīng)的用戶名和密碼組合,以便 TeamCity 能夠訪問該倉庫。輸入倉庫 URL(以及所需的其他詳細(xì)信息)后,點(diǎn)擊 Proceed(繼續(xù))。在下一頁上,TeamCity Cloud 將驗(yàn)證與 VCS 倉庫的連接。驗(yàn)證成功后,TeamCity 將拉取一些與項(xiàng)目相關(guān)的元數(shù)據(jù),例如名稱、默認(rèn)分支等。您可以在將這些值存儲(chǔ)到 TeamCity 項(xiàng)目之前對(duì)其進(jìn)行修改。

wKgZPGfdFQ2AYvzVAAB-Uy22dYo113.png創(chuàng)建項(xiàng)目時(shí)驗(yàn)證連接

確認(rèn)此頁面上的信息正確無誤后,點(diǎn)擊 Proceed(繼續(xù))按鈕。然后,TeamCity 將開始根據(jù)倉庫中的可用配置文件自動(dòng)檢測(cè)適用于該倉庫的任何構(gòu)建步驟。由于此倉庫中具有基于 Gradle 的配置文件,TeamCity 會(huì)自動(dòng)建議一組 Gradle 任務(wù)(在本例中為 clean 和 build)。選中 Gradle 構(gòu)建步驟旁邊的復(fù)選框,然后點(diǎn)擊 Use selected(使用所選):

wKgZO2fdFQ2AUaREAACidqmzc_A229.png選擇自動(dòng)建議的構(gòu)建步驟

完成后,會(huì)出現(xiàn)一個(gè)小橫幅,上面寫著您現(xiàn)在可以運(yùn)行項(xiàng)目中的第一個(gè)構(gòu)建。點(diǎn)擊右上角的 Run(運(yùn)行)開始第一個(gè)構(gòu)建:

wKgZPGfdFQ2AcLAeAACXvkBZhM8850.png開始您的第一個(gè)構(gòu)建

點(diǎn)擊按鈕后,構(gòu)建將加入隊(duì)列,等待構(gòu)建代理變得可用。您可以點(diǎn)擊頂部導(dǎo)航窗格中的 Projects(項(xiàng)目),然后選擇正在運(yùn)行的構(gòu)建,以查看其屬性和狀態(tài):

wKgZPGfdFXiAOWqIAACpfOd_jvM191.png正在運(yùn)行的構(gòu)建的詳細(xì)信息

構(gòu)建大約 5-6 分鐘即可完成。恭喜!您已使用 TeamCity 設(shè)置了第一個(gè) Android CI/CD 管道。此外,由于您使用了 VCS 倉庫 URL 來設(shè)置此管道,它已被配置為以固定的時(shí)間間隔自動(dòng)輪詢倉庫 URL,以查看是否有新的更改被推送到倉庫。如果發(fā)現(xiàn)新的更改,管道會(huì)自動(dòng)拉取最新的提交,并再次運(yùn)行構(gòu)建。您還可以通過設(shè)置針對(duì)特定平臺(tái)的 Web 掛鉤來進(jìn)一步增強(qiáng)此功能。例如,您剛剛設(shè)置的倉庫托管在 GitHub 上。TeamCity 允許您方便地安裝 GitHub Web 掛鉤,這樣每次倉庫有活動(dòng)時(shí),GitHub 就會(huì)自動(dòng)向 TeamCity 發(fā)送通知:

wKgZPGfdFXiAAVfYAAH6PjZiipk217.png安裝 GitHub Web 掛鉤

如果愿意,您可以進(jìn)行以上操作。不過,在本教程中并不需要這樣做。

配置構(gòu)建工件:

您設(shè)置的倉庫包括兩種版本(Free 和 Paid)。這兩種版本各有兩種構(gòu)建變體(debug 和 release)。這意味著 build 任務(wù)的結(jié)果將包括四個(gè)二進(jìn)制文件,每種可能的版本和變體組合對(duì)應(yīng)一個(gè)文件。我們來配置管道,以便在管道運(yùn)行結(jié)束后提取這些工件并使其可供訪問。為此,請(qǐng)點(diǎn)擊頂部導(dǎo)航窗格中的 Projects(項(xiàng)目),然后點(diǎn)擊 Android App Teamcity (Android 應(yīng)用 Teamcity)下的 Build(構(gòu)建),打開標(biāo)題為Build(構(gòu)建)的構(gòu)建配置的詳細(xì)信息頁面:

wKgZPGfdFXiATN74AABqlG9kr_w104.png導(dǎo)航到構(gòu)建配置頁面

在這里,點(diǎn)擊屏幕右上角的 Edit configuration(編輯配置)按鈕:

wKgZO2fdFXiAB_5SAACxws23M3U605.png編輯構(gòu)建配置

您可以在這里配置構(gòu)建配置的常規(guī)設(shè)置。您會(huì)注意到在列表的底部有一個(gè)標(biāo)題為 Artifact paths(工件路徑)的字段。您需要在這里定義希望在構(gòu)建完成運(yùn)行后提取和保留工件的路徑:

wKgZO2fdFXiAMB0gAAF7vw-gRog758.png設(shè)置工件路徑

運(yùn)行 Gradle build 任務(wù)時(shí),Gradle 生成的工件會(huì)存儲(chǔ)在 app/build/outputs/apk 中。因此,您需要在 Artifact paths(工件路徑)下輸入以下內(nèi)容:

app/build/outputs/apk/*/*/* => output

在 app/build/outputs/apk 后添加 /*/*/* 是因?yàn)闃?gòu)建后生成的 APK 二進(jìn)制文件的完整路徑如下所示:app/build/outputs/apk///app---unsigned.apk.為了表示 、 和二進(jìn)制文件名的所有可能值,我們使用了通配符 *。=> 是 Ant 樣式路徑的一個(gè)特征,用于分隔輸出和輸入目錄。output 是存儲(chǔ)最終二進(jìn)制文件的文件夾名稱。添加完成后,點(diǎn)擊頁面底部的 Save(保存)按鈕。您將看到一個(gè)黃色橫幅,顯示您的更改已保存:

wKgZPGfdFdqAQ6b1AADXAkXjhi8387.png保存對(duì)構(gòu)建配置所做的更改

現(xiàn)在,您可以使用頁面右上角的 Run(運(yùn)行)按鈕再次嘗試運(yùn)行管道,以查看構(gòu)建完成后生成的工件:

wKgZO2fdFdWAOhxDAADEOTCj680624.png查看生成的工件

現(xiàn)在,您已經(jīng)設(shè)置一個(gè)管道,每次有提交推送到倉庫的 main 分支時(shí),管道就會(huì)被觸發(fā)。此管道會(huì)為項(xiàng)目中的所有版本-變體組合生成未簽名的構(gòu)建工件,運(yùn)行單元測(cè)試,并使構(gòu)建工件可供查看。接下來,您將學(xué)習(xí)如何自定義測(cè)試。

自定義測(cè)試:

如前所述,Gradle 任務(wù) build 還負(fù)責(zé)對(duì)所有生成的構(gòu)建工件運(yùn)行單元測(cè)試。不過,在某些情況下,您可能只想在應(yīng)用的幾個(gè)變體上運(yùn)行測(cè)試。在這種情況下,您需要將 clean build 任務(wù)替換為適合您的用例的任務(wù)。例如,如果您要為應(yīng)用的免費(fèi)版本的 release 變體創(chuàng)建一個(gè)未簽名的 APK,并對(duì)其運(yùn)行單元測(cè)試,則應(yīng)將 clean build 替換為 assembleFreeRelease testFreeReleaseUnitTest。為此,請(qǐng)點(diǎn)擊頂部導(dǎo)航窗格中的 Projects(項(xiàng)目),然后點(diǎn)擊 Android App Teamcity(Android 應(yīng)用 Teamcity)下的 Build(構(gòu)建)。在下一個(gè)頁面上,與上一步的操作一樣,點(diǎn)擊右上角的 Edit configuration(編輯配置)按鈕。您應(yīng)該已進(jìn)入構(gòu)建配置的 General Settings(常規(guī)設(shè)置)頁面,您之前訪問過該頁面來配置工件路徑。在左側(cè)導(dǎo)航窗格中,點(diǎn)擊 Build Step: Gradle(構(gòu)建步驟: Gradle)。

wKgZPGfdFdWAQBGFAADdYdg3ntw635.png導(dǎo)航到構(gòu)建設(shè)置

這將打開 Build Steps(構(gòu)建步驟)頁面,您可以在該頁面中修改此構(gòu)建配置的構(gòu)建步驟。點(diǎn)擊第一個(gè)構(gòu)建步驟(標(biāo)題為 Gradle)右側(cè)的 Edit(編輯):

wKgZO2fdFdqABw1PAACTnavPg5M026.png編輯 Gradle 構(gòu)建步驟

現(xiàn)在,您可以更新 Gradle tasks(Gradle 任務(wù))字段,以更改將作為此構(gòu)建的一部分執(zhí)行的任務(wù)。將 clean build 替換為 assembleFreeRelease testFreeReleaseUnitTest

wKgZO2fdFdWANVfBAADjGkqJvgs750.png更新 Gradle 任務(wù)

現(xiàn)在,點(diǎn)擊底部的 Save(保存)。保存更改后,點(diǎn)擊右上角的 Run(運(yùn)行)按鈕。這將觸發(fā)此構(gòu)建配置的另一次運(yùn)行。構(gòu)建運(yùn)行完成后,您可以在構(gòu)建運(yùn)行詳細(xì)信息頁面的 Tests(測(cè)試)標(biāo)簽頁中查看 TeamCity 生成的報(bào)告:

wKgZPGfdFhmAGbbhAACU70vBD0M665.png查看測(cè)試結(jié)果

您可以查看每個(gè)單元測(cè)試的運(yùn)行時(shí)間,以及測(cè)試完成后是否留下了任何堆棧跟蹤。您還可以點(diǎn)擊測(cè)試最右側(cè)的三個(gè)點(diǎn),然后選擇 Show test history(顯示測(cè)試歷史記錄),將當(dāng)前測(cè)試運(yùn)行的性能與過去的運(yùn)行進(jìn)行比較:

wKgZO2fdFhmAfA-CAAD9rXARJJY783.png比較測(cè)試運(yùn)行歷史記錄

您可以將測(cè)試的調(diào)查指派給團(tuán)隊(duì)成員,并通過 TeamCity 本身跟蹤其調(diào)查歷史記錄。如果愿意,您還可以點(diǎn)擊測(cè)試概覽頁面上的 Download(下載)鏈接下載測(cè)試結(jié)果。此倉庫中的測(cè)試數(shù)量很少,因此幾分鐘內(nèi)就完成了構(gòu)建運(yùn)行。不過,在實(shí)際項(xiàng)目中,通常會(huì)有成百上千個(gè)單元測(cè)試。在這種情況下,在同一個(gè)運(yùn)行程序代理上一個(gè)接一個(gè)地運(yùn)行所有這些測(cè)試將耗費(fèi)大量時(shí)間。要解決這個(gè)問題,您可以使用 TeamCity 的并行測(cè)試構(gòu)建功能。TeamCity 能夠通過將測(cè)試運(yùn)行拆分到多個(gè)構(gòu)建代理來并行處理,從而幫助您最大限度地減少運(yùn)行所有測(cè)試所需的總時(shí)間。要進(jìn)行設(shè)置,請(qǐng)點(diǎn)擊構(gòu)建運(yùn)行詳細(xì)信息頁面上的 Edit configuration(編輯配置)按鈕,然后點(diǎn)擊左側(cè)導(dǎo)航窗格上的 Build Features(構(gòu)建功能):

wKgZO2fdFhmAalPFAADsmT6ZyBg331.png導(dǎo)航到 Build Features(構(gòu)建功能)頁面

Build Features(構(gòu)建功能)頁面上,點(diǎn)擊 + Add build feature(+ 添加構(gòu)建功能)按鈕。在打開的對(duì)話框中,從下拉菜單中選擇 Parallel tests(并行測(cè)試):

wKgZPGfdFhmAX58VAADR2uhACEE383.png搜索并行測(cè)試

您需要輸入并行執(zhí)行測(cè)試的最大批次數(shù)。輸入介于 4 和 8 之間的值可從并行化中獲得最大收益。

wKgZO2fdFhmAKFFLAAC9NvyuVH4744.png設(shè)置并行構(gòu)建批次

完成后,點(diǎn)擊 Save(保存)按鈕。現(xiàn)在,您可以嘗試為具有大量測(cè)試用例的倉庫運(yùn)行測(cè)試,親眼看看性能上的差異!

管理多個(gè)構(gòu)建:

由于此應(yīng)用有多種版本和變體,有必要利用 TeamCity 提供的矩陣構(gòu)建功能,將每種變體-版本組合拆分為其自己的運(yùn)行實(shí)例,從而加快管道構(gòu)建速度。此外,這還允許您構(gòu)建應(yīng)用程序的特定組合,而不必構(gòu)建所有或單個(gè)變體-版本組合。為此,您需要?jiǎng)?chuàng)建一個(gè)新的構(gòu)建配置。點(diǎn)擊頂部導(dǎo)航窗格中的 Projects(項(xiàng)目),然后點(diǎn)擊 Android App Teamcity(Android 應(yīng)用 Teamcity)。在項(xiàng)目詳細(xì)信息頁面上,點(diǎn)擊右上角的 Edit project…(編輯項(xiàng)目…)按鈕:

wKgZO2fdFl-AJwuyAABqMAxfRN4048.png導(dǎo)航到項(xiàng)目配置

General Settings(常規(guī)設(shè)置)頁面上,點(diǎn)擊 Build Configurations(構(gòu)建配置)部分下方的 + Create build configuration(+ 創(chuàng)建構(gòu)建配置)按鈕:

wKgZPGfdFl-AN6gwAAD9xrg8kRk484.png創(chuàng)建新構(gòu)建配置

這將帶您進(jìn)入 Create Build Configuration(創(chuàng)建構(gòu)建配置)向?qū)АT?Repository URL(倉庫 URL)字段中輸入與之前相同的倉庫 URL (https://github.com/krharsh17/android-app-teamcity),然后點(diǎn)擊 Proceed(繼續(xù)):

wKgZPGfdFl-AJrltAACEamvTnXI206.png輸入倉庫 URL

將下一頁上的 Build configuration name(構(gòu)建配置名稱)設(shè)置為 Matrix Builds(矩陣構(gòu)建),并在所有其他字段中保留默認(rèn)值。然后,點(diǎn)擊 Proceed(繼續(xù))按鈕:

wKgZO2fdFl-AV8AUAAB7OA-4Gqk705.png設(shè)置構(gòu)建配置詳細(xì)信息

TeamCity 將通知您已找到類似的 VCS 根。點(diǎn)擊以下對(duì)話框中的 Use this(使用)按鈕:

wKgZPGfdFl-AWZg5AAC1Ono2rFw237.png選擇現(xiàn)有 VCS 根

這將確保 TeamCity 對(duì)這兩種構(gòu)建配置只輪詢一次 VCS URL,以避免額外的性能開銷。構(gòu)建配置完成后,您應(yīng)該會(huì)收到確認(rèn)其已創(chuàng)建的通知:

wKgZO2fdFqKADQucAACYxUyxoMA070.png新構(gòu)建配置已創(chuàng)建

這一次,不需要設(shè)置 clean build Gradle 任務(wù),因此不要勾選此頁面上的任何復(fù)選框。點(diǎn)擊表上方的 configure build steps manually(手動(dòng)配置構(gòu)建步驟)鏈接。您將進(jìn)入 New Build Step(新建構(gòu)建步驟)頁面,您可以在該頁面上為構(gòu)建步驟選擇首選運(yùn)行程序:

wKgZO2fdFqOALAjtAAHs0iH9iyo272.png選擇構(gòu)建運(yùn)行程序

從此列表中選擇 Gradle。在打開的下一個(gè)頁面上,在 Gradle tasks(Gradle 任務(wù))字段中輸入 clean test%env.FLAVOR%%env.VARIANT%

wKgZO2fdFqKAd-A5AADc3VydKfI955.png輸入 Gradle 任務(wù)

這將確保運(yùn)行程序首先清理構(gòu)建文件夾,然后為環(huán)境變量提供的版本和變體運(yùn)行測(cè)試任務(wù)。例如,對(duì)于免費(fèi)應(yīng)用的 release 變體,任務(wù)將被稱為 clean testFreeRelease。向下滾動(dòng)并點(diǎn)擊 Save(保存)按鈕。然后,您將返回 Build Steps(構(gòu)建步驟)頁面:

wKgZPGfdFqKAPPh6AACXDRGDD38889.png新構(gòu)建步驟已添加

點(diǎn)擊 + Add build step(+ 添加構(gòu)建步驟)按鈕,添加另一個(gè) Gradle 構(gòu)建步驟,任務(wù)為 assemble%env.FLAVOR%%env.VARIANT%。此步驟將為應(yīng)用的給定版本和變體生成構(gòu)建工件。完成后,您的 Build Steps(構(gòu)建步驟)頁面應(yīng)該會(huì)列出您創(chuàng)建的兩個(gè)基于 Gradle 的構(gòu)建步驟,以及將作為其中一部分運(yùn)行的 Gradle 任務(wù)的快速摘要:

wKgZPGfdFqOAVL57AADG05JDEL8708.png構(gòu)建步驟已更新

接下來,您還需要做兩件事:定義您使用過的兩個(gè)環(huán)境變量的值,以及配置工件路徑。您已經(jīng)知道如何為構(gòu)建配置設(shè)置工件路徑。對(duì)于此構(gòu)建配置,將 Artifact paths(工件路徑)字段設(shè)置為 app/build/outputs/apk/*/*/* => output,與上一個(gè)配置相同。要為版本和變體字段設(shè)置矩陣值,請(qǐng)點(diǎn)擊左側(cè)導(dǎo)航窗格中的 Build Features(構(gòu)建功能)。在 Build Features(構(gòu)建功能)頁面上,點(diǎn)擊 + Add build feature(+ 添加構(gòu)建功能)按鈕,并在對(duì)話框的下拉菜單中搜索 Matrix Build(矩陣構(gòu)建):

wKgZO2fdFuOALHdNAADQyNt3G0Q796.png在 Build Features(構(gòu)建功能)頁面上搜索 Matrix Build(矩陣構(gòu)建)

從下拉列表中選擇 Matrix Build(矩陣構(gòu)建)選項(xiàng)后,系統(tǒng)將要求您提供矩陣構(gòu)建的形參及其值。提供形參名稱 env.FLAVOR,值為 Free。添加另一個(gè)形參 env.VARIANT,它的兩個(gè)值為 ReleaseDebug

wKgZPGfdFuOAOgiKAAD3Yz3Lx3A068.png配置矩陣構(gòu)建

接下來,點(diǎn)擊 Save(保存)按鈕。至此,此管道上的矩陣構(gòu)建設(shè)置完畢。您可以點(diǎn)擊頁面右上角的 Run(運(yùn)行)按鈕進(jìn)行測(cè)試。現(xiàn)在,您可以分別查看每次運(yùn)行的結(jié)果,以及單獨(dú)的構(gòu)建工件和測(cè)試結(jié)果。

wKgZO2fdFuOAAyGYAAFEJTNfeJY423.png矩陣構(gòu)建結(jié)果

您可以點(diǎn)擊 Dependencies(依賴項(xiàng))標(biāo)簽頁,查看每個(gè)運(yùn)行的構(gòu)建運(yùn)行詳細(xì)信息:

wKgZPGfdFuOAHKjRAAH9Km8EOk4501.png查看個(gè)別構(gòu)建運(yùn)行詳細(xì)信息

正如您之前看到的,您可以將每個(gè)條目作為獨(dú)立的完整構(gòu)建運(yùn)行來探索。

打包和部署:

Android CI/CD 管道的一個(gè)關(guān)鍵部分是向 Google Play 推送發(fā)行版二進(jìn)制文件,以便向用戶發(fā)布。您也可以使用 TeamCity 和 Gradle Play Publisher (GPP) 自動(dòng)執(zhí)行此操作。在開始此流程之前,有一些先決條件:1. 確保您已將 Android 項(xiàng)目的第一個(gè) APK/AAB 手動(dòng)上傳到 Google Play 管理中心。2. 您必須擁有有效的簽名配置。3. 您需要在 Google Cloud Platform 上創(chuàng)建一個(gè)服務(wù)賬號(hào),以便能夠使用 Google Play Developer API 并檢索其 JSON 憑據(jù)文件。為此,請(qǐng)按照以下步驟操作,然后再進(jìn)行下一步。完成上述鏈接中的詳細(xì)步驟后,您需要在 Android 項(xiàng)目中安裝和配置 GPP。為此,請(qǐng)將以下代碼行添加到應(yīng)用級(jí) build.gradle.kts 文件中的插件塊中:

kt id("com.github.triplet.play") version "3.9.1"

然后,在此文件的根級(jí)添加一個(gè) play {} 塊,內(nèi)容如下:

kt play { serviceAccountCredentials.set(file("play_config.json")) track.set("internal") releaseStatus.set(ReleaseStatus.DRAFT) defaultToAppBundles.set(true) }

這會(huì)將 GPP 配置為使用名為 play_config.json 的文件中的服務(wù)賬號(hào)憑據(jù),在將二進(jìn)制文件推送到 Play 管理中心時(shí)將軌道設(shè)置為 internal,并將發(fā)布狀態(tài)設(shè)置為 DRAFT,并默認(rèn)使用應(yīng)用捆綁包代替 APK。您的 Android 項(xiàng)目的必要配置步驟到此完成。在繼續(xù)之前,將這些更改提交并推送到 GitHub 倉庫。現(xiàn)在,您將在 TeamCity 中創(chuàng)建一個(gè)新的構(gòu)建配置,用于將二進(jìn)制文件推送到 Google Play。按照與之前相同的步驟創(chuàng)建新的構(gòu)建配置。將第一個(gè)構(gòu)建步驟設(shè)置為使用 Gradle 作為運(yùn)行程序,并將 bundleFreeRelease 作為要運(yùn)行的 Gradle 任務(wù):

wKgZO2fdFuOAe8YiAACV53EzfiU749.png構(gòu)建步驟

在此構(gòu)建配置中添加另一個(gè)步驟,但這次要選擇 Command Line(命令行)作為構(gòu)建運(yùn)行程序:

wKgZO2fdFz2AQznqAAHlqLeIfCU870.png配置新的命令行構(gòu)建步驟

命令行運(yùn)行程序的新構(gòu)建步驟頁面將會(huì)打開。您需要提供自定義腳本,用于簽署應(yīng)用捆綁包并將其發(fā)布到 Google Play。在 Custom script(自定義腳本)字段中輸入以下代碼:

# Create the keystore file from the environment variables echo %env.ANDROID_KEYSTORE_FILE% > keystore.jks.b64 base64 -d -i keystore.jks.b64 > app/keystore.jks # Sign the AAB using the keystore and credentials retrieved from the environment variables jarsigner -keystore app/keystore.jks -storepass %env.KEYSTORE_STORE_PASSWORD% -keypass %env.KEYSTORE_KEY_PASSWORD% -signedjar release.aab app/build/outputs/bundle/freeRelease/app-free-release.aab %env.KEYSTORE_KEY_ALIAS% # Create the GCP service account credentials file from the environment variables echo %env.PLAY_CONFIG_JSON% > play_config.json.b64 base64 -d -i play_config.json.b64 > app/play_config.json # Use GPP to publish the app bundle ./gradlew publishFreeBundle --artifact-dir release.aab

代碼中的內(nèi)聯(lián)評(píng)論解釋了每一行的作用。完成后,點(diǎn)擊頁面底部的 Save(保存)按鈕:

wKgZO2fdFz2AXf4LAADXQeFtzR0367.png配置您的命令行腳本

您還需要定義以下環(huán)境變量,以便為腳本提供正確的憑據(jù)來簽署和發(fā)布應(yīng)用:

bash ANDROID_KEYSTORE_FILE KEYSTORE_KEY_ALIAS KEYSTORE_KEY_PASSWORD KEYSTORE_STORE_PASSWORD PLAY_CONFIG_JSON

點(diǎn)擊左側(cè)導(dǎo)航窗格中的 Parameters(形參),轉(zhuǎn)到可以定義這些環(huán)境變量的頁面。您會(huì)看到 TeamCity 已經(jīng)在此頁面上為您填充了所需變量的列表:

wKgZO2fdFz2AQaolAAFN4fEpQwo017.png查看新識(shí)別的環(huán)境變量

對(duì)于 KEYSTORE_KEY_ALIAS、KEYSTORE_KEY_PASSWORD 和 KEYSTORE_STORE_PASSWORD,請(qǐng)隨意點(diǎn)擊 Edit(編輯)并在相應(yīng)的對(duì)話框中提供它們的值:

wKgZPGfdFz2AHdJuAADsuIMsi0Y052.png配置環(huán)境變量

對(duì)于 ANDROID_KEYSTORE_FILE 和 PLAY_CONFIG_JSON,您首先需要使用 openssl 等工具將文件轉(zhuǎn)換為 Base64,然后將 Base64 編碼的內(nèi)容粘貼到這些變量的值字段中。這將設(shè)置管道來構(gòu)建和發(fā)布應(yīng)用程序的免費(fèi)版本的簽名發(fā)布版。您可以嘗試點(diǎn)擊頁面右上角的 Run(運(yùn)行)按鈕,觸發(fā)運(yùn)行并查看運(yùn)行情況。運(yùn)行成功后,您將在日志中看到 BUILD SUCCESSFUL 消息:

wKgZPGfdFz2AJvpPAAExw-PiGbY054.png成功構(gòu)建結(jié)果日志

以下是您的應(yīng)用的最新版本,可在Google Play 管理中心的內(nèi)部軌道上查看,并隨時(shí)供您編輯和推廣:

wKgZPGfdFz2AKx9hAAB5FrJGDH4081.pngPlay 管理中心內(nèi)部測(cè)試頁面

您會(huì)注意到,新版本的名稱 (“2.0”) 與上一版本面向開發(fā)者的名稱相同。這是因?yàn)闆]有在 GPP 配置中指定名稱。您可以查看 GPP 文檔,了解如何自行完成該操作。

最佳做法和提示

現(xiàn)在,您可以使用 TeamCity 為 Android 設(shè)置自己的管道,以下是您可以考慮實(shí)施的一些關(guān)鍵最佳做法,以確保您的管道高效快速:

1. 版本控制和版本管理做法:高效的 CI/CD 管道在很大程度上依賴于強(qiáng)大的版本控制系統(tǒng) (VCS),如 Git。確保您的團(tuán)隊(duì)堅(jiān)持明確的版本管理做法,并實(shí)施一致的分支策略(如功能分支)。例如,為不同的分支開發(fā)自定義的管道,確保不會(huì)在 WIP 代碼上運(yùn)行不必要的步驟。

2. 明確的通過/失敗標(biāo)準(zhǔn)和閾值:明確定義什么是成功的構(gòu)建和測(cè)試運(yùn)行。這可能涉及為單元測(cè)試覆蓋率設(shè)置閾值,為其他代碼檢查亮起綠燈等。您應(yīng)該針對(duì)管道的每個(gè)階段為 TeamCity 配置通過/失敗標(biāo)準(zhǔn),以確保構(gòu)建的可靠性,并鼓勵(lì)開發(fā)者編寫更好的代碼。

3. 利用 TeamCity 通知和警報(bào):TeamCity 提供了詳細(xì)的通知系統(tǒng),可以幫助通知用戶跨 Web 瀏覽器、電子郵件、Slack 和 IDE 的管道事件。確保為構(gòu)建失敗和關(guān)鍵測(cè)試失敗設(shè)置警報(bào),以便讓開發(fā)團(tuán)隊(duì)及時(shí)了解情況并迅速解決問題。

4. 協(xié)作和反饋循環(huán):高效的 CI/CD 管道可以促進(jìn)開發(fā)團(tuán)隊(duì)內(nèi)部的協(xié)作。您應(yīng)該在 TeamCity 中使用構(gòu)建管道可視化,為開發(fā)者提供整個(gè)構(gòu)建和測(cè)試流程的清晰概況。您還可以直接在 TeamCity 內(nèi)使用測(cè)試和構(gòu)建調(diào)查來指派調(diào)查和協(xié)作處理調(diào)查,以了解構(gòu)建或測(cè)試失敗的原因。同時(shí),鼓勵(lì)團(tuán)隊(duì)成員審查構(gòu)建失敗和代碼覆蓋率報(bào)告,以確定需要改進(jìn)的地方。這有助于培養(yǎng)代碼質(zhì)量和持續(xù)改進(jìn)的文化。

5. 安全措施(代碼簽名和訪問控制):確保為 TeamCity 實(shí)例配置適當(dāng)?shù)脑L問控制,限制只有需要訪問信息的用戶才能訪問簽名密鑰等敏感信息。您應(yīng)該考慮使用類似 HashiCorp Vault 的工具來管理和輪換您在構(gòu)建過程中可能使用的所有敏感憑據(jù)。

結(jié)論

在本文中,您了解了如何使用 JetBrains TeamCity 為 Android 開發(fā)項(xiàng)目構(gòu)建和管理詳細(xì)的 CI/CD 管道。您探索了 Android CI/CD 管道從代碼遷出和版本控制集成到簽名、部署和監(jiān)控等各個(gè)關(guān)鍵階段。您了解了 TeamCity 如何促進(jìn)每個(gè)階段并簡(jiǎn)化開發(fā)工作流。最后,您還將學(xué)習(xí)一些關(guān)鍵的最佳做法,以確保您的管道高效運(yùn)行。

通過使用 TeamCity 來設(shè)置 Android 管道,您可以大大提高工作流效率。這直接帶來更快的發(fā)布周期、更少的 bug,最終高效交付高質(zhì)量的 Android 應(yīng)用。因此,請(qǐng)邁出更簡(jiǎn)化開發(fā)流程的第一步,立即開始構(gòu)建您的 CI/CD 管道吧!

本博文英文原作者:Olga Bedrina

關(guān)于 TeamCity

TeamCity 是一款強(qiáng)大的持續(xù)集成和部署服務(wù)器,面向以 DevOps 為中心的團(tuán)隊(duì)提供開箱即用的測(cè)試智能、構(gòu)建問題的實(shí)時(shí)報(bào)告以及無與倫比的可擴(kuò)展性。安裝和部署 TeamCity,幾分鐘之內(nèi)即可開始構(gòu)建您的 DevOps 管道。TeamCity 提供本地部署和基于云的版本。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3963

    瀏覽量

    129533
  • devops
    +關(guān)注

    關(guān)注

    0

    文章

    120

    瀏覽量

    12403
  • jetbrains技術(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    111
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Android開發(fā)者如何快速體驗(yàn)Android N

    ,目前只有開發(fā)者版本。不過小編相信大多數(shù)開發(fā)者們連Android M和Android L都還沒有機(jī)會(huì)體驗(yàn)到,因?yàn)楦魇謾C(jī)廠商動(dòng)作太慢了。為了讓大家能夠在第一時(shí)間體驗(yàn)到最新的
    發(fā)表于 05-26 10:20

    PayPal X Android開發(fā)者大賽助中國開發(fā)者邁向國際舞

    “PayPal X Android開發(fā)者大賽”力助中國創(chuàng)新開發(fā)者邁向國際舞臺(tái)
    發(fā)表于 03-24 12:06 ?760次閱讀

    iOS與Android開發(fā)者誰賺的錢多呢?

    Android開發(fā)者所獲得的收益僅占蘋果iOS的開發(fā)者所獲收益的7%。
    發(fā)表于 12-17 21:31 ?709次閱讀

    谷歌官方正式發(fā)布Android O第三個(gè)開發(fā)者預(yù)覽版:Android 8.0

    今天,谷歌參與Android Beta的用戶分發(fā)了全新的Android O系統(tǒng),也就是第三個(gè)開發(fā)者預(yù)覽版。
    發(fā)表于 06-09 21:38 ?1345次閱讀

    Android相機(jī)可通過不同的工具開發(fā)者賦能

    Android 相機(jī)總能為您帶來諸多驚喜。而相機(jī)也是用戶購買手機(jī)的首要考慮因素之一。現(xiàn)在,Android 相機(jī)可通過不同的工具開發(fā)者賦能。Camera2 是自
    的頭像 發(fā)表于 06-21 11:21 ?1146次閱讀

    Android 13開發(fā)者帶來了什么

    和安全,以及開發(fā)者生產(chǎn)力,幫助您更輕松地用戶構(gòu)建優(yōu)良的體驗(yàn)。我們還繼續(xù)使 Android 成為更適合平板電腦和大屏幕設(shè)備的操作系統(tǒng),您提
    的頭像 發(fā)表于 08-17 09:51 ?1491次閱讀

    Android 開發(fā)最新進(jìn)展 | 2022 Android 開發(fā)者峰會(huì)重點(diǎn)回顧

    作者 /?Matthew McCullough,Android 開發(fā)者團(tuán)隊(duì)產(chǎn)品管理副總裁 近期, Android 開發(fā)者峰會(huì) 已在舊金山灣區(qū)拉開了序幕。在峰會(huì)中,我們介紹了多種幫助大家
    的頭像 發(fā)表于 11-14 17:50 ?1248次閱讀

    現(xiàn)代 Android 開發(fā)的三大更新 | 2022 Android 開發(fā)者峰會(huì)

    Development,MAD) 的最新進(jìn)展。現(xiàn)代 Android 開發(fā)是我們的一系列庫、工具和指南,可幫助您更輕松快捷地構(gòu)建出色的 Androi
    的頭像 發(fā)表于 11-16 18:20 ?1113次閱讀

    Jetpack 更新一覽 | 2022 Android 開發(fā)者峰會(huì)

    Android Jetpack 套件包含超過 100 個(gè)庫、工具及指南,可幫助開發(fā)者遵循最佳實(shí)踐、減少樣板代碼,并編寫可在各種 Android 版本和設(shè)備中一致運(yùn)行的代碼。您可以借助
    的頭像 發(fā)表于 12-05 17:50 ?1173次閱讀

    Android 14 首個(gè)開發(fā)者預(yù)覽版到來

    作者 / Dave Burke, VP of Engineering 讓 Android 在數(shù)十億用戶 的手中良好運(yùn)行,是我們、Android 設(shè)備制造商,以及開發(fā)者社區(qū)的一致追求。 今天,我們
    的頭像 發(fā)表于 02-11 09:45 ?1208次閱讀

    Testin云測(cè)開發(fā)者云測(cè)試平臺(tái)國內(nèi)首發(fā)Android14

    云測(cè)在開發(fā)者云測(cè)試平臺(tái)國內(nèi)首發(fā)Android 14,企業(yè)和開發(fā)者提供Android 14系統(tǒng)的兼容及遠(yuǎn)程真機(jī)等云測(cè)試服務(wù),幫助
    的頭像 發(fā)表于 03-10 15:02 ?1856次閱讀

    即刻體驗(yàn) | Android 14 開發(fā)者預(yù)覽版 2

    作者 / Dave Burke, VP of Engineering 今天,我們大家?guī)砹?Android 14 的第二個(gè)開發(fā)者預(yù)覽版。在上個(gè)月發(fā)布的 Android 14 首個(gè)
    的頭像 發(fā)表于 03-11 15:30 ?1477次閱讀

    Android 15的首個(gè)開發(fā)者預(yù)覽版現(xiàn)已發(fā)布

    Android 15 的首個(gè)開發(fā)者預(yù)覽版現(xiàn)已發(fā)布,以便各位開發(fā)者能與我們通力協(xié)作,打造更優(yōu)秀的 Android 平臺(tái)。
    的頭像 發(fā)表于 03-12 14:16 ?1223次閱讀
    <b class='flag-5'>Android</b> 15的首個(gè)<b class='flag-5'>開發(fā)者</b>預(yù)覽版現(xiàn)已發(fā)布

    谷歌推出Android XR SDK開發(fā)者預(yù)覽版

    近期推出的 Android XR SDK 開發(fā)者預(yù)覽版是一款適用于 Android XR 的綜合開發(fā)工具套件。它是 Android 系列中最
    的頭像 發(fā)表于 01-10 10:13 ?560次閱讀

    .NET開發(fā)者必看JetBrains Rider Tasks(任務(wù))視圖功能解析與演示教程

    此前,JetBrains Rider推出了Tasks(任務(wù))視圖功能, .NET 開發(fā)者帶來強(qiáng)大的任務(wù)管理和調(diào)試工具。該功能已在JetBrains Rider 2024.2 EAP中
    的頭像 發(fā)表于 02-27 17:22 ?373次閱讀
    .NET<b class='flag-5'>開發(fā)者</b><b class='flag-5'>必看</b>:<b class='flag-5'>JetBrains</b> Rider Tasks(任務(wù))視圖功能解析與演示教程