tag:blogger.com,1999:blog-27955045652521738212024-03-14T18:54:41.407+08:00Duran 的技術冶煉廠Program / Fitness / Travel / Photography / LifeDuran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.comBlogger451125tag:blogger.com,1999:blog-2795504565252173821.post-55216221775694932182024-01-17T00:02:00.009+08:002024-01-23T01:05:45.134+08:00Open Source Registry - Harbor 介紹與安裝 <h3 style="text-align: left;"> 前言</h3><p>Harbor 是一套開源且功能齊全的 Regisrty (Image 儲存庫),相較於多數 Image Regisrty,個人覺得 Harbor 功能齊全且介面友善:有提供使用者管理功能 (支援多種驗證)、儲存架構(Project/Repos/Artifact)、Replicaton、安全掃描...等。有幸於工作關係,能夠接觸到這套 Registry 服務,見識到實務上有各種不同架構組合、如何維運與問題排除。後續會將一些經驗寫成系列文章,除了作學習筆記外,也提供有興趣的朋友參考。本篇文章若有錯誤或任何建議,請各位前輩不吝提出。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwHDw4kHRLKkyE_84pXJjXY1O_7Xaj4sP_4Sab_v6WnnJQUs1mKaTaCJr7UJI9zOfmI3I0C8HdOFqH9SKCov4KH7D4AcXFtHWTDCkOKgN5S3M06DFy3bRaxeWmepOtFBgiUrU8iEwuIoDQzfchW9k0SZjOJGwyg5wE_EONbS0Ebn43KQT6e1-IJsn6aIM/s2326/009-Harbor.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="967" data-original-width="2326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwHDw4kHRLKkyE_84pXJjXY1O_7Xaj4sP_4Sab_v6WnnJQUs1mKaTaCJr7UJI9zOfmI3I0C8HdOFqH9SKCov4KH7D4AcXFtHWTDCkOKgN5S3M06DFy3bRaxeWmepOtFBgiUrU8iEwuIoDQzfchW9k0SZjOJGwyg5wE_EONbS0Ebn43KQT6e1-IJsn6aIM/s16000/009-Harbor.png" /></a></div><br /><p><br /></p><span><a name='more'></a></span><p><br /></p><h3 style="text-align: left;">安裝前必要條件</h3><p>必須先安裝 <a href="https://docs.docker.com/engine/install/ubuntu/" target="_blank">docker engine</a> 與 <a href="https://docs.docker.com/compose/install/linux/#install-the-plugin-manually" target="_blank">docker compose</a></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p><h3 style="text-align: left;">安裝流程</h3><p>首先,我們先前往 <a href="https://github.com/goharbor/harbor/releases">Harbor Release 頁面</a> ,找到最新版本 Release 並拉至下方找到 Assets 下載安裝程式。線上與線下安裝程式的差異在於前者會從 docker hub 下載 Harbor 印象檔案,適用於可連結網路環境;後者則包含預先建置的 image,容量較大,適用於無法連結外部網路環境。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4jNEJ_af6rtvVU3ChkQ5HDQe3uxbviaMCM2pWVZc7ZtfTzuVZ-eDx1nII3o45sX0fjwQMcUVMgD9_zDwtpDTo8OxHRG0smh80vgXN6oQ5V3ZNtdXYr5a2pHyCOl0nac0YM9QIirrLpZxqBHaFLCbRNJfNnSdJcltAIcIjQ8IP8tFlq5-BpxwU2DRZoQc/s1353/002-asset.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="448" data-original-width="1353" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4jNEJ_af6rtvVU3ChkQ5HDQe3uxbviaMCM2pWVZc7ZtfTzuVZ-eDx1nII3o45sX0fjwQMcUVMgD9_zDwtpDTo8OxHRG0smh80vgXN6oQ5V3ZNtdXYr5a2pHyCOl0nac0YM9QIirrLpZxqBHaFLCbRNJfNnSdJcltAIcIjQ8IP8tFlq5-BpxwU2DRZoQc/s16000/002-asset.png" /></a></div><br /><p><br /></p><p><br /></p>我們架設的環境是 Ubuntu,所以透過 wget 下載線下安裝檔案,並透過 tar 指令進行解壓縮<div><br /></div><div><span style="color: red;">wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz</span></div><div><span style="color: red;"><br /></span></div><div><span style="color: red;">tar xzvf harbor-offline-installer-v2.10.0.tgz</span></div><div><span style="color: red;"><br /></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiln2z-1U7cu2m5CLF347ZreWvQkUyPmxoIIvkuAXTZbGbnZUHhnRm2OnBQSUVBCo8VbC8tjeE_-IO9IRcAmewWEbTPr2rIzwVnl2F8LJ2yJ74mU-LV_NVu2M3KnPbAVPnWkMvR_v9w1PfDsWd1gRWmxDN-5oLWw3p1Vc7YmqZRlI9gBIgp4OLFnCvuIY/s1376/003-command.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="605" data-original-width="1376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiln2z-1U7cu2m5CLF347ZreWvQkUyPmxoIIvkuAXTZbGbnZUHhnRm2OnBQSUVBCo8VbC8tjeE_-IO9IRcAmewWEbTPr2rIzwVnl2F8LJ2yJ74mU-LV_NVu2M3KnPbAVPnWkMvR_v9w1PfDsWd1gRWmxDN-5oLWw3p1Vc7YmqZRlI9gBIgp4OLFnCvuIY/s16000/003-command.png" /></a></div><br /><p><br /></p><p>在啟動 Harbor 之前,我們要先對 Harbor 進行設定。切換目錄至 Harbor 資料夾,開啟 harbor.yanl.tmpl 進行修改。 (如果沒有修改直接執行會發生錯誤)</p><p><span style="color: red;">cd harbor<br />vi harbor.yml.tmpl</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0fMuSroGzixZobvxiPb-CdkY8RZC1VuUp6rQ72Xz2CX7sMlV1-VM6tXOkNgyz2I_9vj76XZ57-h7mAIkPKtDWFmythGEirV9vp_MOl_hGsKR5_jJtCHL-k4jdpIseX6cGFSJ9cNRcbhYKn7gcPjKlEZFqSNbGN2qxQg4yfXDQIAcxE-gGBIZmxecd5VA/s1206/004-harboryaml.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="261" data-original-width="1206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0fMuSroGzixZobvxiPb-CdkY8RZC1VuUp6rQ72Xz2CX7sMlV1-VM6tXOkNgyz2I_9vj76XZ57-h7mAIkPKtDWFmythGEirV9vp_MOl_hGsKR5_jJtCHL-k4jdpIseX6cGFSJ9cNRcbhYKn7gcPjKlEZFqSNbGN2qxQg4yfXDQIAcxE-gGBIZmxecd5VA/s16000/004-harboryaml.png" /></a></div><br /><p><br /></p><p>我們將 Domain、HTTP/HTTPS、Certificate 與 Admin Password 進行修改 (如下紅色框處)。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyOazIAwJF-qbqMQrAKzZX_qFa0nPaqALIXbtrBmxOS2KmU1pDmlnHcpkp1rohNLpYIl7ClFA2CTNdW0kww9N2bOJf3V4QoqrRCGYgKxdlWoezcWi5H1TdBqntnlKDp__7xWu7xFNy174dtaT1qBis8R8eJhZy_5J33U2A4DER4wE_4GKYnBqSEnc9Rlw/s1600/005-config.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1477" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyOazIAwJF-qbqMQrAKzZX_qFa0nPaqALIXbtrBmxOS2KmU1pDmlnHcpkp1rohNLpYIl7ClFA2CTNdW0kww9N2bOJf3V4QoqrRCGYgKxdlWoezcWi5H1TdBqntnlKDp__7xWu7xFNy174dtaT1qBis8R8eJhZy_5J33U2A4DER4wE_4GKYnBqSEnc9Rlw/s16000/005-config.png" /></a></div><br /><p><br /></p><p><br /></p><p>如果要將資料儲存至另外的資料硬碟,記得更改 data_volume</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAm2uta2gZohyphenhyphenHje_ceU4jcboAbtPTf23WCEJsuVTbo8sowRiEJkLq1kg7UITkLxQtRarM3AZfsE-Ximvrc3x51ff2Ygq9oB10kE8ba42-rVFep4yETrFP8VXUBNv9Ncuq5x_orQ0CRFUEeCgoAd7YnCIvz4s6SOh5rlErbs2FXHtwTz2RUZxvuOH-RR8/s396/006-data.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="96" data-original-width="396" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAm2uta2gZohyphenhyphenHje_ceU4jcboAbtPTf23WCEJsuVTbo8sowRiEJkLq1kg7UITkLxQtRarM3AZfsE-Ximvrc3x51ff2Ygq9oB10kE8ba42-rVFep4yETrFP8VXUBNv9Ncuq5x_orQ0CRFUEeCgoAd7YnCIvz4s6SOh5rlErbs2FXHtwTz2RUZxvuOH-RR8/s16000/006-data.png" /></a></div><br /><p><br /></p><p><br /></p><p>修改完成後,輸入指令 <span style="color: red;">mv harbor.yml.tmpl harbor.yml</span> 將檔案名稱改為 harbor.yml,執行<span style="color: red;"> sudo ./install.sh</span> 即可啟動 Harbor。</p><p></p><blockquote>後續若有調整 harbor.yml 內容,可以透過 ./prepare 指令重新載入設定</blockquote><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO8BL-Ki_BnH_kvhm9b4vsMW4quyaO5_wo6wZEgdKQgx9QQRLB8GHvob3Kh-svlvX3aAJyVQD8CwMgRSMC_6ox7yo6wBrx2LVJOCs0XOPc4VfB1-T7B9rhm3Fhv61pomBM8I5kSSxIF_j2Zgc8bhsZDckt037CjO-isfW9WOcYDwxeWfYucyUjHeHMZL4/s818/007-install.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="489" data-original-width="818" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhO8BL-Ki_BnH_kvhm9b4vsMW4quyaO5_wo6wZEgdKQgx9QQRLB8GHvob3Kh-svlvX3aAJyVQD8CwMgRSMC_6ox7yo6wBrx2LVJOCs0XOPc4VfB1-T7B9rhm3Fhv61pomBM8I5kSSxIF_j2Zgc8bhsZDckt037CjO-isfW9WOcYDwxeWfYucyUjHeHMZL4/s16000/007-install.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyIUc3zw-Ey8C75NKkshoZ3and5AZZKpf-1mAxWaFH_twEbTaSDA88hbwYHYi2qUfCklS47YV2QMPNSx4zFJZcGSIXOvYi6v0e3NlYGRKf0BZH51s0uZqOu3iEotgG1Y4Gv1-PwnqINr_GIRR5GzKVmHfzq_UMjX_K10PCPS2V8GJOILVq7zqhLyHRAxM/s1589/008-finsih.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="471" data-original-width="1589" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyIUc3zw-Ey8C75NKkshoZ3and5AZZKpf-1mAxWaFH_twEbTaSDA88hbwYHYi2qUfCklS47YV2QMPNSx4zFJZcGSIXOvYi6v0e3NlYGRKf0BZH51s0uZqOu3iEotgG1Y4Gv1-PwnqINr_GIRR5GzKVmHfzq_UMjX_K10PCPS2V8GJOILVq7zqhLyHRAxM/s16000/008-finsih.png" /></a></div><br /><p><br /></p><p><br /></p><p>開啟瀏覽器,輸入網址或 IP,即可看見 Harbor 登入畫面。您可以透過先前在 harbor.yml 內設定的管理者密碼進行登入。到目前為止,我們完成 Harbor 架設 :)。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhACm9FHAQzF-8pmtRXvx7wJv1scTHHJb145hqRWyLctIFZsX2F2gdzpvBb16yxrJFCxX4bL_tDOFvRcsB4CkHqcI4uAYSbT8vfQyJVQU-dVeA-mTBZLz6X3YbHtq-u7QnMwbmLdS4Dof5o9bllVgDUOyFo-d-9ZzKLXP_l49gEWlEHiyLUdozMAfmaD4Q/s2326/009-Harbor.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="967" data-original-width="2326" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhACm9FHAQzF-8pmtRXvx7wJv1scTHHJb145hqRWyLctIFZsX2F2gdzpvBb16yxrJFCxX4bL_tDOFvRcsB4CkHqcI4uAYSbT8vfQyJVQU-dVeA-mTBZLz6X3YbHtq-u7QnMwbmLdS4Dof5o9bllVgDUOyFo-d-9ZzKLXP_l49gEWlEHiyLUdozMAfmaD4Q/s16000/009-Harbor.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div></div>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-7635421853846178152024-01-16T01:22:00.004+08:002024-01-16T01:23:06.604+08:00GitLab 基礎介紹 - 註冊、價格與操作介面說明<p>因為工作關係,最近開始在接觸 GitLab,雖然過去對於 Azure DevOps, Team City, 與 GitHub 已經有比較深入的研究,雖然在 Git Repository/Continuous Integration/Continuous Delivery 觀念上應該部會相差太遠,但對於不同服務平台與操作介面要熟悉仍要花一點時間,因此開始此一系列文章,除了讓自己熟悉 GitLab 平台,也提供有興趣的朋友參考。本系列文章若有錯誤或建議,請各位先進不吝提出,謝謝。</p><p><br /></p><h3 style="text-align: left;">GitLab 基礎教學系列 (暫列文章標題,會依據撰寫當時情況異動)</h3><p></p><ol style="text-align: left;"><li>GitLab 基礎介紹 - 註冊、價格與操作介面說明</li><li>GitLab Project 介紹 - 建立、匯入與複製你的專案</li><li>GitLab Group 介紹</li><li>GitLab Issue 介紹</li><li>GitLab 團隊協作</li><li>GitLab Continuous Integration and Continuous Delivery</li><li>GitLab Runner</li><li>GitLab Wiki</li></ol><p></p><p><br /></p><p><br /></p><span><a name='more'></a></span><p><br /></p><h2 style="text-align: left;">價格</h2><p>GitLab 在對於初次使用者來說並不算有優勢,在免費層部分有容量使用與傳輸限制,每個月只有提供 400 分鐘免費計算時間。對於過去 Azure DevOps 並沒有容量與傳輸限制、每個月有 1800 分鐘,且多數功能皆可以在不用付費情況下可以使用 (如 MR Approve,在 Azure DevOps 是不須付費使用)。最後 5 人部分則是與 Azure DevOps 相同的。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyzjx0DvcqEXBzEPxX0RhF4kuTjXvtPShlaC5mxvYYcGn7PypvKSqJEobOaaXDddxpL-9KIM90fjYEU5jXok89wDOgVascCxBfG1nylYgEQrQlm-7C_nrc9Aa6_udKyePZ-ELNeVMDJcemaoZFVMSw9ZXRqCddbyL3VLlbQR7OOAJ34Sad6YMIh8vDomQ/s2115/001-Price.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1228" data-original-width="2115" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyzjx0DvcqEXBzEPxX0RhF4kuTjXvtPShlaC5mxvYYcGn7PypvKSqJEobOaaXDddxpL-9KIM90fjYEU5jXok89wDOgVascCxBfG1nylYgEQrQlm-7C_nrc9Aa6_udKyePZ-ELNeVMDJcemaoZFVMSw9ZXRqCddbyL3VLlbQR7OOAJ34Sad6YMIh8vDomQ/s16000/001-Price.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">註冊與操作介面</h3><p>GitLab 註冊畫面相當清爽,且提供 Gmail 與 GitHub 帳號直接註冊使用。另帶一題有提供30 天每費試用。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFRfcvzMZ-xdazQo59k1k-AzkQ_NQoXtGK4eKZ78w3nPFKwV4gZND_d71_0L8xb7Gc7_iqOFKP3OIXfpR46DZJIkXBdrKOHhHF2O2tCQHFVIRi23B_5GlKFuWNl61PGBid3gyfiALDeVxqNTNIXs7Mq54H0lI8loWWP1pCudRXRD0-unrDtcCLKrgG7Ss/s1814/002-Register.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1072" data-original-width="1814" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFRfcvzMZ-xdazQo59k1k-AzkQ_NQoXtGK4eKZ78w3nPFKwV4gZND_d71_0L8xb7Gc7_iqOFKP3OIXfpR46DZJIkXBdrKOHhHF2O2tCQHFVIRi23B_5GlKFuWNl61PGBid3gyfiALDeVxqNTNIXs7Mq54H0lI8loWWP1pCudRXRD0-unrDtcCLKrgG7Ss/s16000/002-Register.png" /></a></div><br /><p><br /></p><p><br /></p><p> GitLab 與 GitHub 平台服務都是以 Git Repository (儲存庫為中心) 為主延伸服務:從專案列表上可以清楚看到有多少 Star, Merge, Brach;當你進入專案時,可以看到完整的儲存庫狀態;以專案管理層面,有簡單的 Issue Tracking 與 Kanban,雖然不如 Azure DevOps 專案管理來的精緻,但個人覺得目前在團隊使用上,比 GitHub 好一些。</p><blockquote><p>比較有趣的是,Azure DevOps 與 GitHub 合併分支請求稱為 Pull Request,GitLab 稱為 Merge Request,</p></blockquote><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU1wSF6Mqnja5b3auTYubPP5GxPk4vKDeZtIQAV-fV6Sno1YYlM1jQBCrCx1Bbg_r17mC55w9YbxUowk3B3ASllR_-AqweTbVF7Ft4yiyh0st8wyLbL_xPsPM05s7-6CDOt8fayLgIZy2kBRJULbtAtyQUs8kKFze1PEAsCHCkq4yKXHPjSEgjmOe3GvQ/s2119/003-UI.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="973" data-original-width="2119" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiU1wSF6Mqnja5b3auTYubPP5GxPk4vKDeZtIQAV-fV6Sno1YYlM1jQBCrCx1Bbg_r17mC55w9YbxUowk3B3ASllR_-AqweTbVF7Ft4yiyh0st8wyLbL_xPsPM05s7-6CDOt8fayLgIZy2kBRJULbtAtyQUs8kKFze1PEAsCHCkq4yKXHPjSEgjmOe3GvQ/s16000/003-UI.png" /></a></div><br /><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ8JfT6PgYkyQkudpdrMIC4h9Al0UKDypLH8v2NQ2EFNi_0BTkxLYTVTPO0_asu49NkE2IigE3x7psZmmI_69knuY3c450gYiOnIL54nA0PfJeiCr_pd2lJ9YGx7V-FC2K_nOqKN73dqoh8Spjmtx-yVbZysTsRBtqo98tmMW0XTCmO1CzIl-t48CQzKI/s2357/004-UI.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1305" data-original-width="2357" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ8JfT6PgYkyQkudpdrMIC4h9Al0UKDypLH8v2NQ2EFNi_0BTkxLYTVTPO0_asu49NkE2IigE3x7psZmmI_69knuY3c450gYiOnIL54nA0PfJeiCr_pd2lJ9YGx7V-FC2K_nOqKN73dqoh8Spjmtx-yVbZysTsRBtqo98tmMW0XTCmO1CzIl-t48CQzKI/s16000/004-UI.png" /></a></div><div><br /></div><br /><p><br /></p><p>Issue 部分較為簡單,看起來比較不容易用於執行 Scrum 或 Agile 管理流程。與 issue 相關連結是採用 closing pattern:與 Git Commit 是採用 #xx 連結到 Issue、參考至 MR 則是 !xx、參考至 snippet 則是 $xx</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4G_ZqKdOFYCqvea6g_k81TppywDLvJySzRMM_XCWokjPNv15GJxiyfQTrzvaJB3xdF5lCsYJvG2raraomlaodBRXMlCzP1d_ZGylEtUP16jaVlIFihicf6xgkqHlC3STjYsoan2nQzMnw1xQe1S1yT2YW-n5L-gel4qiqwL6blZRqhv2CrV-_0LHkLNU/s1973/007-Issue.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1212" data-original-width="1973" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4G_ZqKdOFYCqvea6g_k81TppywDLvJySzRMM_XCWokjPNv15GJxiyfQTrzvaJB3xdF5lCsYJvG2raraomlaodBRXMlCzP1d_ZGylEtUP16jaVlIFihicf6xgkqHlC3STjYsoan2nQzMnw1xQe1S1yT2YW-n5L-gel4qiqwL6blZRqhv2CrV-_0LHkLNU/s16000/007-Issue.png" /></a></div><br /><p><br /></p><p>雖然尚未深入研究 Pipeline,但與 GitHub Action 類似, CI/CD 會似乎在同一份 YAML 上進行維護。雖然也提供主流程式語言與編譯工具 Template,但並沒有像 GitHub 與 Azure DevOps 有大量 Task/Extension 可以使用<span>。</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu-itpdwPFNzEnzlJwanQ8u6HHrJdTTGN9btEbt84yRGaWtjdw-C1vxBAbJYKD-whLjqC2zCVObshXP_NSRwee0iaBHiNNimWo0em6x9E7HZsKMJK25kv2CjSwvhQMjZYThr_FNTAZRVu-v89MFjhb1w0oYo0wdo-1FUIy4Z-TUb78PXn4W8bEbOqNcmk/s1975/005-pipeline.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1191" data-original-width="1975" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu-itpdwPFNzEnzlJwanQ8u6HHrJdTTGN9btEbt84yRGaWtjdw-C1vxBAbJYKD-whLjqC2zCVObshXP_NSRwee0iaBHiNNimWo0em6x9E7HZsKMJK25kv2CjSwvhQMjZYThr_FNTAZRVu-v89MFjhb1w0oYo0wdo-1FUIy4Z-TUb78PXn4W8bEbOqNcmk/s16000/005-pipeline.png" /></a></div><br /><span><br /></span><p></p><p><br /></p><p>Runner 部分 (Azure DevOps 與 GitLab 稱為 Agent) 也提供 MacOS, Linux, 與 Windows 三種類型,但多提供 Container 與 K8S Cluster 設定。Runner 分類方式則與 GitHub/ Team City 方式相同,以 Tag 做分類。比較特別在 GitLab 上會限制 Runner 版本。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh47w8WalyqeVoZ0Vm9LhXqyqL2LETEDgDC0jSmUoK7ygSQaUuNqHZNuHOTarKfq8VBGIxCtcCX2FSxt_ZSKqWd1rqAyUHufpfi3sipsceoCBiHixIkW0kU4Brl8fkYpmWfTC9uZmuQUe3XqKOLT_s6Nr-yih2UauHWabYhrZTnQ3IRJybo0jIIrsDXNBA/s1947/006-runner.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1068" data-original-width="1947" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh47w8WalyqeVoZ0Vm9LhXqyqL2LETEDgDC0jSmUoK7ygSQaUuNqHZNuHOTarKfq8VBGIxCtcCX2FSxt_ZSKqWd1rqAyUHufpfi3sipsceoCBiHixIkW0kU4Brl8fkYpmWfTC9uZmuQUe3XqKOLT_s6Nr-yih2UauHWabYhrZTnQ3IRJybo0jIIrsDXNBA/s16000/006-runner.png" /></a></div><div><br /></div><br /><p><br /></p><p><br /></p><h3 style="text-align: left;">總結</h3><p>在第一篇文章,除了快速過一下 GitLab 平台功能,我們也以初學者角度將 GitLab 與其他服務平台進行簡單比較。雖然比較結果並不是如此公平 (可能有其他平台使用習慣),在後面的文章我們會比較詳細的說明每一項功能的操作步驟,並做更細部的比較。</p><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-2616657133739859592023-04-04T23:23:00.006+08:002024-01-14T01:16:19.683+08:00Golang 教學 03: Go 資料型態與變數宣告<p>過去若您跟我一樣,是以 C、C#、Java 等程式語言為主,剛學習 Golang 可能會有些不適應。主要原因在於 Go 語言的變數宣告方式為 <b>var [變數名稱] [資料型別]</b>,與過去 [資料型別] [變數名稱] 有所不同。個人在第一次寫 Golang 的時候,Visual Studio Code 直接呈現語法錯誤訊息,花了 5-10 分鐘才發現宣告變數方式有問題。本篇文章將會簡單介紹 Golang 變數,提供給有興趣的朋友參考。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE5jlHb3N8xtOviauINPJSHDpeK66dU0B31A6Viu-TbQT-CCnjad79vmh7S5u7-R0haK5KaDv4-hgDDfhpcSXYp3g43ckphTXBkfeyZkg_N9AVsSusaygV0PJWIiJU20eMc8wSPltNI5gKX6NkPFErTPtoQCYQg8XfMQbZKI38JH2ntbF7PaZch5Wm/s1079/youtube%20%E5%B0%81%E9%9D%A2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="712" data-original-width="1079" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE5jlHb3N8xtOviauINPJSHDpeK66dU0B31A6Viu-TbQT-CCnjad79vmh7S5u7-R0haK5KaDv4-hgDDfhpcSXYp3g43ckphTXBkfeyZkg_N9AVsSusaygV0PJWIiJU20eMc8wSPltNI5gKX6NkPFErTPtoQCYQg8XfMQbZKI38JH2ntbF7PaZch5Wm/s16000/youtube%20%E5%B0%81%E9%9D%A2.jpg" /></a></div><br /><span><a name='more'></a></span><p><br /></p><h2 style="text-align: left;">變數宣告</h2><p>Golang 的資料型態可以分成 <b>string</b>, <b>int</b>, <b>bool</b>, <b>float64 </b>與 <b>map</b>,屬於強行別的程式語言,其宣告方式可以分成 <b>變數 (var) 與常數 (const)</b>,其變數可以進行操作,而常數則是經過宣告後,為固定的內容。常見變數宣告有下列二種方式:</p><p><br /></p><h4 style="text-align: left;">Variable declaration</h4><p>即為宣告變數型態與名稱,此時尚未指定任何值,其格式為 "<b>var [變數名稱] [變數型態]"</b>。您可以後續再指定值給此變數。您可以像下列程式範例中第 3-4 行逐一地宣告變數,也能像 7-10 行一次性宣告多個變數,後續在進行操作的時候再給予值。理所當然,您也能像 13 行一樣,宣告時指定內容值。</p><p><script src="https://gist.github.com/matsurigoto/41f1ef5671c23c6ae3f46da3daa9d635.js"></script></p><p><br /></p><p><br /></p><h4 style="text-align: left;">Short declaration</h4><p>應該是 Golang 開發人員最常用且最容易閱讀的宣告方式,在宣告變數的同時直接指定值。可以逐一宣告,也能透過逗點分開方式一次宣告多個,其變數範例如下:</p><p><script src="https://gist.github.com/matsurigoto/09388f6e75b9693b911f96de1214f31c.js"></script></p><p><br /></p><p>此種宣告方式相當簡顯易懂,但常常出現兩種錯誤使用:</p><p>1. 重複地宣告</p><p>2. 在 main 外直接指定值</p><p><script src="https://gist.github.com/matsurigoto/0226799cde2857d512a332c578e264d5.js"></script></p><p><br /></p><p><br /></p><p><br /></p><h2 style="text-align: left;">常數宣告</h2><p>常數宣告完成後,後續則不能進行操作。常數宣告方式如下:</p><p><script src="https://gist.github.com/matsurigoto/3265bb91f7d75916c6d63a595cc054fe.js"></script></p><p><br /></p><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-64309967943941281292023-02-20T07:54:00.010+08:002023-02-20T07:57:46.764+08:00Golang 如何設定、讀取與列出環境變數<p>因為工作關係開始使用 Golang 進行開發工作,正好遇到存取環境變數需求,趁這個機會簡單彙整一下相關語法,除了自己做筆記,也讓有需要的朋友參考。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuBXGjzPaBhVqRIkpzs8pvve5CCUrwuPDdFJ_1B2GLbLvOvEW1Plx5X3xwFTKyEQsNm1yzw-3Dj319yAduhRkYEqi_I0gq6c5yR9xkY0Ysa6Ky7XVR_UnYr5KURs_jmgvZPzzIWx37_rq_ZxabYK8OUrDKkoCSrGxDip1LxnKBj57Nd93jxMAQqmuU/s1079/photo.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="714" data-original-width="1079" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuBXGjzPaBhVqRIkpzs8pvve5CCUrwuPDdFJ_1B2GLbLvOvEW1Plx5X3xwFTKyEQsNm1yzw-3Dj319yAduhRkYEqi_I0gq6c5yR9xkY0Ysa6Ky7XVR_UnYr5KURs_jmgvZPzzIWx37_rq_ZxabYK8OUrDKkoCSrGxDip1LxnKBj57Nd93jxMAQqmuU/s16000/photo.jpg" /></a></div><p><br /></p><span><a name='more'></a></span><p><br /></p><p>Golang 透過 os 套件,讓開發人員可以對系統環境變數進行操作,只需要在程式上方 import os 即可 (為Golang 主要套件,無須額外下載)。設定與取用環境變數相當簡單:</p><p>設定: os.SetEnv("變數名稱","變數值")</p><p>取用: os.Getenv("變數名稱")</p><p><br /></p><p>簡單的範例如下:</p><p><span><script src="https://gist.github.com/matsurigoto/f8c68da67aa1ee714d9f2e9b782a6ab4.js"></script></span><br /></p><div class="separator" style="clear: both; text-align: left;">執行結果如下:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh79FbUGqro5WG3NnI11ikKA_btCOGp_PfR0KJF3rz9rhOoRHGM3nin-d9wcGDi7Aj3OEaZL2klImMH7zjzlAQyvrk-uGTnoKdoYLVvYtnqiLx_XmUHJmeYDHlbrwToWFu6ymcRt4y44OT5aFuEatfFUnfrce6o5phrnt8XfEuf6CFH40yBKqf2uz19/s515/golang002.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="114" data-original-width="515" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh79FbUGqro5WG3NnI11ikKA_btCOGp_PfR0KJF3rz9rhOoRHGM3nin-d9wcGDi7Aj3OEaZL2klImMH7zjzlAQyvrk-uGTnoKdoYLVvYtnqiLx_XmUHJmeYDHlbrwToWFu6ymcRt4y44OT5aFuEatfFUnfrce6o5phrnt8XfEuf6CFH40yBKqf2uz19/s16000/golang002.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p>另一方面,你可以透過下列指令列出所有環境變數 (取存為陣列,你需要搭配迴圈使用)</p><p>os.Environ()</p><p><script src="https://gist.github.com/matsurigoto/9430bb19df1f3b02a032581002234d2d.js"></script></p><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">執行結果如下:</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQa9x7ZsarxpK6rKwlDnaGav7pBfufx_bSDX8goH5KSsbcF2VUIJYlAKqPsANvKscxoSKJn9I_tsjMtymBmZVraRkP7OMKQBFgn4qN5EEblOcFAf-4Kq7FVqEPNFnrQvtHv9OnspMELl6QZFEGZ3b1hw6QpCdXsfmZ8qL-FuHBaN1eYzfz-Qf580BE/s844/golang001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="414" data-original-width="844" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQa9x7ZsarxpK6rKwlDnaGav7pBfufx_bSDX8goH5KSsbcF2VUIJYlAKqPsANvKscxoSKJn9I_tsjMtymBmZVraRkP7OMKQBFgn4qN5EEblOcFAf-4Kq7FVqEPNFnrQvtHv9OnspMELl6QZFEGZ3b1hw6QpCdXsfmZ8qL-FuHBaN1eYzfz-Qf580BE/s16000/golang001.png" /></a></div><br /><p><br /></p><p><br /></p><p>若您需要在執行過程中,清除所有環境變數,只需要使用 os.clearenv() 指令。理所當然,當您執行程式的時候,將不會印出任何內容。到此為止,即是 Golang 對環境變數操作的指令說明,希望這篇文章對您有所幫助。</p><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-25510148719872053362023-02-04T00:29:00.001+08:002023-02-04T00:29:20.372+08:00Golang 教學 02: Go 指令簡介與建立第一個專案 - Hello World<p>前一篇文章 "<a href="https://dog0416.blogspot.com/2022/11/golnag-01-goland-visual-studio-code.html" target="_blank">環境準備 - Goland 與 Visual Studio Code</a>" 中我們安裝了 Go SDK 並準備好了開發環境。在這一篇文章,我們將簡單介紹 Go 基本指令,並說明如何從無到有建立一個專案。最後會簡單簡單說明如何規劃專案結構。本篇文章若有錯誤或任何問題,請各位前輩不吝提出,謝謝。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho8uBqjcRMvYsYv9cckSmGH74PkROU3WpOx0AtjONIVJ3VVXiBRP0T_Mi8R2x4tMVpgLYdo6YTBWlpaxJ59o6we7Nv2iIp60jaJuQMaXrT7SIIhPoPrHNAoFj1xequ1ZjxmxOit1H0D6AutpAkzLiFGryJoP8oU6PJKUdvEQk18LK-LuMnkKjJkQnv/s1076/youtube%20%E5%B0%81%E9%9D%A2.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="676" data-original-width="1076" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEho8uBqjcRMvYsYv9cckSmGH74PkROU3WpOx0AtjONIVJ3VVXiBRP0T_Mi8R2x4tMVpgLYdo6YTBWlpaxJ59o6we7Nv2iIp60jaJuQMaXrT7SIIhPoPrHNAoFj1xequ1ZjxmxOit1H0D6AutpAkzLiFGryJoP8oU6PJKUdvEQk18LK-LuMnkKjJkQnv/s16000/youtube%20%E5%B0%81%E9%9D%A2.jpg" /></a></div><p><br /></p><span><a name='more'></a></span><p><br /></p><h2 style="text-align: left;">Go 指令概述</h2><p>理所當然,在使用 Go 指令前務必確認是否有安裝 Go SDK、設定 Go Root 與環境變數 Path。您可以先使用 <span style="color: red;">Go Version</span> 與 <span style="color: red;">Go Env</span> 進行確認。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6qX9pVmNN_AViI-UG7_McQ1rsbTY8jwUWHbkiifsmqxJLea4DrDHbHRo6M668XR6X8X4lBwJH7Q-PVjYNPJ7GTphErhjoHy4iMDH9unX0i_QjHP9r5sWlTR8i4Bkz4CAp6veWy8NUagNXbh5OPhwZTlQMEzgTdeHIdmMTtlMaV4rwR_TBoz8iU979/s1218/001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="419" data-original-width="1218" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6qX9pVmNN_AViI-UG7_McQ1rsbTY8jwUWHbkiifsmqxJLea4DrDHbHRo6M668XR6X8X4lBwJH7Q-PVjYNPJ7GTphErhjoHy4iMDH9unX0i_QjHP9r5sWlTR8i4Bkz4CAp6veWy8NUagNXbh5OPhwZTlQMEzgTdeHIdmMTtlMaV4rwR_TBoz8iU979/w640-h220/001.png" width="640" /></a></div><br /><p><br /></p><p>起手式當然是查詢指令!! 你能透過 <span style="color: red;">go</span> 指令查詢有哪些指令,如果你想要更清楚該指令該指令,你可以使用 go help <指令> (如: go help doc 或 go help install)。Go 指令語法組成相當簡單,只需要輸入 go + 命令與所需要的參數即可,指令結構如下:</p><p><b>go <command> [arguments]</b></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoDp01Aw6iWKBPY7jJFJklWPbZ7eYX80V40Lty0qS55lC0w6Q8L_foWqvvqs-874QY1QZgsYdhR_BHF4_VPzTWenYKbaeZxBLNy0ueL05a8soeQi-uo-ds3p8Eb9ICSBVElAFDBeJs6Dzlzg0JP92Js8qQz4T3OyFse6yyVZsVGkrZsizDOqwqPkvL/s1041/002.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="678" data-original-width="1041" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoDp01Aw6iWKBPY7jJFJklWPbZ7eYX80V40Lty0qS55lC0w6Q8L_foWqvvqs-874QY1QZgsYdhR_BHF4_VPzTWenYKbaeZxBLNy0ueL05a8soeQi-uo-ds3p8Eb9ICSBVElAFDBeJs6Dzlzg0JP92Js8qQz4T3OyFse6yyVZsVGkrZsizDOqwqPkvL/s16000/002.png" /></a></div><br /><p><br /></p><p>對於新手而言,最重要的是文件說明,您可以透過下列指令知道如何使用 go doc 查詢相關文件。</p><p><b> go help doc</b></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJIKdkTTrHbDm0wI4kqASydKAqBJpssLlRs-qp1h0oc-ZRamIaQiQJ21RBvZLHWU6DqQo67DZt6fXGf9m5fedR72SnBDcz3srHWqUUXbw9YieUgHjc7ftiE7ciGUoIXFRWrCaoaSkKKOPX1B61Vcgg8LnVDELM4sn1t0AOTM3ECtM3TAt0PdOx9o_o/s1154/go002.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="742" data-original-width="1154" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJIKdkTTrHbDm0wI4kqASydKAqBJpssLlRs-qp1h0oc-ZRamIaQiQJ21RBvZLHWU6DqQo67DZt6fXGf9m5fedR72SnBDcz3srHWqUUXbw9YieUgHjc7ftiE7ciGUoIXFRWrCaoaSkKKOPX1B61Vcgg8LnVDELM4sn1t0AOTM3ECtM3TAt0PdOx9o_o/s16000/go002.png" /></a></div><br /><p><br /></p><p><br /></p><p>如上圖使用 go help doc 指令後的說明,go doc 可以查詢 package, method 與 function。您可以透過下列指令查詢 json.Decoder 相關文件。依此類推,你可以取得更多你想要的資訊。</p><p><b>go doc json.Decoder</b></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu4e7DZjzKuaILumxsI0ZmVmLzVDPRYpXlv8Tv-Zqy0qcaN9r3I6aXUbYVzKX5v4sDJC0_7xeVd-li4EgYwu5RfCYhG8r_OcgRK4gOWOuDxyKs5EGVlYEAoaa3oFY-ONvn3AtlT_xsIh40Uc0pCxMgd2pnAxjBSKDS9r9iHsfFFEiH83GUHdQd_GBr/s925/go003.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="513" data-original-width="925" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu4e7DZjzKuaILumxsI0ZmVmLzVDPRYpXlv8Tv-Zqy0qcaN9r3I6aXUbYVzKX5v4sDJC0_7xeVd-li4EgYwu5RfCYhG8r_OcgRK4gOWOuDxyKs5EGVlYEAoaa3oFY-ONvn3AtlT_xsIh40Uc0pCxMgd2pnAxjBSKDS9r9iHsfFFEiH83GUHdQd_GBr/s16000/go003.png" /></a></div><br /><p><br /></p><p><br /></p><h2 style="text-align: left;">如何開始一個專案</h2><p>Golang 其實不需要專案設定檔案,只需要將專案資料夾結構與 import 路徑設定好,即可編譯與運作。但每種程式語言皆會遇到套件管理問題,Golang 也不例外。所以在開始 Golang 專案時,我們會透過 go mod init <project-name> 指令來初始化套件管理檔案 (go.mod)。先建立一個空白資料夾 hello-world,使用 Visual Studio Code 開啟此資料夾,接著開啟終端機,輸入下列指令</p><p><b>go mod init hello-world</b></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiNLbPZmVVxqe1xPZoGy9AoHEk4Rk10JMD1s1A-rCmcvMspQMuMyyTNyqAvSuiHHh1mig6Fb61-Lm56hdH4hGZ-C5xWiPBAupMzG0wuEWzpJ9Ymz1mV69j9A19joBvM5rEkFAFf_7uwd-pbXzi6MaUCJpNuV5q2F8ilLcVNhKSt2RNaE-RcJAJsBjI/s1370/go004.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="724" data-original-width="1370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiNLbPZmVVxqe1xPZoGy9AoHEk4Rk10JMD1s1A-rCmcvMspQMuMyyTNyqAvSuiHHh1mig6Fb61-Lm56hdH4hGZ-C5xWiPBAupMzG0wuEWzpJ9Ymz1mV69j9A19joBvM5rEkFAFf_7uwd-pbXzi6MaUCJpNuV5q2F8ilLcVNhKSt2RNaE-RcJAJsBjI/s16000/go004.png" /></a></div><div><br /></div><br /><p><br /></p><p>當您編譯程式時有用到<b>第三方 Package (套件)</b>,將會被記錄在此 go.mod 檔案。接下來,您可以開始撰寫第一個 Golang 應用程式:建立 main.go 檔案,並加入以下程式碼:</p><script src="https://gist.github.com/matsurigoto/c3ecea860783b34d4d8f1d160f0f2ca8.js"></script><p><br /></p><p><br /></p><p>完成後,輸入 go run main.go,即開始編譯/啟動您的第一個程式。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFfJMk2HjGTEhdXHoM63QDIws26CPmtodVHAymirKpmrseisDE3tXTkaq07ZWPnl7DCYMcRk20cyvz-M13Ws17iK6Zga7VtKNPUj06wmBZCJQJeIZvDyjpAxR2VU-7eMiL8rLSWR-f9RCOMtbqL_wSBZYwp66-DFvREu4e6-l1LWBmCb4n4arhKeQ0/s580/go005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="244" data-original-width="580" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFfJMk2HjGTEhdXHoM63QDIws26CPmtodVHAymirKpmrseisDE3tXTkaq07ZWPnl7DCYMcRk20cyvz-M13Ws17iK6Zga7VtKNPUj06wmBZCJQJeIZvDyjpAxR2VU-7eMiL8rLSWR-f9RCOMtbqL_wSBZYwp66-DFvREu4e6-l1LWBmCb4n4arhKeQ0/s16000/go005.png" /></a></div><br /><p><br /></p><p><br /></p><p>接下來,我們要使用 google/uuid 套件來產生 uuid,使用下列指令來加入套件。</p><p><b>go get github.com/google/uuid</b></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkynXfCKd9QjPj0ngHeLaIFTq30UBUXRoXDDmF2XEDoBM9Rs0spW5bcpn_Y6zmq7Y-p97tZOdhwY6Wbvwl-uDX-Ir-axUNUys9I_CD85VuMqJF5fyirpEggH1dams4sSIgX-iWcLAxis5hriKB3cpCGWY03BjmoJrnjiQfTjPrU1KLVly7s4I5KMbY/s580/go005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="244" data-original-width="580" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkynXfCKd9QjPj0ngHeLaIFTq30UBUXRoXDDmF2XEDoBM9Rs0spW5bcpn_Y6zmq7Y-p97tZOdhwY6Wbvwl-uDX-Ir-axUNUys9I_CD85VuMqJF5fyirpEggH1dams4sSIgX-iWcLAxis5hriKB3cpCGWY03BjmoJrnjiQfTjPrU1KLVly7s4I5KMbY/s16000/go005.png" /></a></div><br /><p><br /></p><p><br /></p><p>檢視 go.mod 檔案,可以發現套件已經記錄在裡面。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdQdLuS7ER0UsUVFWVT0kByH-U1W0rCcggNmDsLS2RKcivC3_IHzsYHrI6l3Eua4qQaEaLWZZ1JTz7s2eL5pBB-i87g7yvVQO3Oxb_8F5R2vbfN_BhI3WwdDyxW4W1Req7ayxALA5kQQeHUQnpYxWqSYTGx9vqhHv9GoqFdcYu4PuniSFqa2jV1tl3/s852/go005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="334" data-original-width="852" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdQdLuS7ER0UsUVFWVT0kByH-U1W0rCcggNmDsLS2RKcivC3_IHzsYHrI6l3Eua4qQaEaLWZZ1JTz7s2eL5pBB-i87g7yvVQO3Oxb_8F5R2vbfN_BhI3WwdDyxW4W1Req7ayxALA5kQQeHUQnpYxWqSYTGx9vqhHv9GoqFdcYu4PuniSFqa2jV1tl3/s16000/go005.png" /></a></div><br /><p><br /></p><p>修改程式內容如下,我們將印出 uuid。</p><script src="https://gist.github.com/matsurigoto/01f200bf4d7bca6f429c6b5a02cab43d.js"></script><p><br /></p><p><br /></p><p>再一次使用 go run main.go 執行您的程式,可以發現成功印出 uuid。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUZgK7ME122yF2mPhFUJDEeOzeX9ahr8wdrVhAxWWzmf1fDgS2hF7FaakJUjjt0Mi3bSE4_WGhLT9dZ0-_mgyGLCKNLI_j3EKhzKrprvI4KS8cVWZm5P9Qne7jxCidUcuB5Pi9AIfqhMdM2mpsWvT5WxNmMl554MY5Nh8stutrFBmut54unFdbN7uS/s745/006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="274" data-original-width="745" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUZgK7ME122yF2mPhFUJDEeOzeX9ahr8wdrVhAxWWzmf1fDgS2hF7FaakJUjjt0Mi3bSE4_WGhLT9dZ0-_mgyGLCKNLI_j3EKhzKrprvI4KS8cVWZm5P9Qne7jxCidUcuB5Pi9AIfqhMdM2mpsWvT5WxNmMl554MY5Nh8stutrFBmut54unFdbN7uS/s16000/006.png" /></a></div><br /><p><br /></p><p>經過本篇文章說明,你應該已經能理解如何建立與執行 Golang 應用程式,也清楚理解一個建立新的 Golang 程式時,如何初始化套件管理。</p><p><br /></p><p></p><blockquote>小技巧:開發過程中,pacakge 總會增增減減,若有沒有用到的套件,您可以透過 go mod tidy 移除沒有用到的 package</blockquote><p></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-12006556426981747112022-11-16T08:07:00.007+08:002022-11-16T08:08:42.393+08:00Microsoft Bot Framework: Visual Studio 內下載與使用 SDK Templates<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
前言</h2>過去因為客戶開發需求,我重新複習了 Bot Framework,才發現 Visual Studio 內提供的 Bot 專案範本需要另外下載。這由官方提供的專案範本,可以讓開發人員快速開發 Bot 應用程式,而不需要另外設計專案架構,節省不少時間。本篇文章簡單紀錄如何下載 Bot SDK Template,若有錯誤或任何建議,請各位先進不吝提出,謝謝。</div><div dir="ltr" style="text-align: left;" trbidi="on">
<br /><br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5GFWOZ4ZKAT_s1G53Y-pVJ58hQnv5H4WlW2qDdgnT24wxPwvX9g5ELXbXP-MpXZcd2pjj_U48lWVy3Hg9XAt7SP703Cl2vhC0ZO_O-LHACTIHB2Dg8XWBtpG5jTzWkLdeLshUWKMNrzpScy8t8ybLoqv5JzMugslsvWcSTnQMRGacYbqMLemOmfan/s2000/pixta_95653044_M.jpg" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="970" data-original-width="2000" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj5GFWOZ4ZKAT_s1G53Y-pVJ58hQnv5H4WlW2qDdgnT24wxPwvX9g5ELXbXP-MpXZcd2pjj_U48lWVy3Hg9XAt7SP703Cl2vhC0ZO_O-LHACTIHB2Dg8XWBtpG5jTzWkLdeLshUWKMNrzpScy8t8ybLoqv5JzMugslsvWcSTnQMRGacYbqMLemOmfan/s16000/pixta_95653044_M.jpg" /></a></div><div style="text-align: left;"></div>
<br />
<br />
<a name='more'></a><br />
<br />
<h2 style="text-align: left;">
介紹</h2>下載 Bot Framework v4 SDK Templates for Visual Studio 步驟如下:<br />
Step 1. 開啟 Visual Studio 2019 > Extensions (擴充功能) > Manage Extension (管理擴充功能)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-TEKyU0IqZus/Xm4sQhOWeyI/AAAAAAAAltI/Ev-HkupLSCYqnmSkNng33AmSaMFTwDiNgCLcBGAsYHQ/s1600/000.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="277" data-original-width="1267" height="138" src="https://1.bp.blogspot.com/-TEKyU0IqZus/Xm4sQhOWeyI/AAAAAAAAltI/Ev-HkupLSCYqnmSkNng33AmSaMFTwDiNgCLcBGAsYHQ/s640/000.png" width="640" /></a></div>
<br />
<br />
Step 2. 左邊選擇 Online (線上),右上搜尋列輸入 bot,找到 bot framework v4 SDK Template for Visual Studio ...,點選下載<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-kXqkxx2LafQ/Xm4skaofAlI/AAAAAAAAltQ/Kfj4t7Fr0rA8jcxMKptsYAh0jGLmCQPBwCLcBGAsYHQ/s1600/001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1110" data-original-width="1600" height="442" src="https://1.bp.blogspot.com/-kXqkxx2LafQ/Xm4skaofAlI/AAAAAAAAltQ/Kfj4t7Fr0rA8jcxMKptsYAh0jGLmCQPBwCLcBGAsYHQ/s640/001.png" width="640" /></a></div>
<br />
<br /><br />
Step 3. 下載完成,系統會提醒您需要關閉 Visual Studio,才能進行安裝<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-T6uYXMBkORM/Xm4tD-jy0FI/AAAAAAAAltY/s8K2gwvywQEXSdmb_wqb6-ETfCCz1IS9gCLcBGAsYHQ/s1600/002.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="57" data-original-width="1600" height="22" src="https://1.bp.blogspot.com/-T6uYXMBkORM/Xm4tD-jy0FI/AAAAAAAAltY/s8K2gwvywQEXSdmb_wqb6-ETfCCz1IS9gCLcBGAsYHQ/s640/002.png" width="640" /></a></div>
<br />
<br /><br />
Step 4. 點選 Modify (修改) 進行安裝<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-cZ6_F47qS34/Xm4tVfBP0gI/AAAAAAAAltg/WemyqzDwfQsGBLccp1eqw3V9jzhAlBekACLcBGAsYHQ/s1600/003.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="660" data-original-width="878" height="480" src="https://1.bp.blogspot.com/-cZ6_F47qS34/Xm4tVfBP0gI/AAAAAAAAltg/WemyqzDwfQsGBLccp1eqw3V9jzhAlBekACLcBGAsYHQ/s640/003.png" width="640" /></a></div>
<br />
<br /><br />
Step 4. 安裝完成後,開啟 Visual Studio > 開新專案,即可看見四個關於 bot framework 的樣板,包含 Core Bot with Tests (v4)、 Empty Bot (v4)、Echo Bot (v4)、Core Bot...等,完成我們下載 Bot SDKTemplate 任務。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-3xPvKvge6qI/Xm4th8oYVeI/AAAAAAAAltk/c-C8VUx6XkAh-6RpiwZJLGw2xi0v9LY6QCLcBGAsYHQ/s1600/004.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1003" data-original-width="1600" height="400" src="https://1.bp.blogspot.com/-3xPvKvge6qI/Xm4th8oYVeI/AAAAAAAAltk/c-C8VUx6XkAh-6RpiwZJLGw2xi0v9LY6QCLcBGAsYHQ/s640/004.png" width="640" /></a></div>
<br /></div>
Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-53720321845255327452022-11-16T00:28:00.008+08:002023-04-04T23:25:49.324+08:00Golang 教學01: 環境準備 - Goland 與 Visual Studio Code<p>因為工作團隊是透過 Go 開發應用程式,所以近期內也開始接觸 Go 語言。雖然現代的程式語言寫起來不會太難上手,但仍有一些語法差異 (像 Array 與 Slice 之間差異) 與功能(Gomock 使用方式) 需要學習。趁著這個機會,將一些學習內容與環境配置過程做些彙整與紀錄,提供有興趣的朋友們參考。此系列文章內容會著學習過程中更新,目前大綱如下:</p><p><br /></p><h3 style="text-align: left;">Golang 教學</h3><p></p><ol style="text-align: left;"><li><b>環境準備 - Goland 與 Visual Studio Code</b></li><li><a href="https://dog0416.blogspot.com/2023/02/golang-02-go-hello-world.html" target="_blank">Go 指令說明與建立第一個專案 - Hello World</a></li><li><a href="https://dog0416.blogspot.com/2023/04/golang-03-go.html" target="_blank">Go 資料型態與變數宣告</a></li><li>Go loop 介紹</li><li>Array、Slice 與 Map 使用方式</li><li>Go 專案架構介紹</li><li>Go 語言 Unit Test 基本介紹</li><li>GoMock 使用說明</li><li>使用 Go 撰寫網頁應用程式</li><li>如何將 Go 網頁應用程式部署至 Azure App Services</li><li>Go - 使用 CronJob 進行排程作業</li><li><a href="https://dog0416.blogspot.com/2023/02/golang.html" target="_blank">Golang 如何設定、讀取與列出環境變數</a></li></ol><p></p><p><br /></p><span><a name='more'></a></span><p><br /></p><h2 style="text-align: left;">Go SDK 安裝</h2><p>Go (也稱為 Golang ) 是開放原始碼的程式語言,主要讓開發人員更容易建構簡單、可靠與具有相當效能的軟體,由 Google 開發泛用型程式語言,並具有強型別、高併發特性與垃圾回收...等功能。在 Windows 上安裝 Go 相當簡單,只需要下載安裝程式,依循步驟安裝即可。若您使用不同作業系統 (Linux 或 Windows),可以參考 <a href="https://go.dev/doc/install" target="_blank">Go 安裝</a>。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_0eMJWt4nY6M4grjE0yVMCrEdb8d5o_GIljBEqKoV48lkYKIDozspUagcJ3X5TkQLRBmJxLz43rUvDYEaxSo5A8eXPlY5AUk_Aj7Ni0ncjDvqlCkhjOzmpXnceDe4_TCn_iOCbbKlsXBFgwFOx3BSdhteuBvbbUygLQGXFlTMrSXZ1hmOhj2-5XP_/s1923/001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="830" data-original-width="1923" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_0eMJWt4nY6M4grjE0yVMCrEdb8d5o_GIljBEqKoV48lkYKIDozspUagcJ3X5TkQLRBmJxLz43rUvDYEaxSo5A8eXPlY5AUk_Aj7Ni0ncjDvqlCkhjOzmpXnceDe4_TCn_iOCbbKlsXBFgwFOx3BSdhteuBvbbUygLQGXFlTMrSXZ1hmOhj2-5XP_/s16000/001.png" /></a></div><div><br /></div><br /><p>與安裝其他工具與套件相同,不免俗的要下個指令確認是否安裝好了,你可以開啟終端機或命令列,輸入 <span style="color: red;">go version</span>,確認是否安裝成功與其版本。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKbwZnJRDwi5Nk40ZSqTqR07kNMWF-M6d5DuO66la6lg7xUKtMGBXcSSiqjQ7TxBsNKiSTA_rqcEksb3O9gC8a61q4fScfYc2D0dnNuZYHUpnjnJ-dLkWH8EnP1hDdN-t37wmLq3GmB_S18586EZojjcufvWCmTlxrPP_fVnK_67ymzU1tucp3XyF_/s919/002.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="380" data-original-width="919" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKbwZnJRDwi5Nk40ZSqTqR07kNMWF-M6d5DuO66la6lg7xUKtMGBXcSSiqjQ7TxBsNKiSTA_rqcEksb3O9gC8a61q4fScfYc2D0dnNuZYHUpnjnJ-dLkWH8EnP1hDdN-t37wmLq3GmB_S18586EZojjcufvWCmTlxrPP_fVnK_67ymzU1tucp3XyF_/s16000/002.png" /></a></div><br /><p><br /></p><p>安裝完成後,另外解釋幾個路徑,在環境設定階段您可能會用到<span>:</span></p><p>Go Root 即為 Golang 安裝的目錄,存放官方程式庫 (安裝後會設定於環境變數)</p><p>Go Path 開發過程中使用的第三方套件 (通常為專案路徑)</p><p>若要檢查相關設定,您可以透過 <span style="color: red;">go env</span> 指令進行確認</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT3Pb0CK_gXXXP5872zsG7mvkUCkfDD4w--C_Ka3xtyHj3rYAtL4b7PwGx92bxCIMw7bfQMVpUGoYM59wI5LS0D-0lYbxbDeDTwmcf9qRe1l79ztdoG0_JMOpwq3vqOfLvo_38G7intU5dStbHCRdNP9DjQD_pjwVzP2nha3xf871EwlyM96KTkZkf/s1180/003.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="620" data-original-width="1180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT3Pb0CK_gXXXP5872zsG7mvkUCkfDD4w--C_Ka3xtyHj3rYAtL4b7PwGx92bxCIMw7bfQMVpUGoYM59wI5LS0D-0lYbxbDeDTwmcf9qRe1l79ztdoG0_JMOpwq3vqOfLvo_38G7intU5dStbHCRdNP9DjQD_pjwVzP2nha3xf871EwlyM96KTkZkf/s16000/003.png" /></a></p><p><br /></p><p><br /></p><p><br /></p><h2 style="text-align: left;">Visual Studio Code 環境設定</h2><p>Visual Studio Code 是免費、輕量且跨平台的開發編輯器,可適用於不同程式語言開發,理所當然,也包含 Go。您可以在 Visual Studio Code Extension (延伸模組) 內找到 Go 並進行安裝,他提供開發過程中所需要的功能 (IntelliSense、code navigation、symbol search、testing 與 debugging...等)。</p><p></p><blockquote>更多相關操作與設定,可以參考 <a href="https://code.visualstudio.com/docs/languages/go" target="_blank">Go in Visual Studio Code</a></blockquote><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj977_xNiYatAoDioApCTZ5XgJ66TTQ2JgwjbeAu9lShvLmlP4e0ndsLJJmCwMOjh3hlEqTg2s6wV18yX4m_KO-Wn8cmhU40XQG3eNAoroNuvoaJgOYVmgy94B2YPXgG3-K3gkcGr5MyGUYCZ1opU0sHZAcZHNfeRcmBRoTJ7vpFNHdsmyZ-yZFm6U6/s1983/004.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1155" data-original-width="1983" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj977_xNiYatAoDioApCTZ5XgJ66TTQ2JgwjbeAu9lShvLmlP4e0ndsLJJmCwMOjh3hlEqTg2s6wV18yX4m_KO-Wn8cmhU40XQG3eNAoroNuvoaJgOYVmgy94B2YPXgG3-K3gkcGr5MyGUYCZ1opU0sHZAcZHNfeRcmBRoTJ7vpFNHdsmyZ-yZFm6U6/s16000/004.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><h2 style="text-align: left;">Goland 環境設定</h2><p>這幾年寫程式的經驗是花一些錢來維護自己程式的品質。無論在撰寫程式或建構持續整合、持續部署,當需要維持一定品質、效率與可維護性時,就必須投入相對應時間。透過付費工具可以讓你更專注於重要的開發工作,減少 Code Review 時間並提高品質與可維護性。後續這幾年若有需求,我個人是直接購買 JetBrain 工具進行開發工作,透過它協助我檢查程式內容Goland 設定相當簡單,當你安裝完 Go SDK 並確認 Go Root 後,即可在 Goland 設定畫面找到相對應設定。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPb3e9rYPXpFSea34RrAvQVifGEdhvqfgtm3yjeCSDu6N93qFavgkemd8XFSP3TSBInMMHrE_rZiT0uHr0CxEwcHkfJrSW2JkFBJDgz8K9eB6Juw43nvHl6cw3KdoY74cZV7kk98zJ0S7_Ob24hQQDm3rEjfxm34u5A4p2UDoXimnkbc5FtakWkYg7/s786/001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="643" data-original-width="786" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPb3e9rYPXpFSea34RrAvQVifGEdhvqfgtm3yjeCSDu6N93qFavgkemd8XFSP3TSBInMMHrE_rZiT0uHr0CxEwcHkfJrSW2JkFBJDgz8K9eB6Juw43nvHl6cw3KdoY74cZV7kk98zJ0S7_Ob24hQQDm3rEjfxm34u5A4p2UDoXimnkbc5FtakWkYg7/s16000/001.png" /></a></div><br /><p><br /></p><p><br /></p><p>在開始使用前,資深的同事們建議將 Go Code Style 設定為 goimports,Goland 能自動將 import 內容按順序排好。設定位置在 File > Settings > Editor > Code Style > Go > Import,設定方式請參考下圖:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn3JxIf4VSSSOIakJBvVYTlk72WKq7xG490giaVzlIaQN3OyVgBf-IGWAyLZxRdInryHSB5fEIF0LA2uzRK-ZaRUa3Osal3GziZhcMOEqVneLpOszW0fzbW9_0foY2SOdyoYNrD3HmbnqXORuKsV_knX-hZsn-qAMDuhJv4FXGX9L1zP7TPEEp_ufC/s1251/002.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="713" data-original-width="1251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn3JxIf4VSSSOIakJBvVYTlk72WKq7xG490giaVzlIaQN3OyVgBf-IGWAyLZxRdInryHSB5fEIF0LA2uzRK-ZaRUa3Osal3GziZhcMOEqVneLpOszW0fzbW9_0foY2SOdyoYNrD3HmbnqXORuKsV_knX-hZsn-qAMDuhJv4FXGX9L1zP7TPEEp_ufC/s16000/002.png" /></a></div><br /><p><br /></p><p>如此一來,無論是 Visual Studio Code 或 Goland,我們都做好初步的設定。在下一篇文章,我們會簡單說明 Go 指令並開始第一個專案。讓我們開始快樂的寫 Go 吧!</p><p><br /></p><p><br /></p><h2 style="text-align: left;">參考資料</h2><div>1. <a href="https://zh.wikipedia.org/zh-tw/Go" target="_blank">Go - Wiki</a></div><div><br /></div><div><br /></div><div><br /></div>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-82953766375172412002022-11-09T00:51:00.004+08:002022-11-09T00:59:58.330+08:00Helm 介紹與基本指令說明<p>若您曾經有接觸過 Kubernetes,可能會發現當系統越來越複雜時,所需要用到的 yaml 越變越多,相依性也越來越複雜,導致操作 Kubernetes 時步驟變多。Helm 是一套 Kubernetes Package Manager (套件管理員),它能 Package (包裝)、Versioning (版本控制) 與 Customization (自定義) Kubernetes 資源,並解其相依性問題。與常見的套件管理工具相似,Helm 的套件稱為 Chart,內部包含相依套件與定義檔案 (yaml)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimlOBkPax36X_akULdZt5N0ulEP3E-t5iEYma6Rwa3teGHu4BbLtCKEe4UiOVY1NSJpi4QuXLlDUwpzLLHnLueoBjnGA7pJkH2A7OzPGu3WvBO7feZPPFOyq1-hWgoGpU5gfBQozYk0K9CkGDKOA6sk27OqLTYe8GCjKhlqaGaCIw1J7SoyDJqKtlM/s1280/001.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimlOBkPax36X_akULdZt5N0ulEP3E-t5iEYma6Rwa3teGHu4BbLtCKEe4UiOVY1NSJpi4QuXLlDUwpzLLHnLueoBjnGA7pJkH2A7OzPGu3WvBO7feZPPFOyq1-hWgoGpU5gfBQozYk0K9CkGDKOA6sk27OqLTYe8GCjKhlqaGaCIw1J7SoyDJqKtlM/s16000/001.jpg" /></a></div><span><a name='more'></a></span><p><br /></p><p>Helm 的運作方式是將各種系統所需要的 yaml 檔案封裝成 Chart,透過 Helm 與 Kubernetes Cluster API 溝通,進而建立出所需要的元件。最大的優勢就是不需要逐一的使用 Kubetail apply指令執行 yaml 檔案,除了省下時間,也降低複雜操作導致錯誤發生機率。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOu8VWLrrGtEwICeDPnrSax9QRy7SV6qdJPDbZPpCxYJtKVllUriJlGLIM_cOGGLFR71EMDQcEgAdw7sowi9e2DQ7q8FAufm8rvoCLgw3_xMRFYc-YJpZe0K0yAhgV50QVkfM38TxxbX2Bkuv5CLGKkUUxee8UE_DbjNz8ICfJInxaVZ-9q2RlrDjn/s1280/pp.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOu8VWLrrGtEwICeDPnrSax9QRy7SV6qdJPDbZPpCxYJtKVllUriJlGLIM_cOGGLFR71EMDQcEgAdw7sowi9e2DQ7q8FAufm8rvoCLgw3_xMRFYc-YJpZe0K0yAhgV50QVkfM38TxxbX2Bkuv5CLGKkUUxee8UE_DbjNz8ICfJInxaVZ-9q2RlrDjn/s16000/pp.jpg" /></a></div><br /><p><br /></p><p>您可以在 Helm 官方網站找到 <a href="https://helm.sh/docs/intro/install/" target="_blank">Helm Install</a> 說明,在 Windows 環境下可以透過 <a href="https://chocolatey.org/" target="_blank">Chocolatey </a>(Windows 套件管理工具) 以 choco install kubernetes-helm 指令安裝 Helm。不同作業系統可以參考官方文件。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1vPIH2iTaQfYqtZUBS4Q_Jdl64K4i5xlsrthQ1UclDUBZPDBMYHoJ78Xa5wEPWeCEE8ogLlvSh8StDnlY0ofq85WN2Bx3sPUuMPm4D0_TxqK-Ab1iWvxYzKfOPK5F4OKloxkzvszUdNwcsTzU6qsFR7idDoNZnQm3Ht_jOIFOwOPH_bB8PhsME0Cm/s877/002.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="331" data-original-width="877" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1vPIH2iTaQfYqtZUBS4Q_Jdl64K4i5xlsrthQ1UclDUBZPDBMYHoJ78Xa5wEPWeCEE8ogLlvSh8StDnlY0ofq85WN2Bx3sPUuMPm4D0_TxqK-Ab1iWvxYzKfOPK5F4OKloxkzvszUdNwcsTzU6qsFR7idDoNZnQm3Ht_jOIFOwOPH_bB8PhsME0Cm/s16000/002.png" /></a></div><br /><p><br /></p><p><br /></p><p>Helm 使用方式相當簡單,在第一次使用時,您需要初始化 chart repository</p><p><span style="color: red;">helm repo add bitnami https://charts.bitnami.com/bitnami</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6a-QUSruyQ65kSC-5K14L89y9uvV4NkywbLnP0BIOLaLbL9K4QCvNRgdWAyj3GNAMVSrTgc0PTm4wN6MBCm-5vX-oVwvMdc0VZeMZWI2Xfv2ehUu4of5fruhcEwkamWzv19xbDzHZOV05vm8rLoGv2-UlVyH-dDfyG75_GJNTlGQvv7Aaw8tevRLc/s626/003.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="173" data-original-width="626" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6a-QUSruyQ65kSC-5K14L89y9uvV4NkywbLnP0BIOLaLbL9K4QCvNRgdWAyj3GNAMVSrTgc0PTm4wN6MBCm-5vX-oVwvMdc0VZeMZWI2Xfv2ehUu4of5fruhcEwkamWzv19xbDzHZOV05vm8rLoGv2-UlVyH-dDfyG75_GJNTlGQvv7Aaw8tevRLc/s16000/003.png" /></a></div><p><br /></p><p><br /></p><p>一旦初始化完成,你可以檢視有哪些既有的 chart 可以使用</p><p><span style="color: red;">helm search repo bitnami</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIDl_OmS_sWgIhziOcJlUPBOHUlaRxfoLpeI1ow_KQnh3PVlnZFltniGVxHchU0TeqncyEAoffdEb4u1_DXrfwrCv1wTDyQ5TDtCbOqq2KN5oAgMF3ZlG8WzdbfhXdUDRZ1aBC-Oslj1ulYcFWSaQZp8wq7gAvx-bTjCrJfqHwgQlTPANLfw19KMcU/s1106/004.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="385" data-original-width="1106" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIDl_OmS_sWgIhziOcJlUPBOHUlaRxfoLpeI1ow_KQnh3PVlnZFltniGVxHchU0TeqncyEAoffdEb4u1_DXrfwrCv1wTDyQ5TDtCbOqq2KN5oAgMF3ZlG8WzdbfhXdUDRZ1aBC-Oslj1ulYcFWSaQZp8wq7gAvx-bTjCrJfqHwgQlTPANLfw19KMcU/s16000/004.png" /></a></div><br /><p><br /></p><p><br /></p><p>當您要更新 repository 時,可以透過下列指令</p><p><span style="color: red;">helm repo update</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPCx9KOJIk0VgWAWJgvBGfW7T_TMiSPljew9Q3xbdxl8Xw3VBZsLzOPo5Ixswzgg1rSHdMgza5sKL6zVXeD9e3iSTigU0Lnv4jSS25bdNuuoQvVIayZiHAO6AEqRmVSwELTQdCQNDG1UkZkXSxE8QYneTCZxWEeLRzTf7eFPkz9ZnIgtGytypgsL_J/s625/005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="191" data-original-width="625" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPCx9KOJIk0VgWAWJgvBGfW7T_TMiSPljew9Q3xbdxl8Xw3VBZsLzOPo5Ixswzgg1rSHdMgza5sKL6zVXeD9e3iSTigU0Lnv4jSS25bdNuuoQvVIayZiHAO6AEqRmVSwELTQdCQNDG1UkZkXSxE8QYneTCZxWEeLRzTf7eFPkz9ZnIgtGytypgsL_J/s16000/005.png" /></a></div><br /><p><br /></p><p><br /></p><p>若您想要移除 repository ,可以透過下列指令</p><p><span style="color: red;">helm repo remove bitnami</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaECAc9ZTyeIqrIvKnpXYAtMbqMhmTWejxWQHmVkNvEPlGAa86xJQ8cCUTTztFkeRcS2hvuepdEwSZmDdN8XAhk3ipY_G8-ul1wpoQThipC4bGMom6lSoKpF2ZxeJhsmYLPREytRdHXa2Nag_cx8jHYOmCGRqM1LgN-5aGkTBWAera1Fdon7W8Jwei/s625/006.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="191" data-original-width="625" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaECAc9ZTyeIqrIvKnpXYAtMbqMhmTWejxWQHmVkNvEPlGAa86xJQ8cCUTTztFkeRcS2hvuepdEwSZmDdN8XAhk3ipY_G8-ul1wpoQThipC4bGMom6lSoKpF2ZxeJhsmYLPREytRdHXa2Nag_cx8jHYOmCGRqM1LgN-5aGkTBWAera1Fdon7W8Jwei/s16000/006.png" /></a></div><br /><p><br /></p><p><br /></p><p>上列即為 Helm 對於 repository 的操作。若您想透過 helm 安裝 mongodb,可以透過下列指令</p><p></p><blockquote>安裝 chart 即需要再 kubernetes 環境下執行,您可以考慮 minikube、Kind...等等單機環境,或使用雲端 Kubernetes 服務 (如 Azure kubernetes service)</blockquote><p></p><p>指令格式 helm install [name] [repo/chartname]</p><p><span style="color: red;">helm install mongodb-release stable/mongodb</span></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfvrntrrqwYroqbUq7J1QuQy9kcl0tvBd4QMRQXDffyh20nSGeCqEJkP-iha7S1dfDyftP2TT_vlE6XOzMyfC3KlS0RXA7YKKnLYki8mLV1nEo_ij9pOpH64R_j_K1w6lnWFRxCtHFQktBoyMW3De5T1-68mpc4yEfFbHv6GU_0iPID5llOUB1EkRB/s826/005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="384" data-original-width="826" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfvrntrrqwYroqbUq7J1QuQy9kcl0tvBd4QMRQXDffyh20nSGeCqEJkP-iha7S1dfDyftP2TT_vlE6XOzMyfC3KlS0RXA7YKKnLYki8mLV1nEo_ij9pOpH64R_j_K1w6lnWFRxCtHFQktBoyMW3De5T1-68mpc4yEfFbHv6GU_0iPID5llOUB1EkRB/s16000/005.png" /></a></div><br /><p><br /></p><p>透過 <span style="color: red;">kubectl get pods</span> 可以看見 mongodb 正常運作</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLOy-EdkuSVns9xBIHyiZY9PsvJVijlLF0mWrza7gSTleK6ynButx9ml2-_0w4SwpN7UDxohn4-DDMdn5kqAMoJspBw2Vg73CzkwShvhwoa0ELp9WgslI90fTunkdlQj7bdyOeBxJjNrmgNJPY3-Ezh1xSXE2ez43hjDuUc9sQrhjzWkejRBAy02dO/s589/007.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="145" data-original-width="589" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLOy-EdkuSVns9xBIHyiZY9PsvJVijlLF0mWrza7gSTleK6ynButx9ml2-_0w4SwpN7UDxohn4-DDMdn5kqAMoJspBw2Vg73CzkwShvhwoa0ELp9WgslI90fTunkdlQj7bdyOeBxJjNrmgNJPY3-Ezh1xSXE2ez43hjDuUc9sQrhjzWkejRBAy02dO/s16000/007.png" /></a></div><br /><p><br /></p><p><br /></p><p>一旦您不需要相關服務,可以套過下列<span style="color: red;"> helm delete</span> 指令進行移除</p><p>helm delete mongodb-release</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsWVcdcxme6ozA1VdQU3xvNvVVJAXdxgYlseTSRnLZrw43dZCHWDfSzV19lTjMlPrwDJRXvfF9TG6dOSlR5kfAq53X_u12NGO9T0IwmC7h6pT77dBryynOKZTDqSdpexhI3o_haP2N2OKtWyu-x2U1Nn68-XPR9EsRBwOPoGNo1ICRwmfadUPNg_qV/s404/008.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="126" data-original-width="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsWVcdcxme6ozA1VdQU3xvNvVVJAXdxgYlseTSRnLZrw43dZCHWDfSzV19lTjMlPrwDJRXvfF9TG6dOSlR5kfAq53X_u12NGO9T0IwmC7h6pT77dBryynOKZTDqSdpexhI3o_haP2N2OKtWyu-x2U1Nn68-XPR9EsRBwOPoGNo1ICRwmfadUPNg_qV/s16000/008.png" /></a></div><br /><p><br /></p><p><br /></p><p>除了上列安裝/移除 chart,也提供相關 chart 指令給有興趣的朋友參考<a href="https://blogger.googleusercontent.com/img/a/AVvXsEhDuZJ13pJq-bLJ49K5YIyW7Ouwee1ygW8_Cz0cZciI1gqVy5WtNTecXkGDveDThOyAL90v65mfGffWr5pUbB-wwJur6Nh20FfPCSrmXVdrL1M5QL-CRXVf28JQKfyNrkooHiifH1Hdtvjb23hhIw9stntqvCklayCjrZYU6irexZ6so45f5Czd7_Ie" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img alt="" data-original-height="568" data-original-width="1338" src="https://blogger.googleusercontent.com/img/a/AVvXsEhDuZJ13pJq-bLJ49K5YIyW7Ouwee1ygW8_Cz0cZciI1gqVy5WtNTecXkGDveDThOyAL90v65mfGffWr5pUbB-wwJur6Nh20FfPCSrmXVdrL1M5QL-CRXVf28JQKfyNrkooHiifH1Hdtvjb23hhIw9stntqvCklayCjrZYU6irexZ6so45f5Czd7_Ie=s16000" /></a></p><p><br /></p><br />Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-3461610059818798362022-11-04T07:52:00.003+08:002022-11-04T07:52:50.457+08:00Docker desktop for windows 啟動失敗,錯誤訊息 You are not allowed to use Docker, you must be in the “docker-users” group<p>當您透過不是 Administrator 帳號安裝 docker desktop for windows,啟動時您可能會遇到 You are not allowed to use Docker, you must be in the “docker-users” group 錯誤訊息,表示您沒有使用權限。解決方法相當簡單,只需要將使用者帳號加入至 docker-users 群組即可。下面我們簡單說明操作步驟。</p><p><br /></p><p><img border="0" data-original-height="1216" data-original-width="1995" height="390" src="https://1.bp.blogspot.com/-338EtiZIG30/YKN3dVXYnlI/AAAAAAAArnE/pPjtlfvzZTsQBG9XW_ELOuGzCzufhiKjQCLcBGAsYHQ/w640-h390/pixta_56650001_M_1.jpg" style="color: #0000ee; text-align: center;" width="640" /></p><p><br /></p><span><a name='more'></a></span><p><br /></p><p>步驟 1. 搜尋電腦管理 (可以點選開始,輸入電腦管理進行搜尋)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjib513wPJ8OwbBhIXgZ3kiCeCEmX24urNGSrOwA1BwM-s-3D-97-c4xplZIUk3p2O85hglnyCnBXk3oTH0P4u1o0ZYpJjOIh0T3QtSK2k9KTmqyPzIP6cgle9Q9--jYdmNJuK3oJ5kWj-d33oRlHYiAqYwFcKaeWzPGoGVM3bqnYJMBm47bnUkxI1R/s805/photo_2022-11-04_07-45-46.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="683" data-original-width="805" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjib513wPJ8OwbBhIXgZ3kiCeCEmX24urNGSrOwA1BwM-s-3D-97-c4xplZIUk3p2O85hglnyCnBXk3oTH0P4u1o0ZYpJjOIh0T3QtSK2k9KTmqyPzIP6cgle9Q9--jYdmNJuK3oJ5kWj-d33oRlHYiAqYwFcKaeWzPGoGVM3bqnYJMBm47bnUkxI1R/s16000/photo_2022-11-04_07-45-46.jpg" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 2. 點選 ‘本地使用者與群組’ > ‘群組’ ,找到 ‘docker-user’ 群組。開啟並檢視您的帳號是否在此群組,若沒有,點選新增按鈕加入您的帳號。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqfTYw2knhgs76h7IDRrgo29IT9MCnkN16sXtq0NudXGnH_eK7Wg4-ydquZeqk9AWFlajVD32ZA--s_0e4svmA_y7ntY5OwMpvJ6HxhLZ_7M1UlX5qvFp8jD7HVB4ZYUeFL5b7i25WyNO3rIhjhQMvGuLypBnppzUd3b_JpI-9NuvnshErCYLmE7qV/s991/photo_2022-11-04_07-45-41.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="706" data-original-width="991" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqfTYw2knhgs76h7IDRrgo29IT9MCnkN16sXtq0NudXGnH_eK7Wg4-ydquZeqk9AWFlajVD32ZA--s_0e4svmA_y7ntY5OwMpvJ6HxhLZ_7M1UlX5qvFp8jD7HVB4ZYUeFL5b7i25WyNO3rIhjhQMvGuLypBnppzUd3b_JpI-9NuvnshErCYLmE7qV/s16000/photo_2022-11-04_07-45-41.jpg" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 3. 輸入您的帳號,點選檢查名稱。確認無誤後,點選 OK 按鈕完成加入工作。接下來,您可以嘗試重新啟動 docker desktop for window。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOcCQnIrn-7Kc9yF6b39Lcp8ZZnZxcFr82dFxMk1fy8oAn6nVVb2ZMbQJunfgYSjke41xr-rpOk47ZFtWC-GystJ4oYZeojfaA6CRa7S6-NFnRFZBV6CSzFM9TydQ1BVAB8QBGpVu8kHmgcVHHQA5db0qI8daJMoO24rolFfBfeGafRYjkoCHecZaD/s456/photo_2022-11-04_07-46-32.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="253" data-original-width="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOcCQnIrn-7Kc9yF6b39Lcp8ZZnZxcFr82dFxMk1fy8oAn6nVVb2ZMbQJunfgYSjke41xr-rpOk47ZFtWC-GystJ4oYZeojfaA6CRa7S6-NFnRFZBV6CSzFM9TydQ1BVAB8QBGpVu8kHmgcVHHQA5db0qI8daJMoO24rolFfBfeGafRYjkoCHecZaD/s16000/photo_2022-11-04_07-46-32.jpg" /></a></div><br /><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-72391315011510984032022-10-17T00:06:00.001+08:002022-10-17T00:06:16.807+08:00如何透過 Azure DevOps Service 部署 notebook 至 Azure Databricks<p>Databricks 使用上雖然與 Azure DevOps 沒有直接關係,但可以讓團隊建立開發流程中多環境部署觀念。在產品開發流程中,我們會分成 Dev、Staging 與 Prod 環境:在 Dev 環境中,notebook 會有大幅度的變更與頻繁的測試,直到功能完成或問題解決,才會部署至 Staging 進行測試。</p><p>Staging 屬於類正式環境,除了使用與正式環境相似的環境與資料 (如:正式環境但非最新的資料) 進行測試,以降低部署至正式環境時,因為資料面或環境問題導致錯誤發生。在這個階段,通常也會請專業測試團隊進行測試,以符合客戶需求。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCKQ73CGQ2SxrtCkBFpvlkAc1mez7ciw92h1Y8cawj93teofNthMk9F3uEbWkno53mZmtFrUNvY7kvEEFQxKIuLe1ylacNLu6PPWzz5f3wBxZH6ziTSK82VHjPAQ4WJluxpwB-oIo_DDeaVCmDq--g28ucNHHTS_TiBgT28vqTNZoEq1NUuGmhQxWl/s760/901.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="373" data-original-width="760" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCKQ73CGQ2SxrtCkBFpvlkAc1mez7ciw92h1Y8cawj93teofNthMk9F3uEbWkno53mZmtFrUNvY7kvEEFQxKIuLe1ylacNLu6PPWzz5f3wBxZH6ziTSK82VHjPAQ4WJluxpwB-oIo_DDeaVCmDq--g28ucNHHTS_TiBgT28vqTNZoEq1NUuGmhQxWl/s16000/901.png" /></a></div><p><br /></p><span><a name='more'></a></span><p><br /></p><p>本篇文章將簡單介紹如何透過 Azure Pipeline 部署 notebook 至 Azure Databricks,除了介紹操作步驟,也讓讀者可以了解兩個服務整合的使用情境。若有錯誤會任何建議,請各位前輩不吝提出。</p><p><br /></p><h3 style="text-align: left;">事前準備工作:產生 Access Token 與 workspace url</h3><p>在此準備工作階段,我們將產生 Token 與記錄下 Azure Databricks Url (Workspace URL) 作為後續使用。</p><p>步驟 1. 點選右上角使用者圖示 > User Settings</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ-JsaXxOGf9yROKkrxb7R5ern4_m8BBzJKVqFXXUgDekYGZQm3hI0dmSc5hVupLPaXtNi6EBGGeyXM8DMXInw4o_BkRx57QBpJZIFVVfhVrMM0dydvuJ0MwYwCVENGHnYBjI2HFrRC6MXDr_q-v0XDIbGWFgLBBGMvFHWhqMr5JZ8rxCsvbojkq6d/s639/902.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="639" data-original-width="407" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ-JsaXxOGf9yROKkrxb7R5ern4_m8BBzJKVqFXXUgDekYGZQm3hI0dmSc5hVupLPaXtNi6EBGGeyXM8DMXInw4o_BkRx57QBpJZIFVVfhVrMM0dydvuJ0MwYwCVENGHnYBjI2HFrRC6MXDr_q-v0XDIbGWFgLBBGMvFHWhqMr5JZ8rxCsvbojkq6d/s16000/902.png" /></a></div><br /><p><br /></p><p>步驟 2. 選擇 Access Tokens 頁簽,點選 Generate New Token</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7F7jKawiHXOMNhrgoUplUe1BDBrS8bn4rEPstRbJ5sidI-arAJiVjnWtd8N7k6Bi704IFEsJl2zh-QJz7AuCXRi-86I1heBpncI5-Q7rftp0DGFxOxa-kM4rQU2E3MRDDRYzYe1NpY_LVJKafZZzM11sOlOZfeI5SejX3COnmi4HrP-Eam_TpRF19/s1458/903.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="758" data-original-width="1458" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7F7jKawiHXOMNhrgoUplUe1BDBrS8bn4rEPstRbJ5sidI-arAJiVjnWtd8N7k6Bi704IFEsJl2zh-QJz7AuCXRi-86I1heBpncI5-Q7rftp0DGFxOxa-kM4rQU2E3MRDDRYzYe1NpY_LVJKafZZzM11sOlOZfeI5SejX3COnmi4HrP-Eam_TpRF19/s16000/903.png" /></a></div><br /><p><br /></p><p>步驟 3. 輸入名稱與有效時間</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHZ6wFioy0NDi9MZ4fO01sIFseCex9wS62uUS0bsSKOMv3jjBKVTHTTLeXAGn2aOqJgtxUXt_in5fVPmLpiU_k7quCHC3gVqc_qzuSaxMabcwNU9jkqHKFyBmy_kiP31K4B_luLOZWkN89AGq0Cdmd3pgYbZQUpmOE8eMus6DrgwqbHjgcZGUk40Oz/s1013/904.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="556" data-original-width="1013" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHZ6wFioy0NDi9MZ4fO01sIFseCex9wS62uUS0bsSKOMv3jjBKVTHTTLeXAGn2aOqJgtxUXt_in5fVPmLpiU_k7quCHC3gVqc_qzuSaxMabcwNU9jkqHKFyBmy_kiP31K4B_luLOZWkN89AGq0Cdmd3pgYbZQUpmOE8eMus6DrgwqbHjgcZGUk40Oz/s16000/904.png" /></a></div><br /><p><br /></p><p>步驟 4. 複製 Token ( 關閉此視窗後即無法再次看見 Token,若忘記只能重新產生)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj531ZKoKrMhBCZi-T55CLWMmQoUl5aJnj08o7qjTIGqqLYEUbDogiXtdF7omQNpsCNkaA5oOT1uORlqTb9XcOnmbDeRJ_FnqVHs2xFjY9GufFa7L4BUnNQd0UqAoIR7loOCYb_59OvbPi82DUWCAWdjv3lItyap4VdyVpMgQo5Yk2BD8xCfTvMmAN0/s639/905.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="286" data-original-width="639" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj531ZKoKrMhBCZi-T55CLWMmQoUl5aJnj08o7qjTIGqqLYEUbDogiXtdF7omQNpsCNkaA5oOT1uORlqTb9XcOnmbDeRJ_FnqVHs2xFjY9GufFa7L4BUnNQd0UqAoIR7loOCYb_59OvbPi82DUWCAWdjv3lItyap4VdyVpMgQo5Yk2BD8xCfTvMmAN0/s16000/905.png" /></a></div><br /><p><br /></p><p>步驟 5. 複製 Azure Databricks 網址 (即為 Workspace URL)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD3NVkpJU5eCPv4GqLc34g8VB8otD88DxtiDq3Y1GzAeXpU4wrOxrGFKL42Yl-5To1qtm3tJqOaFL3XhlgZ5b7Zi7XWueFW5YER9XBQBp6k6QWbp9YKfPegG8tTvt73R1ZZ4mLRN4Mb75QS3myJuztf6O1Ul-cj4J6ZC8qJkum1seQmwtiti6uc_SC/s1072/906.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="207" data-original-width="1072" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD3NVkpJU5eCPv4GqLc34g8VB8otD88DxtiDq3Y1GzAeXpU4wrOxrGFKL42Yl-5To1qtm3tJqOaFL3XhlgZ5b7Zi7XWueFW5YER9XBQBp6k6QWbp9YKfPegG8tTvt73R1ZZ4mLRN4Mb75QS3myJuztf6O1Ul-cj4J6ZC8qJkum1seQmwtiti6uc_SC/s16000/906.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><h3 style="text-align: left;">透過Azure Pipeline部署notebooks至Azure Databricks</h3><p>步驟 1. 開啟 Azure DevOps Services,點選要設定的專案,左邊選單選擇 Pipeline,點選畫面中間 Create Pipeline (若已經存在舊有 pipeline,Create Pipeline 按鈕在右上角)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl2af3te16wEetw8FbS-HS0DqdadP70gSq_-SuJccGmJmyshecj8N2Fw7VhduEyjJFCqVqYWuG_HzT8at-N9na90t792zaAsfs8FyeX4dmhX5Wohi3h0Yyi0l0uxmR-k6L5ZjpLCmY2nBKsV05Q2AV2I6x4UcQu7uDoD-BjGnjzTWYrwfGqgWzzwBu/s2074/801.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1224" data-original-width="2074" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl2af3te16wEetw8FbS-HS0DqdadP70gSq_-SuJccGmJmyshecj8N2Fw7VhduEyjJFCqVqYWuG_HzT8at-N9na90t792zaAsfs8FyeX4dmhX5Wohi3h0Yyi0l0uxmR-k6L5ZjpLCmY2nBKsV05Q2AV2I6x4UcQu7uDoD-BjGnjzTWYrwfGqgWzzwBu/s16000/801.png" /></a></div><div><br /></div><div><br /></div>步驟 2. 點選下方 User the classic editor (若您對於 YAML熟悉,也可以使用YAML 撰寫 Build Scripts)<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0nrvLovA_polyFKlcgX7QaRSh2QB0uk3X7fbC7s8XjNh2ASeNi_1Rbq9iCxJViGWZRmvl3_7cyd00spdUr_C5wM768_cesBSoF-u1-CEFQv4ok78TqW_x018hJldzL3fgliWBq22N7la0ANIfbHUOpTV6Azv1IbeEEw8rQU0Slsbbuxju1011noqG/s1727/802.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1727" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0nrvLovA_polyFKlcgX7QaRSh2QB0uk3X7fbC7s8XjNh2ASeNi_1Rbq9iCxJViGWZRmvl3_7cyd00spdUr_C5wM768_cesBSoF-u1-CEFQv4ok78TqW_x018hJldzL3fgliWBq22N7la0ANIfbHUOpTV6Azv1IbeEEw8rQU0Slsbbuxju1011noqG/s16000/802.png" /></a></div><div><br /></div><div><br /></div>步驟 3. 選擇 Azure Repo Git,選擇 Project、Repo 與 Branch,點選 continue<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX8AlIxodzqSZJDc3L2TPXTFKOcz1YziA7JsKzId_DQ6P6R5ucNjTcOGZtXIHeLp4SlqrDWzt6Inl61PMz0AY0CWv57_kyn-Ff61ERUmoa8SJbhR5HYrmTb7wswZW661XapPDvyIkXzGmNvtftJ4qWqrWUUPMVu-dsGjgYuK9daN0iVf7j70_TfkvR/s2557/803.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1042" data-original-width="2557" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX8AlIxodzqSZJDc3L2TPXTFKOcz1YziA7JsKzId_DQ6P6R5ucNjTcOGZtXIHeLp4SlqrDWzt6Inl61PMz0AY0CWv57_kyn-Ff61ERUmoa8SJbhR5HYrmTb7wswZW661XapPDvyIkXzGmNvtftJ4qWqrWUUPMVu-dsGjgYuK9daN0iVf7j70_TfkvR/s16000/803.png" /></a></div><div><br /></div><div><br /></div>步驟 4. 點選上方 Empty Job<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOQnGRs3Irtod307_uSwEMMgXvB0niJjShXbLoDGc9Bybc7vNwky1iyin3EhZDHyd7Cg2VmapM7ybHvaqzQTl9WOBc5iAQLB3jgTqZYLqKL5ZT1HzQLQfdAces-H6gv2yAlmRPrW03YyHTcTDO3B8eXWq8hjH_fvY09ghJjNvWNfRpWJH3rofkFEq6/s2190/804.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="824" data-original-width="2190" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOQnGRs3Irtod307_uSwEMMgXvB0niJjShXbLoDGc9Bybc7vNwky1iyin3EhZDHyd7Cg2VmapM7ybHvaqzQTl9WOBc5iAQLB3jgTqZYLqKL5ZT1HzQLQfdAces-H6gv2yAlmRPrW03YyHTcTDO3B8eXWq8hjH_fvY09ghJjNvWNfRpWJH3rofkFEq6/s16000/804.png" /></a></div><div><br /></div><div><br /></div>步驟 5. 點選 Agent Job 1 旁邊的 + 按鈕,右上角搜尋 databricks,找到 DevOps for Azure Databricks<div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6K-JLJaCWIFXk979bTcbG5Nw809mzROny7BqBcCN1xdv4t_XgtMMo4m4ew8f7d2guXSypAme53WoAS8WAJDXlFfz-aMXbYlFkZnEpB5x4L-kgbHPy9oMLXRJf0k4WCaCS27U0spUfNRv30cUQlb2CdUJ-0yC-ZvRqMhmMIp0-cAAY915h2-vxUTum/s2709/805.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1214" data-original-width="2709" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6K-JLJaCWIFXk979bTcbG5Nw809mzROny7BqBcCN1xdv4t_XgtMMo4m4ew8f7d2guXSypAme53WoAS8WAJDXlFfz-aMXbYlFkZnEpB5x4L-kgbHPy9oMLXRJf0k4WCaCS27U0spUfNRv30cUQlb2CdUJ-0yC-ZvRqMhmMIp0-cAAY915h2-vxUTum/s16000/805.png" /></a></div><div><br /></div><div><br /></div>步驟 6. 在開啟網頁上點選 Get it Free<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR0cR7-0j_yPuT34OZxlREuqz36-6wU-cQH9TvCtEKYSCe6Pjqi5N64w6j67D61hRgSZrdSGMHnymyQpItFA3hwh2imcoc2S9ISqkwYpg8sDQswreVwEa3vcTGzwVkPSJ28ohBpu4Ymi4iiW7EAQLhHTINlCssTPUueCMfiywQBgT5WG3iST0s0AVe/s1856/806.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="915" data-original-width="1856" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR0cR7-0j_yPuT34OZxlREuqz36-6wU-cQH9TvCtEKYSCe6Pjqi5N64w6j67D61hRgSZrdSGMHnymyQpItFA3hwh2imcoc2S9ISqkwYpg8sDQswreVwEa3vcTGzwVkPSJ28ohBpu4Ymi4iiW7EAQLhHTINlCssTPUueCMfiywQBgT5WG3iST0s0AVe/s16000/806.png" /></a></div><div><br /></div><div><br /></div>步驟 7. 選擇組織並進行安裝 (若您權限不夠,請發送請求讓組織管理者同意)<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja5PkB3vu7fwnL2A4etXrvKIUgZv78NNap5KWghH0jjpbQAvNjnN7HIxn4VFMMFFP97JOLHlhmqASrnf_jCACjgl3bX2tGMXTWPQA_VsAoWpLbctn7Vzaxum73zwuzserfneM8uVoVmWx2a9YlUqp94UBDt4Dkw8nkKDfslxKYSbiNCZcZaoXEKsvf/s2325/807.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="818" data-original-width="2325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja5PkB3vu7fwnL2A4etXrvKIUgZv78NNap5KWghH0jjpbQAvNjnN7HIxn4VFMMFFP97JOLHlhmqASrnf_jCACjgl3bX2tGMXTWPQA_VsAoWpLbctn7Vzaxum73zwuzserfneM8uVoVmWx2a9YlUqp94UBDt4Dkw8nkKDfslxKYSbiNCZcZaoXEKsvf/s16000/807.png" /></a></div><div><br /></div><div><br /></div>步驟 8. 安裝完成後,點選 Refresh,可以看見如下圖五種 pipeline tasks<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjowN7bzQgGh-dZXkibzqlfx9ochmv0KB6Wyb0AOpybNTi7INgqpGOrzWqr8yyL-w7JbNwqRMtmmbz6bFoE96epMe6p_jIAW32czcTndBWR7-zbzTDuWSm3xUOQV9O6_FEOVWoL86kblck_J0kVXmdUWm1nf19oCrq-Ruytd_yGISiCqJwodFnDr40X/s1361/808.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="927" data-original-width="1361" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjowN7bzQgGh-dZXkibzqlfx9ochmv0KB6Wyb0AOpybNTi7INgqpGOrzWqr8yyL-w7JbNwqRMtmmbz6bFoE96epMe6p_jIAW32czcTndBWR7-zbzTDuWSm3xUOQV9O6_FEOVWoL86kblck_J0kVXmdUWm1nf19oCrq-Ruytd_yGISiCqJwodFnDr40X/s16000/808.png" /></a></div><div><br /></div><div><br /></div>步驟 9. 基本上,一定要選擇 configure Databricks CLI,其餘工作依據需求選擇。我們這邊呈現 Deploy notebooks to workspace<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAufabhEY08Xqurso3ez10JChol6eb3WLveG4LyqtJSvb6Fg4Avu5dOtyjssJiQ6Ca0p8mwK5A7A23x-ZZy40OZFtdxv461O0j-o_XfUXoK9G8VeTt-SC1rFjoEVPKghm9WtlVItvSslm3u_27CB0WwbJvvdSnUfiL1I71anIUlKmXzlWhhLN7POG6/s2720/809.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1231" data-original-width="2720" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAufabhEY08Xqurso3ez10JChol6eb3WLveG4LyqtJSvb6Fg4Avu5dOtyjssJiQ6Ca0p8mwK5A7A23x-ZZy40OZFtdxv461O0j-o_XfUXoK9G8VeTt-SC1rFjoEVPKghm9WtlVItvSslm3u_27CB0WwbJvvdSnUfiL1I71anIUlKmXzlWhhLN7POG6/s16000/809.png" /></a></div><div><br /></div><div><br /></div>步驟 10. 輸入事前準備的 Azure Databricks workspace 與 Access token<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4_-vxrSPa6YvygGPAy3P81vHN7SD3uSPOSDDgLrhncbFGXXj59fADdeQ0SCpDz1xGKbU3I5KUSyfIXJSMynsTxzSmEI_pP3whTUECrUDW_ruwfSLGI8On52fPpKdH4gfaaXMolEwZw__Uhz6D3lF2b__Ic53M9PzbLCSr1B7EQ-xP4c4IaitGf61l/s2692/810.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1089" data-original-width="2692" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4_-vxrSPa6YvygGPAy3P81vHN7SD3uSPOSDDgLrhncbFGXXj59fADdeQ0SCpDz1xGKbU3I5KUSyfIXJSMynsTxzSmEI_pP3whTUECrUDW_ruwfSLGI8On52fPpKdH4gfaaXMolEwZw__Uhz6D3lF2b__Ic53M9PzbLCSr1B7EQ-xP4c4IaitGf61l/s16000/810.png" /></a></div><div><br /></div><div><br /></div>步驟 11. 在 Deploy Notebook to workspace 工作內設定 Notebook folder 與 workspace folder (注意:兩個都是資料夾)<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpAvG1m-vSgtJwOCUV8z1awkgKAt1rSClKMCQ8IRZB9qowoBhWk4rFL5RAfMZDhc6Ej0S2QmBRgwckyavxv4TiB7eBQHKuHuTH5WFcnpn8m0PvIq6XMliTt9o0nXB7PAq8I84lvLyhXwb00BwpJ4i44mx9aOAhx4YdrFi8sbMf6E0q_Dgcc0KUV2Gi/s2706/811.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1265" data-original-width="2706" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpAvG1m-vSgtJwOCUV8z1awkgKAt1rSClKMCQ8IRZB9qowoBhWk4rFL5RAfMZDhc6Ej0S2QmBRgwckyavxv4TiB7eBQHKuHuTH5WFcnpn8m0PvIq6XMliTt9o0nXB7PAq8I84lvLyhXwb00BwpJ4i44mx9aOAhx4YdrFi8sbMf6E0q_Dgcc0KUV2Gi/s16000/811.png" /></a></div><div><br /></div><div><br /></div>步驟 12. 設定完成圖如下<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlijbfTh6Zs-K7zaccdzJ2XGDpnuKMr3LqV1Gocn2H8dPzRClVG7fCqyxOTJbOWk5WD6RaG3aczS4CWpolwo3-vj5xw2KB8JsgLvNSS2F1jldV8cQckyzK7u2ZYV7x6rIWiZ_59v5Zi8Wr16suaNEdLW9IccBV2221cAOfPMYN-nvj8QEN3ey7dSg7/s2723/812.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1274" data-original-width="2723" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlijbfTh6Zs-K7zaccdzJ2XGDpnuKMr3LqV1Gocn2H8dPzRClVG7fCqyxOTJbOWk5WD6RaG3aczS4CWpolwo3-vj5xw2KB8JsgLvNSS2F1jldV8cQckyzK7u2ZYV7x6rIWiZ_59v5Zi8Wr16suaNEdLW9IccBV2221cAOfPMYN-nvj8QEN3ey7dSg7/s16000/812.png" /></a></div><div><br /></div><div><br /></div>步驟 13. 點選上方 Save & queue<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjc6MYLoLzCX6luuUXOq7Q_mllDKLWMGMp2ggXETYkXqBVeUukn-y3OxCNXmwttboD9yGoXqWldgGbkW0AJp6JHq8fcWfluOI34ZhTwyBZpuz6VXxd6jkICf7I6Sh1RyaznA0vHfxb1YC7zt1IQ_fwszAF-vRT_76XVo-SjInSpvdxlT-f8dlwQbrR/s1288/813.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="942" data-original-width="1288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjc6MYLoLzCX6luuUXOq7Q_mllDKLWMGMp2ggXETYkXqBVeUukn-y3OxCNXmwttboD9yGoXqWldgGbkW0AJp6JHq8fcWfluOI34ZhTwyBZpuz6VXxd6jkICf7I6Sh1RyaznA0vHfxb1YC7zt1IQ_fwszAF-vRT_76XVo-SjInSpvdxlT-f8dlwQbrR/s16000/813.png" /></a></div><div><br /></div><div><br /></div>步驟 14. 選擇要執行的 Agent 與 Branch,點選 run<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1hJ-4BKr1G_zxidRP2IWKiS-Nok2OLDS8vVmLJSz3lLWgoVMcAyBwY9patk_J6qdsyA0IsKv63lWXGlPeCBNZfqprOAzZKeXaIXAb-tsNaOrnaIu5sVuycosUWRZdqAcC-7W8hjIqkQQbPpHoqcPxnoIUa5SSAk_cpdfoYQz2EiHgGDI21UsN0Sm4/s1817/814.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1817" data-original-width="960" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1hJ-4BKr1G_zxidRP2IWKiS-Nok2OLDS8vVmLJSz3lLWgoVMcAyBwY9patk_J6qdsyA0IsKv63lWXGlPeCBNZfqprOAzZKeXaIXAb-tsNaOrnaIu5sVuycosUWRZdqAcC-7W8hjIqkQQbPpHoqcPxnoIUa5SSAk_cpdfoYQz2EiHgGDI21UsN0Sm4/s16000/814.png" /></a></div><div><br /></div><div><br /></div>等待工作執行完成<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD5Tf31pavzDLMCHOAAmMfy3QvgcqNkr6QcfUMLprCQTkVOMlbG0HI2zElT7blc-ggiA0hQxw2EXdGvLqqS4Wi7DFzyKJAiuNCSFqa4XUecnGNW1efAnsYlVT3IuHKA9mls-0EeEaFgL7zsNOaWFvWPragotWjzdTEvFsaLKxlr0Jmv0Jly863FarG/s1745/815.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="955" data-original-width="1745" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD5Tf31pavzDLMCHOAAmMfy3QvgcqNkr6QcfUMLprCQTkVOMlbG0HI2zElT7blc-ggiA0hQxw2EXdGvLqqS4Wi7DFzyKJAiuNCSFqa4XUecnGNW1efAnsYlVT3IuHKA9mls-0EeEaFgL7zsNOaWFvWPragotWjzdTEvFsaLKxlr0Jmv0Jly863FarG/s16000/815.png" /></a></div><div><br /></div><div><br /></div>步驟 15. 執行完成後,即可在 Databricks 上看見 notebooks<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxK2nOYC68GAFX_SXx4WzHvIaAZ4eQSbVNDvfppbLI3KSH3l3Mdhtpqwi1TvHLRFcze0N9ahTtsrVJfR-HW5wxonJ4-duFpOsZSFzXBaDDbH14ogr9vm82cUjG4qieVI5uAXhOmrclo2RHtVbA0G_2HfgchY1RuDoaMbah8uLlHNnNWbb9EX5ilsHo/s1470/816.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="762" data-original-width="1470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxK2nOYC68GAFX_SXx4WzHvIaAZ4eQSbVNDvfppbLI3KSH3l3Mdhtpqwi1TvHLRFcze0N9ahTtsrVJfR-HW5wxonJ4-duFpOsZSFzXBaDDbH14ogr9vm82cUjG4qieVI5uAXhOmrclo2RHtVbA0G_2HfgchY1RuDoaMbah8uLlHNnNWbb9EX5ilsHo/s16000/816.png" /></a></div><div><br /></div><div><br /></div><div><br /></div>補充:若需要事後觸發該 Notebooks 進行資料處理或佈署,可以加入執行工作,輸入要執行的 Notebook path 與 Cluster ID<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPR3rpKJYtVpBGHw_5cXr39oc-PsDAlPnToDXUi40jkJ9SDTXgkGvqyqFbaQs9FdcgaeIb73q02QGlh9X4yP7JpTjFPzwFp-qtnjhIPW4HBQzhI0y-pL-s4gF3Wz11SlbO5FIF06z9gG2Ak1SRHKJjZyF64fQhACjZMOM4lb5m2ilBi7BPn7eU9X-8/s2713/817.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1359" data-original-width="2713" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPR3rpKJYtVpBGHw_5cXr39oc-PsDAlPnToDXUi40jkJ9SDTXgkGvqyqFbaQs9FdcgaeIb73q02QGlh9X4yP7JpTjFPzwFp-qtnjhIPW4HBQzhI0y-pL-s4gF3Wz11SlbO5FIF06z9gG2Ak1SRHKJjZyF64fQhACjZMOM4lb5m2ilBi7BPn7eU9X-8/s16000/817.png" /></a></div><br /><p><br /></p><p><br /></p></div>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-66124801279850607482022-10-10T20:22:00.088+08:002022-10-11T16:50:48.348+08:00Azure App Service 如何取得 Dump 進行並進行分析<p>收集 Memory Dump 進行分析是了解應用程式發生什麼事情的進階方法。有別於過去在地端,若部署至 Azure App Services 時,該怎麼辦呢? 本篇文章將簡單說明 Azure App Service 如何取得 Dump 進行分析,若有錯誤或任何建議,請各位前輩不吝提出。</p><p><br /></p><p></p><blockquote>App Service 也提供了<b>分析功能</b>。若你想要下載自行分析,可以參考 <a href="https://dog0416.blogspot.com/2019/08/aspnet-core-debugdiag-analysis-memory.html" target="_blank">透過 DebugDiag analysis 分析 Memory Dump</a></blockquote><p></p><p><br /></p><p><a href="https://3.bp.blogspot.com/-kdR5rvMzP3s/W0Gz0e7htDI/AAAAAAAAgfA/A0PiScl-MawNn9-BgnN9-Z6r9NTO7tHgQCLcBGAs/s1600/%25E7%25B0%25A1%25E5%25A0%25B11.jpg" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://3.bp.blogspot.com/-kdR5rvMzP3s/W0Gz0e7htDI/AAAAAAAAgfA/A0PiScl-MawNn9-BgnN9-Z6r9NTO7tHgQCLcBGAs/s640/%25E7%25B0%25A1%25E5%25A0%25B11.jpg" width="640" /></a></p><p><br /></p><span><a name='more'></a></span><p><br /></p><p><br /></p><p>步驟 1. 開啟 Azure App Service,點選左邊 診斷並解決問題 (Diagnose and Solve Problems),點選下方 Diagnostics Tools。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNw4Tq_DD3z0OxJtaHZ4787uVekchSCvilzEt41lKFLGzVDlSJr2RIbiHLuHgRitN3v-7wGdIE3TPLed02pxIY17PY81_SUolsdPKLtnyrCOq5NBwMThuiLWVBAV61q3jCfcDzhDZaNsPyS72oxHsRyC81bToEYACzYJ8gqyQuesxtjRQs1bLnwgNk/s1416/001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="879" data-original-width="1416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNw4Tq_DD3z0OxJtaHZ4787uVekchSCvilzEt41lKFLGzVDlSJr2RIbiHLuHgRitN3v-7wGdIE3TPLed02pxIY17PY81_SUolsdPKLtnyrCOq5NBwMThuiLWVBAV61q3jCfcDzhDZaNsPyS72oxHsRyC81bToEYACzYJ8gqyQuesxtjRQs1bLnwgNk/s16000/001.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 2. 點選左邊選單 Collect Memory Dump</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhacVxTK24-y3ELh7peL_qOtC8TxLHuUxefWGfqynNFmqs4M5odRAi_vkPmigpJxM3p_w3wn2X5z8MfmKDd0SQMo-WueL1g-AzTPGIVCz--co3kmTHDwZSzpnND4vyTLmBZvgtwWJvfZ6VtXdwPyg4SEhVPeQYw7nsmYKSsv_obC56JnJu017mDFiwR/s652/002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="652" data-original-width="617" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhacVxTK24-y3ELh7peL_qOtC8TxLHuUxefWGfqynNFmqs4M5odRAi_vkPmigpJxM3p_w3wn2X5z8MfmKDd0SQMo-WueL1g-AzTPGIVCz--co3kmTHDwZSzpnND4vyTLmBZvgtwWJvfZ6VtXdwPyg4SEhVPeQYw7nsmYKSsv_obC56JnJu017mDFiwR/s16000/002.png" /></a></div><br /><p><br /></p><p>步驟 3. 接下來我們要選擇儲存體。點選畫面上 Select 按鈕</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0NirlPRqKckgZoBzBL5oxkYXoJB5hgu0mnxVWKTExWPz09MweaI-1vreWo3cG7gOJIYF4WYh-WAYJd0jFDOcaj-6aP5HFwnJ1Bg66hLhCAWZvsvwcaFk__hFptbpCXNe62E_F_xlj7nHQYJMXu3ITk80pL9OeBFa1DKkwHMXskx-nmGxW4d4Nd3kU/s762/003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="403" data-original-width="762" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0NirlPRqKckgZoBzBL5oxkYXoJB5hgu0mnxVWKTExWPz09MweaI-1vreWo3cG7gOJIYF4WYh-WAYJd0jFDOcaj-6aP5HFwnJ1Bg66hLhCAWZvsvwcaFk__hFptbpCXNe62E_F_xlj7nHQYJMXu3ITk80pL9OeBFa1DKkwHMXskx-nmGxW4d4Nd3kU/s16000/003.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 4. 選擇 Storage Account (若尚未建立儲存體,可以點選 Create new)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig--Gtt95oIxMFAqmNSsa60rXRoDOBBcsKrA0bJj0nEUcPKNIu3w3NqVurLAxC3CQ-xC6eutUj3YzC3VdzgMT3RS7bd9yp8ROBvO-ZdhHccR3p5jsk12WfcmNEb95EtCHYCNuOt_ZCuvn3Fy8vReBvHsaskSRV59EfEqw4FnT3mECybl7GWol83jF2/s636/004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="353" data-original-width="636" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig--Gtt95oIxMFAqmNSsa60rXRoDOBBcsKrA0bJj0nEUcPKNIu3w3NqVurLAxC3CQ-xC6eutUj3YzC3VdzgMT3RS7bd9yp8ROBvO-ZdhHccR3p5jsk12WfcmNEb95EtCHYCNuOt_ZCuvn3Fy8vReBvHsaskSRV59EfEqw4FnT3mECybl7GWol83jF2/s16000/004.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 4. 您可以選擇<b>收集與分析資料</b>或<b>只收集資料</b>。勾選 Instance,點選 Collect MemoryDump 按鈕開始收集 Dump。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUePqF_rmAg96bhEwOG_4RzYI3k9PhxNubjrJVl5Oc6Xs0_5F8mVs8fjKa9yFp7ibatXUd57rXfWHGY6SFqBTrwmaNpS7tgjnR8uv8gzz9QyyJo_6gLMAzieJQfH-Vcwcc25xhLyl4mxwotv-wtzRMgv7Q9tweZoHACl84dctWZBp-RqvntHitXmwY/s700/005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="192" data-original-width="700" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUePqF_rmAg96bhEwOG_4RzYI3k9PhxNubjrJVl5Oc6Xs0_5F8mVs8fjKa9yFp7ibatXUd57rXfWHGY6SFqBTrwmaNpS7tgjnR8uv8gzz9QyyJo_6gLMAzieJQfH-Vcwcc25xhLyl4mxwotv-wtzRMgv7Q9tweZoHACl84dctWZBp-RqvntHitXmwY/s16000/005.png" /></a></div><div><br /></div><div><br /></div><div><br /></div>步驟 5. 等待收集分析 (若 Memory 越大,時間越久)。完成後即可下載或檢視分析報告<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbRI7b5-tPLpOQAZ6DP1kqNNgbscPewNghCaCRw18ZAD0yjruOyZq1pdJrMz2_ts3CYl80Tx_NF4C_kdZtf8AeAwtsvs54nMtT8Exs9YmF9rLoThofPWnMFyMEL3aRlAjdyJ_Cb4Ogf-Vn0YaRXTnvjmCgx4cxMUNhqfxC4Ai7M8hv3od6JaKzD1wy/s615/006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="377" data-original-width="615" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbRI7b5-tPLpOQAZ6DP1kqNNgbscPewNghCaCRw18ZAD0yjruOyZq1pdJrMz2_ts3CYl80Tx_NF4C_kdZtf8AeAwtsvs54nMtT8Exs9YmF9rLoThofPWnMFyMEL3aRlAjdyJ_Cb4Ogf-Vn0YaRXTnvjmCgx4cxMUNhqfxC4Ai7M8hv3od6JaKzD1wy/s16000/006.png" /></a></div><br /><div><br /><p>步驟 6. 不會分析 Dump 也沒關係,點擊分析報告,即可看見相關問題,是不是很方便?</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSRD0JXvk-mBEPoCrvFu1z_g8VYek9KsLCXB8cXQRohpScso_u7ttdq0PTVzNJd8qB3IjnZU_Eirs5oKjievCd_CpnsyVSu4-SYOaWmUV_2Tnjh0NlQlhOu-OoAS_CRYfzDve7xImz81hTETBH6iZpI2n1ZBg6Ncp4SamjL2CApgc7o_8f4QRBJXPP/s938/007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="750" data-original-width="938" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSRD0JXvk-mBEPoCrvFu1z_g8VYek9KsLCXB8cXQRohpScso_u7ttdq0PTVzNJd8qB3IjnZU_Eirs5oKjievCd_CpnsyVSu4-SYOaWmUV_2Tnjh0NlQlhOu-OoAS_CRYfzDve7xImz81hTETBH6iZpI2n1ZBg6Ncp4SamjL2CApgc7o_8f4QRBJXPP/s16000/007.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div></div>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-61087346908560032602022-08-09T13:29:00.004+08:002022-08-09T13:32:35.138+08:00[MacOS] 如何永遠允許 Codesign 存取鑰匙圈 (Always allow Codesign access keychain )<p>在開發 iOS 應用程式時,使用 Xcode 編譯時需要輸入使用者帳號與密碼來允許 Codesign 存取鑰匙圈 (而且不止一次),調了不同的設定可能又需要重複進行,相當惱人。本篇文章簡單說明如何永遠允許 Codesign 存取 Keychain。本篇文章若有錯誤或任何建議,請各位前輩不吝提出,謝謝。</p><p><br /></p><p><img border="0" data-original-height="1216" data-original-width="1995" height="390" src="https://1.bp.blogspot.com/-338EtiZIG30/YKN3dVXYnlI/AAAAAAAArnE/pPjtlfvzZTsQBG9XW_ELOuGzCzufhiKjQCLcBGAsYHQ/w640-h390/pixta_56650001_M_1.jpg" style="color: #0000ee; text-align: center;" width="640" /></p><p><br /></p><span><a name='more'></a></span><p><br /></p><h2 style="text-align: left;">操作步驟</h2><p>步驟 1. 開啟鑰匙圈 (Keychain),找到您的憑證。展開它,點擊金鑰(Key)</p><p>步驟 2. 選擇允許所有的應用程式存取,點選儲存</p><p>步驟 3. 輸入帳號密碼進行確認,完成 !</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj15i-hniYWGnlzzYWx9cduvO8ijMmpmq5_R-9ze5ZPlVmkfUGO7p54lhYIR0TGIUmDyX1JjGo07av_E2a_IsJXmdmoNTTqpGZvAbNeTKEUocmjJbtKZ2g3IivoyEuDKLxeHT5_AMOtkOnw6k47HpgPp-0gasiqgSFNtTjR4Yz14j4cyr-EKVHVx4K/s1781/003.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1418" data-original-width="1781" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjj15i-hniYWGnlzzYWx9cduvO8ijMmpmq5_R-9ze5ZPlVmkfUGO7p54lhYIR0TGIUmDyX1JjGo07av_E2a_IsJXmdmoNTTqpGZvAbNeTKEUocmjJbtKZ2g3IivoyEuDKLxeHT5_AMOtkOnw6k47HpgPp-0gasiqgSFNtTjR4Yz14j4cyr-EKVHVx4K/s16000/003.png" /></a></div><br /><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-44252542881548525442022-08-08T15:27:00.002+08:002022-08-09T11:52:50.198+08:00[iOS] xcode-select active developer directory 錯誤問題<h2 style="text-align: left;">問題描述</h2><p>在執行 Xcode Build 時,得到錯誤訊息如下:</p><p>xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjgKlDq7vBoWUf6wNzcmDfhxjGBgPeszQppwxJ7hTEDntUAHp4VJwu1FSwruZCCOv3AmRopLw7kh5hTZr-ZSvuXlWXt9NZjSB9-0ZzZN9cgAMeqH6IBKphinoU3SS71MjplWBXiTK7OWT1lB7qf2pZeVhEC16onT8m42KD0IhImTud2RqfktgtDMZC/s1356/%E6%88%AA%E5%9C%96%202022-08-04%20%E4%B8%8B%E5%8D%881.54.36.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="132" data-original-width="1356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjgKlDq7vBoWUf6wNzcmDfhxjGBgPeszQppwxJ7hTEDntUAHp4VJwu1FSwruZCCOv3AmRopLw7kh5hTZr-ZSvuXlWXt9NZjSB9-0ZzZN9cgAMeqH6IBKphinoU3SS71MjplWBXiTK7OWT1lB7qf2pZeVhEC16onT8m42KD0IhImTud2RqfktgtDMZC/s16000/%E6%88%AA%E5%9C%96%202022-08-04%20%E4%B8%8B%E5%8D%881.54.36.png" /></a></div><p><br /></p><p>主要在於只安裝了 Xcode Command line 工具,並沒有安裝 Xcode App,導致無法建置。</p><p><br /></p><span><a name='more'></a></span><p><br /></p><h2 style="text-align: left;">解決方法</h2><p>主要為確認安裝 Xcode app 後,使用指令設定 Xcode 路徑,下列為設定步驟:</p><p>步驟 1. 確認已經安裝 Xcode,並且可以在啟動台內看到 Xcode app</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhutymtXPLWrFI-fQ3mPaiHP_KHoUKMguwfmD3Xj_UZ3BY-7FXGX4pjO7HQyHyTgmGQwvbbQlgBZkfQjRPONXYG5t9pmd1185J2pNvUzffqXgNpmmNmZGtAHLTSetKvLfAoWtsyv2rGbovCZadu1dIQ76Aia4tEb2_GtZDUGvL24jda2zaGynTxB9H7/s1682/%E6%88%AA%E5%9C%96%202022-08-09%20%E4%B8%8A%E5%8D%889.46.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="955" data-original-width="1682" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhutymtXPLWrFI-fQ3mPaiHP_KHoUKMguwfmD3Xj_UZ3BY-7FXGX4pjO7HQyHyTgmGQwvbbQlgBZkfQjRPONXYG5t9pmd1185J2pNvUzffqXgNpmmNmZGtAHLTSetKvLfAoWtsyv2rGbovCZadu1dIQ76Aia4tEb2_GtZDUGvL24jda2zaGynTxB9H7/s16000/%E6%88%AA%E5%9C%96%202022-08-09%20%E4%B8%8A%E5%8D%889.46.16.png" /></a></div><br /><p><br /></p><p>步驟 2. 開啟終端機或 Finder,確認 Xcode app 安裝在 /Application 目錄下 (不是在 /Users/{user}/Applications 下)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhjoqIy-ImxGwg1SRY9uO5uYaqZ3mlCxRMAj1AubovnPn5H_TeO6mjEFExH7KyITqnnTNKBH5wYzbeX0YmQPY4n-qfr_TGtX9VxmgCMq530b4SOtd_IwCVz0mrfNg9R5lZ3QGwzTZR-Gongm5j2WK75RJzkSIcTW8IZg9C8ekNrIUhwIJpgVhRHv2w/s2143/001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="542" data-original-width="2143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhjoqIy-ImxGwg1SRY9uO5uYaqZ3mlCxRMAj1AubovnPn5H_TeO6mjEFExH7KyITqnnTNKBH5wYzbeX0YmQPY4n-qfr_TGtX9VxmgCMq530b4SOtd_IwCVz0mrfNg9R5lZ3QGwzTZR-Gongm5j2WK75RJzkSIcTW8IZg9C8ekNrIUhwIJpgVhRHv2w/s16000/001.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟3. 透過下列指令重新設定 Xcode app developer directory </p><p>Xcode 版本</p><p>sudo xcode-select -s /Applications/Xcode.app/Contents/Developer</p><p>Xcode-beta 版本</p><p>sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd6ZRWoX7_70ogZJePfuUzj3n2_eg_IvtIvA9bwDkhqpP2zJ5RCwbqSxaVP2E1GUEQvu2he7kOZVeDdP9f5Dr8ptA6iI6DxwDpsMgtpc3YahGhHMwQozSr2fN62GcIMXbyJWGvxQPixQ1Qv2HAXKdbKakCD7MZ0Z5hXtrIwvT1pp-6Yl2N1NjXSnNf/s2088/002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="355" data-original-width="2088" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd6ZRWoX7_70ogZJePfuUzj3n2_eg_IvtIvA9bwDkhqpP2zJ5RCwbqSxaVP2E1GUEQvu2he7kOZVeDdP9f5Dr8ptA6iI6DxwDpsMgtpc3YahGhHMwQozSr2fN62GcIMXbyJWGvxQPixQ1Qv2HAXKdbKakCD7MZ0Z5hXtrIwvT1pp-6Yl2N1NjXSnNf/s16000/002.png" /></a></div><br /><p></p><p><br /></p><p><br /></p><h2 style="text-align: left;">參考資料</h2><p><a href="https://stackoverflow.com/questions/17980759/xcode-select-active-developer-directory-error/17980786#17980786" target="_blank">xcode-select active developer directory error - stack overflow</a></p><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-30577714126035950082022-07-19T17:05:00.003+08:002022-07-19T18:06:44.323+08:00[Java] Maven 如何使用 Local Repository (無網路狀態本地端儲存庫)<p>許多客戶在做 Java 持續整合時無法使用外部網路,即代表不能從外部 Maven Repository 下載套件並進行編譯,必須從開發環境下載需要的套件,並放置在<b>內部的套件管理伺服器</b>或<b>代理程式 (Agent or Runner) 內某個資料夾</b>作為 Local Repository。</p><p>因為工作關係,最近遇到許多此類問題,這邊簡單紀錄 Maven 透過使用 settings.xml 方式,讓原先從 預設的 <b>使用者資料夾/.m2/repository</b> 資料夾,改為<b>指定本地資料夾</b>作為 Repository。本篇文章若有錯誤或任何建議,請各位前輩不吝提出。</p><p><br /></p><p><a href="https://1.bp.blogspot.com/-338EtiZIG30/YKN3dVXYnlI/AAAAAAAArnE/pPjtlfvzZTsQBG9XW_ELOuGzCzufhiKjQCLcBGAsYHQ/s1995/pixta_56650001_M_1.jpg" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="1216" data-original-width="1995" height="390" src="https://1.bp.blogspot.com/-338EtiZIG30/YKN3dVXYnlI/AAAAAAAArnE/pPjtlfvzZTsQBG9XW_ELOuGzCzufhiKjQCLcBGAsYHQ/w640-h390/pixta_56650001_M_1.jpg" width="640" /></a></p><p><br /></p><span><br /><a name='more'></a></span><p><br /></p><p><br /></p><p>首先我們先在內部建置環境建立 Local Repository,在本文範例中我們在 Maven 資料夾下建立一個 repository 資料夾,放置 Maven 建置需要的套件。 </p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU9cTT-TuNVMgsmhkgEiNJVgb_G32V7WODqtJE7aD6mcsHZtuorAFPaU_0GcwASowEXZOqkBw8PGE4v3PaJ7Utuzxy6gC4KhhGfA2XoduTg9qP4wAb17NfOYpPdb89TB3k5LERcd6Kr70hJA5kTpye091UA3Uv0Z9udm_2VVPsGybQlv67TtQS2xQ4/s801/blogger003.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="447" data-original-width="801" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU9cTT-TuNVMgsmhkgEiNJVgb_G32V7WODqtJE7aD6mcsHZtuorAFPaU_0GcwASowEXZOqkBw8PGE4v3PaJ7Utuzxy6gC4KhhGfA2XoduTg9qP4wAb17NfOYpPdb89TB3k5LERcd6Kr70hJA5kTpye091UA3Uv0Z9udm_2VVPsGybQlv67TtQS2xQ4/s16000/blogger003.png" /></a></p><p><br /></p><p><br /></p><p><br /></p><p>我們在 repository 資料夾加入 settings.xml,在內部宣告 local repository 位置,內容如下:</p><script src="https://gist.github.com/matsurigoto/6ef16f9c146b7a86b1cfe90976f2e95e.js"></script><p><br /></p><p>然後回到開發環境(可以從外部下載套件的開發環境) 編譯專案,讓套件下載至 <b>使用者資料夾/.m2/repository</b> 資料夾。開啟命令提示字元或命令列,切換目錄到專案資料夾,指令為</p><p></p><div class="separator" style="clear: both; text-align: center;"><br /></div>mvn -f pom.xml pakcage<p></p><p><br /></p><p><br /></p><p>完成後,您可以到 <b>使用者資料夾/.m2/repository</b> 資料夾,可以看見套件已經完整下載</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAuyFAN9rtKs8t52-_GDoK9SRi1UP4H7WDYJPL2ZY138A1MIEc0hoy2GG8_qSWWifZYebUVSdn_BLxGoCbV8S5fQJSWpqdTBuH0jJ6CohZdHLyplqhpbUp0y-qTsgBo7G7FrzWJ2EKRQNR6DHyRdRQHEOdabuIEz2YUeJvAwKQufOlfYXllEqa6zce/s942/blogger002.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="442" data-original-width="942" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAuyFAN9rtKs8t52-_GDoK9SRi1UP4H7WDYJPL2ZY138A1MIEc0hoy2GG8_qSWWifZYebUVSdn_BLxGoCbV8S5fQJSWpqdTBuH0jJ6CohZdHLyplqhpbUp0y-qTsgBo7G7FrzWJ2EKRQNR6DHyRdRQHEOdabuIEz2YUeJvAwKQufOlfYXllEqa6zce/s16000/blogger002.png" /></a></div><p style="text-align: right;"></p><p><br /></p><p><br /></p><p>在 repository 資料夾下搜尋 _remote.repositories。這個檔案會在每個套件資料夾下,若存在,執行 mvn 指令時會連線到外部下載套件。<b>刪除所有 _remote.repositories 檔案</b>。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJNWvlnhzBdEKWsfxFuiHpfObXWCafkNydvrS65pS02bkZLV1TMRLKl8Hp4Go2MdJVehdIlfr7m_pa705GJY9FXKaH-yCV7M3g3t4IEIgtDJWbTfAdZsITuA2q-egZAZhO-yc-akRCoAUFVOq2yBeSdnkmJKSiFyuotZ8j99TQ-7aK1-yKo1olM9HW/s1292/blogger006.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="774" data-original-width="1292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJNWvlnhzBdEKWsfxFuiHpfObXWCafkNydvrS65pS02bkZLV1TMRLKl8Hp4Go2MdJVehdIlfr7m_pa705GJY9FXKaH-yCV7M3g3t4IEIgtDJWbTfAdZsITuA2q-egZAZhO-yc-akRCoAUFVOq2yBeSdnkmJKSiFyuotZ8j99TQ-7aK1-yKo1olM9HW/s16000/blogger006.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p>將 <b>使用者資料夾/.m2/repository</b> 資料夾內容複製到內部建置環境的 Local Repository 資料夾下。切換到專案資料夾下</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJY5PGh3kEOiN5XDGwPSO13SsGMCrBNA1naYO42yOg8CNHdbmCUqaD_GiziXh8B1clBgJL8DEK1Y5QZ2d5tlHm1-mE1rNLTJ4hlvhUPsrBwErfxF-eAHXzrIDeUEC7B4-JYgYdzY8FV1CToGy-vtZ-1c6T-3lviXgZLhk97sVeVm9m5cUuhPd-jr0t/s1884/blogger001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1222" data-original-width="1884" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJY5PGh3kEOiN5XDGwPSO13SsGMCrBNA1naYO42yOg8CNHdbmCUqaD_GiziXh8B1clBgJL8DEK1Y5QZ2d5tlHm1-mE1rNLTJ4hlvhUPsrBwErfxF-eAHXzrIDeUEC7B4-JYgYdzY8FV1CToGy-vtZ-1c6T-3lviXgZLhk97sVeVm9m5cUuhPd-jr0t/s16000/blogger001.png" /></a></div><br /><p><br /></p><p><br /></p><p>輸入下列指令,即可在沒有網路的情況下,使用 Local Repository 進行Maven Build (因為我的範例專案有跑測試,所以執行有測試步驟)</p><p>mvn -f pom.xml -s c:\mvn\bin\repository\settings.xml -o pakcage</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijxCfGk2pkHiERLU0J_nAl-oWf3ch1kBkAbmmjSIEIgaIzC8anjCX3yHt5CNLP3gFlTldcll9_PT6U5ZRCR4wi5_daPm9R-Yft7D-hFC0ySThIbWn-XfdxE3pB2Ahwaj7gi23x5fpIA0pAgwm0j0gT7bZOg_cwHzaj4ZXkFxqv3QuGkLk24wYIMIWd/s1313/blogger007.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="679" data-original-width="1313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijxCfGk2pkHiERLU0J_nAl-oWf3ch1kBkAbmmjSIEIgaIzC8anjCX3yHt5CNLP3gFlTldcll9_PT6U5ZRCR4wi5_daPm9R-Yft7D-hFC0ySThIbWn-XfdxE3pB2Ahwaj7gi23x5fpIA0pAgwm0j0gT7bZOg_cwHzaj4ZXkFxqv3QuGkLk24wYIMIWd/s16000/blogger007.png" /></a></div><br /><p><br /></p><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-60899442067963440122022-06-24T16:47:00.002+08:002022-06-24T16:48:34.347+08:00[Java] 如何在 Ant Build 執行過程中印出 JUnit 詳細訊息<p>最近因為工作關係,經常接觸 Java 專案。今天簡單紀錄一下使用 Ant 執行 JUnit 過程中,如何印出 JUnit 詳細執行結果,方便開發人員找出錯誤根本原因。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJjswEfrhRG5n1GzISFh0SzU-d46y5FMmuDdivamuGpn1PMxgfSu9OYp3ZP6NZYYW9uYD8iyYTrtMRxzyicHQaIheKDP4fR7k7biGsSxF_kvbMtOVNt4q2eoER6d8QRYVVhrrVRQ6CNOkOKqlKcmA-QG5hwlD2HY5uwF-u6TUDePpuT95qg8y3_bUH/s640/pixta_48147273_S.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="452" data-original-width="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJjswEfrhRG5n1GzISFh0SzU-d46y5FMmuDdivamuGpn1PMxgfSu9OYp3ZP6NZYYW9uYD8iyYTrtMRxzyicHQaIheKDP4fR7k7biGsSxF_kvbMtOVNt4q2eoER6d8QRYVVhrrVRQ6CNOkOKqlKcmA-QG5hwlD2HY5uwF-u6TUDePpuT95qg8y3_bUH/s16000/pixta_48147273_S.jpg" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><p><br /></p><span></span><span><a name='more'></a></span><p><br /></p><p>一般在 Target 內撰寫 Ant JUnit 會在 junit 標籤上 printsummary="yes" 與 showoutput="true" 屬性 ,輸出相關內容至銀幕上,如下列語法:</p><p></p><blockquote><p><junit printsummary="yes" showoutput="true" ></p><p>.....</p><p></junit></p></blockquote><p></p><p><br /></p><p><br /></p><p><br /></p><p>但在檢視結果時,只輸出了測試統計 (通過、失敗、錯誤數量),當錯誤發生時,沒有詳細列印出錯誤訊息,開發人員很難知道發生什麼錯誤。</p><p></p><blockquote><p>unittest:</p><p> [junit] Running xxxx</p><p> [junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 sec</p><p> [junit] Test xxxxx FAILED</p><p></p></blockquote><p><br /></p><p><br /></p><p>這個時候您可以使用 formatter 標籤輸出詳細資訊,其中:</p><p></p><ul style="text-align: left;"><li>type : 可以為 plain (純文字) 或 xml 格式,後者可以用於 Azure DevOps 發佈測試結果</li><li>usefile : 預設為 true (輸出至檔案)。設定為 false 則輸出至銀幕上</li></ul><p></p><p>透過上列設定,發生錯誤時也會將 Exception 詳細印出,讓開發人員快速解決問題</p><script src="https://gist.github.com/matsurigoto/39021ea2e75aab8f87696fbaad4c3cc8.js"></script><p><br /></p><p><br /></p><p><br /></p><p><br /></p><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-73757104855683890012022-06-07T16:19:00.003+08:002022-06-07T16:19:12.528+08:00Linux - 透過 nc/telnet 指令快速查詢 Port 是否有開通 <p>因為工作關係,最近經常在 Linux 進行相關作業。理所當然,也遇到要測試 Port 有沒有開的問題。過去在 Windows 環境,可以安裝 Telnet Client 與 Telnet 指令直接進行測試,Linux 也不例外,但有其他更方便的方式可以檢查 Port 是否有通。 本篇文章將簡單提供指令,讓有需要的朋友可以快速檢查 Port 開通狀態</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNKVEYNs5v_1uKp9ErTnSPfhedyVxPvGSUsnPU7GKy0aN8YKLZqCQY6b4Cfi45UouZg05_hXjvo64x7vzsK0DjXxvpUaTG4HegYYNDPdhpECS34j1MQgYFTFObZeJS9RBN-9tdOeBQhfzK4mU87FygemLj8OV-z5e_LOsqJR_BiJ1lYJA2tYKF0j4k/s2000/pixta_32434348_M.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1333" data-original-width="2000" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNKVEYNs5v_1uKp9ErTnSPfhedyVxPvGSUsnPU7GKy0aN8YKLZqCQY6b4Cfi45UouZg05_hXjvo64x7vzsK0DjXxvpUaTG4HegYYNDPdhpECS34j1MQgYFTFObZeJS9RBN-9tdOeBQhfzK4mU87FygemLj8OV-z5e_LOsqJR_BiJ1lYJA2tYKF0j4k/s16000/pixta_32434348_M.jpg" /></a></div><br /><p><br /></p><span><a name='more'></a></span><p><br /></p><h2 style="text-align: left;">Telnet 指令</h2><p>指令格式</p><p>telnet <HOST> <PORT></p><p><br /></p><p>範例</p><p>telnet 127.0.0.1 80</p><p><br /></p><p><br /></p><p><br /></p><h2 style="text-align: left;">nc 指令</h2><p>指令格式</p><p>nc -z <HOST> <PORT>; echo $?</p><p><br /></p><p>範例</p><p>nc -z <HOST> <PORT>; echo $?</p><p><br /></p><p><br /></p><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-15730387519468144462022-05-29T22:58:00.007+08:002022-06-02T12:51:31.214+08:00如何啟用 Azure 網路資源群組(NSG) 流量紀錄<p> 因為工作的關係,遇到需要監控 NSG 流量紀錄 (NSG Flow Log) 情境,隨即順手實作整個設定流程並記錄下來,提供給有興趣的朋友參考。流量記錄紀載著雲端環境中所有網路活動, 無論您是想要進行資源優化、偵測入侵、監視輸送量、驗證合規性、偵測入侵...等, 流量紀錄皆可以做為參考依據。本篇文章若有錯誤或任何建議,請各位先進不吝提出。</p><p><br /></p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsx4jxW3j7p_cFoWXeETd2axDMy2ewUfYoMNlpGp8JptkN1SihRI6fMsLL7srl6qQBg1cImN06i1lNiWkawSIeC2nZIeO7Za3CvIV2l62sQZlIU0ZLe-1GdH4CdcWEa98ubEnBEqmBDXnwcqDFqS4bN6Fo15g3rcShDTt1FfxwiqvDQ975hf5ImEDZ/s2169/301.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="1448" data-original-width="2169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsx4jxW3j7p_cFoWXeETd2axDMy2ewUfYoMNlpGp8JptkN1SihRI6fMsLL7srl6qQBg1cImN06i1lNiWkawSIeC2nZIeO7Za3CvIV2l62sQZlIU0ZLe-1GdH4CdcWEa98ubEnBEqmBDXnwcqDFqS4bN6Fo15g3rcShDTt1FfxwiqvDQ975hf5ImEDZ/s16000/301.png" /></a></p><p><br /></p><span><a name='more'></a></span><p><br /></p><p>NSG 流量紀錄會將資料儲存於 Blob Storage,後續您可以匯出至圖形化日誌檢視工具。啟用網路資源群組流量紀錄方式方別有兩種,分別為 </p><p>1. 網路監看員 (Network Watcher) 服務啟用 NSG 流量紀錄</p><p>2. 直接在網路資源群組內啟用 NSG 流量紀錄</p><p><br /></p><h2 style="text-align: left;">網路監看員 (Network Watcher) 服務啟用 NSG 流量紀錄</h2><p>步驟1. 在 Azure portal 上方開啟網路監看員 (Network Watcher) 服務,點選 NSG 流量紀錄</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9DiITbumCToSTWl33piWTgDtQHn6R-dh6rHMe0IhneEl9X1rJ0Pj0ZS-E0iy9xVZxddvdqIWQa5aR6M9EkpQqIjA0zdMqSnUpxd52EtDAdOWAfaHMd_ZsH059iTPJTwjMfp7W9K3NgmawwmKWPAekpbrgEcHEUCzi9KOZbnc7dMv_hkSlmra5BfWW/s1544/201.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="574" data-original-width="1544" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9DiITbumCToSTWl33piWTgDtQHn6R-dh6rHMe0IhneEl9X1rJ0Pj0ZS-E0iy9xVZxddvdqIWQa5aR6M9EkpQqIjA0zdMqSnUpxd52EtDAdOWAfaHMd_ZsH059iTPJTwjMfp7W9K3NgmawwmKWPAekpbrgEcHEUCzi9KOZbnc7dMv_hkSlmra5BfWW/s16000/201.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 2. 左邊選單中找到 NSG 流量紀錄,點選上方建立按鈕</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG0HSAXYWtGJb1lNK--PUFLX2hFk1oAtDmX0655k87Zqp7VZmvnCGfpOt_dwBvHyXLU7-6Y9AEnsisWQwy0GbULg0m8mlZjrSvxKMCrG5OBl0HMIF2lTsdFrKVhOQtKNZRdY04n8EvOaWBkpUcGLeJENSNgYMIshbep9Z2GEGxZ8dDA_6lzsjHotQq/s2666/202.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1630" data-original-width="2666" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG0HSAXYWtGJb1lNK--PUFLX2hFk1oAtDmX0655k87Zqp7VZmvnCGfpOt_dwBvHyXLU7-6Y9AEnsisWQwy0GbULg0m8mlZjrSvxKMCrG5OBl0HMIF2lTsdFrKVhOQtKNZRdY04n8EvOaWBkpUcGLeJENSNgYMIshbep9Z2GEGxZ8dDA_6lzsjHotQq/s16000/202.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 3. 選擇要記錄的網路資源群組,選擇儲存體帳戶與保留天數</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv7EKXLB5yHnwRDQnF4DbUZ7gAb8lkQu1yRRWTFPMcxum-tGzSQn9EoELRKyVTRb5WmtdG-NOMEqdR640RPIUgvvtgGS2TTY69juMCynB1T63dA5pd_CKuTiWRc8vVL3j9Wd87zoZJeFZtpx-al2lp0SpRF3PMzzVQODvhHfaRl71U4VexcXRIEEmt/s1795/203.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1760" data-original-width="1795" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv7EKXLB5yHnwRDQnF4DbUZ7gAb8lkQu1yRRWTFPMcxum-tGzSQn9EoELRKyVTRb5WmtdG-NOMEqdR640RPIUgvvtgGS2TTY69juMCynB1T63dA5pd_CKuTiWRc8vVL3j9Wd87zoZJeFZtpx-al2lp0SpRF3PMzzVQODvhHfaRl71U4VexcXRIEEmt/s16000/203.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 4. 選擇流量紀錄版本,並依據需求選擇是否需要啟用流量分析。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2tWx8uHbYp1hgHJS4Gq8aCVqLBrjGvduR3PMuh5vRmgKeZSxObwVRQn57fd1ai558acSez2aLG5qZFWmMNGLuh2a0LWBo4NldjEJX5IDIOCHdr47SRc1dEfOTHfoHJsTfeDwBycrelrUNBzBVdGEKjW5joXu2wn5oMtFCEQbe7m0s_LH9y22o3I9w/s1568/204.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1201" data-original-width="1568" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2tWx8uHbYp1hgHJS4Gq8aCVqLBrjGvduR3PMuh5vRmgKeZSxObwVRQn57fd1ai558acSez2aLG5qZFWmMNGLuh2a0LWBo4NldjEJX5IDIOCHdr47SRc1dEfOTHfoHJsTfeDwBycrelrUNBzBVdGEKjW5joXu2wn5oMtFCEQbe7m0s_LH9y22o3I9w/s16000/204.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 5. 依據情境選擇標籤</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPfh-AOnrEbXBp8ukj4smXKSUUOF6jr_SitieM0nEQ2onVtL73ST_zv_bf7VzbveVflL06sfyxk34vHzWgU0oFbbvSE42O882HxSM5aTmMTjdp8Gi8T9KvdTCAVGfNV5upoE2-fuFkXublKl0NftXaTX-ZbFHwd0Bkn2tb2MDwKTbMk9uuR8LJUgZr/s1568/205.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1198" data-original-width="1568" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPfh-AOnrEbXBp8ukj4smXKSUUOF6jr_SitieM0nEQ2onVtL73ST_zv_bf7VzbveVflL06sfyxk34vHzWgU0oFbbvSE42O882HxSM5aTmMTjdp8Gi8T9KvdTCAVGfNV5upoE2-fuFkXublKl0NftXaTX-ZbFHwd0Bkn2tb2MDwKTbMk9uuR8LJUgZr/s16000/205.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 6. 檢視設定內容無誤後,點選建立按鈕。後續即可在 Blob Storage 內找流量紀錄。</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifM2l68iSs8VZf1cGLwc_TTcHC0wjpXECi-Uoc3_9a5EAKt1Gs3vfXmopZi9BIAEijabXyXV-bipi1KOjjVgClzObKl4AwWLf-LrJf18cEIwAXugqJsFm1bK5GQm9oIHiq_JHPdtADuA2B_xgpVd_T24gGJtmtbmIicZq-H1dryPecK6uINkRGG1-o/s1459/206.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1459" data-original-width="1385" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifM2l68iSs8VZf1cGLwc_TTcHC0wjpXECi-Uoc3_9a5EAKt1Gs3vfXmopZi9BIAEijabXyXV-bipi1KOjjVgClzObKl4AwWLf-LrJf18cEIwAXugqJsFm1bK5GQm9oIHiq_JHPdtADuA2B_xgpVd_T24gGJtmtbmIicZq-H1dryPecK6uINkRGG1-o/s16000/206.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><h2 style="text-align: left;">網路資源群組內啟用 NSG 流量紀錄</h2><p>步驟 1. 點選要啟用流量紀錄的網路資源群組,於左邊選單點選 NSG 流量紀錄,點選上方建立按鈕</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsx4jxW3j7p_cFoWXeETd2axDMy2ewUfYoMNlpGp8JptkN1SihRI6fMsLL7srl6qQBg1cImN06i1lNiWkawSIeC2nZIeO7Za3CvIV2l62sQZlIU0ZLe-1GdH4CdcWEa98ubEnBEqmBDXnwcqDFqS4bN6Fo15g3rcShDTt1FfxwiqvDQ975hf5ImEDZ/s2169/301.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1448" data-original-width="2169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsx4jxW3j7p_cFoWXeETd2axDMy2ewUfYoMNlpGp8JptkN1SihRI6fMsLL7srl6qQBg1cImN06i1lNiWkawSIeC2nZIeO7Za3CvIV2l62sQZlIU0ZLe-1GdH4CdcWEa98ubEnBEqmBDXnwcqDFqS4bN6Fo15g3rcShDTt1FfxwiqvDQ975hf5ImEDZ/s16000/301.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p>步驟 2. 選擇要記錄的網路資源群組,選擇儲存體帳戶與保留天數</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUlO3oRfL3drBbyyqc02zrNMYHdPtZk_vMuO_SrzWAJ6vm_vWNhVyqiMrNQwKpT_7KegIGRy_V-QeuYerjsknF8rqjYpjnC1Ypi0YWIbOZfNs7F7mNkIY-GQtD40ja6zoDqyDDngIqj7uKcEdypJ0bP0onUsPlDzhgGbLpcjgwFXCLrmGvUuX7YGU2/s1845/302.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1845" data-original-width="1681" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUlO3oRfL3drBbyyqc02zrNMYHdPtZk_vMuO_SrzWAJ6vm_vWNhVyqiMrNQwKpT_7KegIGRy_V-QeuYerjsknF8rqjYpjnC1Ypi0YWIbOZfNs7F7mNkIY-GQtD40ja6zoDqyDDngIqj7uKcEdypJ0bP0onUsPlDzhgGbLpcjgwFXCLrmGvUuX7YGU2/s16000/302.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><p>步驟 3. 選擇流量紀錄版本,並依據需求選擇是否需要啟用流量分析。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZuPdmWsKMoltJJa5TsVUMfWoTlcHwRwtx6oWCNmzzkNs_fStyKW1iRzzBsBm0OsGPyJSQaoJYffLfCeKBfQf28JoVjj961_y8iP0wUu31Ub3f56sXbs6YqU7rW7diG3m0Kpy4LSZzdQcIgQ8P-vwoyz8ZD112PYvApHkckBWb3S6I_0pJSy1gztwE/s1684/303.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1124" data-original-width="1684" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZuPdmWsKMoltJJa5TsVUMfWoTlcHwRwtx6oWCNmzzkNs_fStyKW1iRzzBsBm0OsGPyJSQaoJYffLfCeKBfQf28JoVjj961_y8iP0wUu31Ub3f56sXbs6YqU7rW7diG3m0Kpy4LSZzdQcIgQ8P-vwoyz8ZD112PYvApHkckBWb3S6I_0pJSy1gztwE/s16000/303.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 4. 依據情境選擇標籤</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwlyVDjaOgKWDcI5uhFKuQcNSRSLJ_m0OH8fyM8vcn289G2QGJ5RUaQkmFH9JAx-VLd3jm6I-opjeiTMoYVVX-fhVOS9rsmX5PyXjmMH-L1SNhBtsTQwjjr_l-ml2Uk4C6LzUqbtEFw5VBlN-v7OCHOH21JAmyXOtQvMhT78DaAEkdU9TMs3UdULwC/s1396/304.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1002" data-original-width="1396" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwlyVDjaOgKWDcI5uhFKuQcNSRSLJ_m0OH8fyM8vcn289G2QGJ5RUaQkmFH9JAx-VLd3jm6I-opjeiTMoYVVX-fhVOS9rsmX5PyXjmMH-L1SNhBtsTQwjjr_l-ml2Uk4C6LzUqbtEFw5VBlN-v7OCHOH21JAmyXOtQvMhT78DaAEkdU9TMs3UdULwC/s16000/304.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 5. 檢視設定內容無誤後,點選建立按鈕。後續即可在 Blob Storage 內找流量紀錄。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrHIa356PSu-HUkXlDT_XYliDs7QsVj8_IaTfs2DRx4GdZy39QWd-dHiocZ8HwmNWB4mSX5SEmbj3X_d30uI75PfaMaCW7Nm3KVY6nW92krdfaH7VwoeEJyc4d18s1P1sIk9742kQAZFhuZUwXYpTpJJ0S3Y5cycF2o8awjQz2uJDdf8NPJd-YJBKt/s1469/305.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1469" data-original-width="1366" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrHIa356PSu-HUkXlDT_XYliDs7QsVj8_IaTfs2DRx4GdZy39QWd-dHiocZ8HwmNWB4mSX5SEmbj3X_d30uI75PfaMaCW7Nm3KVY6nW92krdfaH7VwoeEJyc4d18s1P1sIk9742kQAZFhuZUwXYpTpJJ0S3Y5cycF2o8awjQz2uJDdf8NPJd-YJBKt/s16000/305.png" /></a></div><br /><p><br /></p><p><br /></p><h2 style="text-align: left;">參考資料</h2><p><a href="https://docs.microsoft.com/zh-tw/azure/network-watcher/network-watcher-nsg-flow-logging-overview" target="_blank">NSG 的流程紀錄簡介 - Microsoft docs</a></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-3433342127893368372022-05-16T15:25:00.004+08:002022-05-16T15:33:07.311+08:00加入 Firebase 至 Flutter 應用程式<p></p><blockquote>注意:在閱讀本篇文章前,請先確認本機上已經安裝<a href="https://docs.flutter.dev/get-started/install/windows" target="_blank"> Flutter SDK</a>,您可以參考 Flutter <a href="https://dog0416.blogspot.com/2022/05/flutter.html" target="_blank">初體驗 : 相關安裝與設定</a> 進行安裝。</blockquote><p></p><p><br /></p><p>本篇文章將介紹如何加入 Firebase 套建至 Flutter 應用程式。若有錯誤或任何建議,請各位先進不吝提出,謝謝。</p><p style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC-cS9yVox_tIkKdO4T3JRSoNlzH0PeF1rijTSYnfnRRgpPufP4AXVaF5CCJ4jWIQjHl9KiUi3WFso8UvgFNKsI3aXkSh2wqBVNuYLIMvN3gOJJQcokcAgLPCDXC5lyTK29dH7vOyo8PZ3y_xtd8epVKlbgCKUpw8fBJAyvaFZOSuix1dq7ARLYL7Z/s450/000.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="450" data-original-width="450" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC-cS9yVox_tIkKdO4T3JRSoNlzH0PeF1rijTSYnfnRRgpPufP4AXVaF5CCJ4jWIQjHl9KiUi3WFso8UvgFNKsI3aXkSh2wqBVNuYLIMvN3gOJJQcokcAgLPCDXC5lyTK29dH7vOyo8PZ3y_xtd8epVKlbgCKUpw8fBJAyvaFZOSuix1dq7ARLYL7Z/s320/000.png" width="320" /></a></p><span><a name='more'></a></span><p><br /></p><p><br /></p><p><br /></p><p>步驟 1. 安裝 Firebase CLI:我們建議透過 npm 方式安裝,請先安裝 nodejs LTS 版本</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqrgmJ0FV0ILt9Y1A86CbzdPrBIam3Vf36pKBajzjGOKq48dVwHtq4sivl5n6KfWFRwU_ps3kyaT6StHX_NTaYP4OZilzmzdQcJskZPRatYnYj1EfMfnbLyuyDpMuY8-88uwP53M6aGFn-bgdkLosxTVvG1o-mICRh00gD5gIUeU8JVbTs7NARsmGZ/s801/300.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="541" data-original-width="801" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqrgmJ0FV0ILt9Y1A86CbzdPrBIam3Vf36pKBajzjGOKq48dVwHtq4sivl5n6KfWFRwU_ps3kyaT6StHX_NTaYP4OZilzmzdQcJskZPRatYnYj1EfMfnbLyuyDpMuY8-88uwP53M6aGFn-bgdkLosxTVvG1o-mICRh00gD5gIUeU8JVbTs7NARsmGZ/s16000/300.png" /></a></div><br /><p><br /></p><p>若您的安裝環境也是 Windows,安裝過程中有詢問是否要自動安裝必要套件,建議選擇是</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8g379PfQIz8PST5xGSZc4FfK_64FJl3Er-JTu4pF8YqNz4p593-Ex3CRvG8sTPFTeRzQCxeK9vaYZaLj2OJyt4C4Vuadm8jG1JAgaVln7TcL5LNqSmQtTXbjRJNWvSOv8dsIdbRL7xfPGisKdkicsOg-jieNJsyKSSrFIG1gMo_3k_rpFgea7yciL/s451/000.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="351" data-original-width="451" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8g379PfQIz8PST5xGSZc4FfK_64FJl3Er-JTu4pF8YqNz4p593-Ex3CRvG8sTPFTeRzQCxeK9vaYZaLj2OJyt4C4Vuadm8jG1JAgaVln7TcL5LNqSmQtTXbjRJNWvSOv8dsIdbRL7xfPGisKdkicsOg-jieNJsyKSSrFIG1gMo_3k_rpFgea7yciL/s16000/000.jpg" /></a></div><div><br /></div><br /><p><br /></p><p>步驟 2. 透過 npm 指令安裝 firebase-tools:npm install -g firebase-tools</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQYVid-MwoBSMxXXeC1kwKzK3i-vdJ0DvJw1weFz1GJ6XYGo6A7y6aNzoYO62fEA_ut9QCwH_VQeDdfVwK1C54AUo1Hbub5G4YKvLsyCwUQijk7iezE-dRyetFp_YyGCfSVSfU7fi_KWmR7csiJSWv41z1bbFFMZS6tdjAP6ZaJhAHb8spBZCUfwHD/s692/301.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="221" data-original-width="692" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQYVid-MwoBSMxXXeC1kwKzK3i-vdJ0DvJw1weFz1GJ6XYGo6A7y6aNzoYO62fEA_ut9QCwH_VQeDdfVwK1C54AUo1Hbub5G4YKvLsyCwUQijk7iezE-dRyetFp_YyGCfSVSfU7fi_KWmR7csiJSWv41z1bbFFMZS6tdjAP6ZaJhAHb8spBZCUfwHD/s16000/301.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 3. 接下來,我們要安裝 Flutterfire CLI。關閉命令列,開請新的命令列並輸入下列指令</p><p>dart pub global activate flutterfire_cli</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyiUd50VMAAsqMl8wWDOOLtws1Qi5EjC6wZoWMQaka9uyuLghG4M1Zu9WxbUL6oMlNCXNALwpIks9CzQJ8zaogd8Bxmbv1dphHTVgR5-Ql1MBsVWfiV-MVDE7vQLb-82zaJQHX7xEfHEZvxTLRCTHqlMSwAGu3rn36ApKhfUmemP7lwy0o2biI5LgQ/s667/401.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="336" data-original-width="667" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyiUd50VMAAsqMl8wWDOOLtws1Qi5EjC6wZoWMQaka9uyuLghG4M1Zu9WxbUL6oMlNCXNALwpIks9CzQJ8zaogd8Bxmbv1dphHTVgR5-Ql1MBsVWfiV-MVDE7vQLb-82zaJQHX7xEfHEZvxTLRCTHqlMSwAGu3rn36ApKhfUmemP7lwy0o2biI5LgQ/s16000/401.png" /></a></div><br /><p><br /></p><p>步驟 4. 切換目錄至 Flutter 專案目錄下,透過下列指令與 Firebase 做連結</p><p>flutterfire configure</p><p>會依序詢問對應 Firebase 上哪個專案、目標是哪種類型應用程式...等問題,請依據實際情況設定。完成連結後,在專案目錄下會產生一個 firebase_options.dart 文件。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMPc98Eig2fqoQ6JcqJuebi7pS6Fq6P5a8R4pe0QiW_JXRkq-yn1ExI6TIu9VA1YVJi2LabveWKIjgOspsiGZU_eipkKs7Sr1PemS69XM_1FDPNVqLb3Kk0PafHwlxFNys_cVdVYY5_LekttwVe9vP6LM5Ci21nl_FlFbyEQYVuMt9bGkYZbRBj7_R/s979/302.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="512" data-original-width="979" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMPc98Eig2fqoQ6JcqJuebi7pS6Fq6P5a8R4pe0QiW_JXRkq-yn1ExI6TIu9VA1YVJi2LabveWKIjgOspsiGZU_eipkKs7Sr1PemS69XM_1FDPNVqLb3Kk0PafHwlxFNys_cVdVYY5_LekttwVe9vP6LM5Ci21nl_FlFbyEQYVuMt9bGkYZbRBj7_R/s16000/302.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 5. 後續要使用 Firebase 相關套件,可以透過 flutter pub add [firebase lib name] 指令進行安裝(請依據實際需求安裝)。下列為安裝套件範例</p><p><br /></p><p>firebase_core 是所有 Firebase Flutter 套件所需的通用代碼。</p><p>指令:flutter pub add firebase_core </p><p><br /></p><p>firebase_auth 支持與 Firebase 的身份驗證功能整合。</p><p>指令:flutter pub add firebase_auth</p><p><br /></p><p>cloud_firestore 允許訪問 Cloud Firestore 資料儲存。</p><p>指令:flutter pub add cloud_firestore</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbSHlqm_GvgryV5iglWEkl2odchylZTohYXNauYFi2Jnj4Gnj1ObCS2Pszwhkn1636UMcwHpuO158l1I-MocKb_KYJfpSZrlIWJmomRk3nXP24MrfetaLVC9612eOe15sRmwmp8ZeJHCnjj06wGqK01cLhlxwqAUNoQjflNg_Ls0HIZXF3im1XYnbh/s449/402.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="195" data-original-width="449" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbSHlqm_GvgryV5iglWEkl2odchylZTohYXNauYFi2Jnj4Gnj1ObCS2Pszwhkn1636UMcwHpuO158l1I-MocKb_KYJfpSZrlIWJmomRk3nXP24MrfetaLVC9612eOe15sRmwmp8ZeJHCnjj06wGqK01cLhlxwqAUNoQjflNg_Ls0HIZXF3im1XYnbh/s16000/402.png" /></a></div><br /><p><br /></p><p>完成加入所需的Lib,即完成加入 Firebase 至 Flutter 應用程式所有步驟</p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-22342072665611795162022-05-14T15:30:00.003+08:002022-05-16T15:58:25.961+08:00Flutter 初體驗 : Flutter SDK 安裝與 Android Studio 設定<p>因為社群關係,個人對於 Flutter 相當有興趣,最近終於有機會接觸一下這兩項技術。Flutter 是一個能夠跨平台的框架,透過 dart 語言撰寫,可同時提供 iOS、Android、Web 應用程式與桌面應用程式使用,相當方便。 Flutter 本身提供了許多套件 (Library) 與元件(Widget) 可供開發人員使用,其 SDK 會將程式碼轉譯為 Android 與 iOS 可以讀取的程式碼,達到跨平台效果。本篇文章將簡單紀錄如何安裝 Flutter,過程相當簡單,若有興趣的朋友可以參考。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC-cS9yVox_tIkKdO4T3JRSoNlzH0PeF1rijTSYnfnRRgpPufP4AXVaF5CCJ4jWIQjHl9KiUi3WFso8UvgFNKsI3aXkSh2wqBVNuYLIMvN3gOJJQcokcAgLPCDXC5lyTK29dH7vOyo8PZ3y_xtd8epVKlbgCKUpw8fBJAyvaFZOSuix1dq7ARLYL7Z/s450/000.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="450" data-original-width="450" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC-cS9yVox_tIkKdO4T3JRSoNlzH0PeF1rijTSYnfnRRgpPufP4AXVaF5CCJ4jWIQjHl9KiUi3WFso8UvgFNKsI3aXkSh2wqBVNuYLIMvN3gOJJQcokcAgLPCDXC5lyTK29dH7vOyo8PZ3y_xtd8epVKlbgCKUpw8fBJAyvaFZOSuix1dq7ARLYL7Z/s320/000.png" width="320" /></a></div><p><br /></p><span><a name='more'></a></span><p><br /></p><h2 style="text-align: left;">安裝 Flutter</h2><p>步驟 1. 開啟 <a href="https://docs.flutter.dev/get-started/install/windows" target="_blank">Flutter Windwos 安裝文件</a>。點選 flutter_windows_3.0.0-stable.zip 按鈕 (您也可以透過該網頁提供Git 方式下載)</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJNPKcTOoUBg7CBo24ihyAMJEb4ZVOStZe-CdN5LVkYuQWc3eSJoDqC2-aWfhYXMycDsx8ZTqgkGT9Go8GWKXvkTqa_dODcowtYDSBENZ97F9K-p2IqHkeQM0LWW6sTxbaZfyYGqjjRmP27eelzgo3slMFKsXkrwt_IXaQvaQJ0HjpaPadgZK12Gn5/s788/001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="735" data-original-width="788" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJNPKcTOoUBg7CBo24ihyAMJEb4ZVOStZe-CdN5LVkYuQWc3eSJoDqC2-aWfhYXMycDsx8ZTqgkGT9Go8GWKXvkTqa_dODcowtYDSBENZ97F9K-p2IqHkeQM0LWW6sTxbaZfyYGqjjRmP27eelzgo3slMFKsXkrwt_IXaQvaQJ0HjpaPadgZK12Gn5/s16000/001.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 2. 解壓縮檔案,並將檔案重新命名 flutter (可依據喜好放置與命名)</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtMzivz3DlmBy3rp839gVmEYY4dZiMUFzMGFFgy1grY4FGRlVHkkEj_rkxD6zLybELLAS__FX5jW5lbciEKCyjeFfAyaL0KYVq8I2GAydDXKtaHyiH9qBaukt7BXLp9tcXce3efUxWHSLsfPE2FDOQf6ABGdJ8V0MdXbjklySyYgXOhqAEOZnBFNE9/s646/002.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="301" data-original-width="646" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtMzivz3DlmBy3rp839gVmEYY4dZiMUFzMGFFgy1grY4FGRlVHkkEj_rkxD6zLybELLAS__FX5jW5lbciEKCyjeFfAyaL0KYVq8I2GAydDXKtaHyiH9qBaukt7BXLp9tcXce3efUxWHSLsfPE2FDOQf6ABGdJ8V0MdXbjklySyYgXOhqAEOZnBFNE9/s16000/002.png" /></a></div><br /><p>步驟 3. 設定環境變數:在使用者變數內找到 Path,點選編輯,加入上一個步驟安裝路徑+\bin (我放在 F:\fultter,所以路徑為 F:\flutter\bin)。完成後點選確定。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdfeEcpQrIWIjME1h_fbLEB23Ttz0Q-8Oj_Rxzi1G49msqy6b2g0S7tSkergXkcHcP7zSdf9RFKxAwbqzDy6UCHfAd4ZRalxzpwnsLeRKl4DCiX4rpJU2EgDZ39jXsQEt2lvr4HGR73sjsIzeD1BpkxfpMX7uwYcmkwK7RJO5pmZ5QunoSXRy2SYZW/s1437/003.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="562" data-original-width="1437" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdfeEcpQrIWIjME1h_fbLEB23Ttz0Q-8Oj_Rxzi1G49msqy6b2g0S7tSkergXkcHcP7zSdf9RFKxAwbqzDy6UCHfAd4ZRalxzpwnsLeRKl4DCiX4rpJU2EgDZ39jXsQEt2lvr4HGR73sjsIzeD1BpkxfpMX7uwYcmkwK7RJO5pmZ5QunoSXRy2SYZW/s16000/003.png" /></a></div><br /><p><br /></p><p>步驟 4. 開啟命令提示字元,輸入where flutter dart 指令,若出現下列畫面即表示安裝成功</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyaaaa4hUQZbc7uoFUFBBa_lzJyq_woKV2uYp4B9op1Bo99JyDnqswZnnR6-Xx3zVbsOH5igg_azFF1GJSUjxQZa7TvgC5UU_tlNtUXXAp056v4hvCmIWbQt4c3cvUJcKbmb4sPDct19cvBCScDYBlivd4SoKQBsSnMex1bHAIlLuyy5jjWkvilFiG/s667/004.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="336" data-original-width="667" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyaaaa4hUQZbc7uoFUFBBa_lzJyq_woKV2uYp4B9op1Bo99JyDnqswZnnR6-Xx3zVbsOH5igg_azFF1GJSUjxQZa7TvgC5UU_tlNtUXXAp056v4hvCmIWbQt4c3cvUJcKbmb4sPDct19cvBCScDYBlivd4SoKQBsSnMex1bHAIlLuyy5jjWkvilFiG/s16000/004.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 5. 輸入指令 flutter doctor,會幫您檢查缺少那些工具與套件。 (請善用此功能,初期如手機模擬器與 Android SDK 等工具)</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiusA3tIqSFrETEV3tygW3E5Ssg9ZksMOQX7_XsXqto4Qukh1YzEZ51Y0E4mAvo1XVqvBwYMS5HpOeZDOm70hfurDuDlcLjX7I2iysxUdlWHWDWf8o1xUzAvXoluU8exOtCzljEAsEAiefjrhK8rVDy4Kkx5L1gLn1V04bVDZWrLvXss40tMOBfcDrO/s926/005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="431" data-original-width="926" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiusA3tIqSFrETEV3tygW3E5Ssg9ZksMOQX7_XsXqto4Qukh1YzEZ51Y0E4mAvo1XVqvBwYMS5HpOeZDOm70hfurDuDlcLjX7I2iysxUdlWHWDWf8o1xUzAvXoluU8exOtCzljEAsEAiefjrhK8rVDy4Kkx5L1gLn1V04bVDZWrLvXss40tMOBfcDrO/s16000/005.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><h2 style="text-align: left;">安裝開發工具 - Android Studio</h2><p>您可以透過 Android、 IntelliJ 或 Visual Studio Code 三種不同開發具進行開發,我們使用 Android Studio 進行說明 (相關說明請參考<a href="https://docs.flutter.dev/get-started/editor?tab=androidstudio" target="_blank"> Set up an editor</a>)</p><p>步驟 1. 下載 Android Studio 並進行安裝 (不贅述)</p><p>步驟 2. 開啟 Plugin preferences (File > Settings > Plugins),選擇 Marketplace,搜尋 Flutter plugin 與 dart 兩個套件,並進行安裝。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihU4ZHVQr0iPzRJzTKDpZjzr2dq4kyxg0PcO-tNgNwRldknlPyLVcKmfODctc_aXhQ37d9VYc99pXWruV4afYP0rLIGEIsAKMHN8Fc9QImn6MfduMCBJRC9wE6o3w53ydmnI3zqstrod6cXvXNhf-eOd1PxgnpKQs8qe3P68u8Iir9tbqzA3cBir4U/s862/006.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="611" data-original-width="862" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihU4ZHVQr0iPzRJzTKDpZjzr2dq4kyxg0PcO-tNgNwRldknlPyLVcKmfODctc_aXhQ37d9VYc99pXWruV4afYP0rLIGEIsAKMHN8Fc9QImn6MfduMCBJRC9wE6o3w53ydmnI3zqstrod6cXvXNhf-eOd1PxgnpKQs8qe3P68u8Iir9tbqzA3cBir4U/s16000/006.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi107_yta3gV5nssU8ohkdJ5OOHtZqYy2sb8HhJJhz8wdoQnlPtOAzmcwVIUEz_GQKxJ3dtEf-l3KxBXsST9HECURhkxWIZBJ-OI_afrVkxwl74uJghu1-o2O8Qct4QyhsoJKYavCAuEBS9m11fxqgYg5qepAEdInneYymNaqmms7IyD8CjmwXPhRMr/s862/007.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="611" data-original-width="862" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi107_yta3gV5nssU8ohkdJ5OOHtZqYy2sb8HhJJhz8wdoQnlPtOAzmcwVIUEz_GQKxJ3dtEf-l3KxBXsST9HECURhkxWIZBJ-OI_afrVkxwl74uJghu1-o2O8Qct4QyhsoJKYavCAuEBS9m11fxqgYg5qepAEdInneYymNaqmms7IyD8CjmwXPhRMr/s16000/007.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 3. 重啟 Android Studio,然後點選 New Flutter Project</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO2GvVbpfgFgsYfdPBmuHvupe6SW1XLL9lCa7yLailVLOAnVcpQ-2YODStoTQ2hAnqxTnyccW_3l7hm5iIrCh4ROxYfCHkj820OxFLUhQpl49cRpsX1zuS7sxp0O9wTmN94bfYyUAKLXSaNpRkybfgfyFX6VUCwqDjsY4xMDTg8WDkU6HlLUOmPnd7/s862/007.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="593" data-original-width="862" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiO2GvVbpfgFgsYfdPBmuHvupe6SW1XLL9lCa7yLailVLOAnVcpQ-2YODStoTQ2hAnqxTnyccW_3l7hm5iIrCh4ROxYfCHkj820OxFLUhQpl49cRpsX1zuS7sxp0O9wTmN94bfYyUAKLXSaNpRkybfgfyFX6VUCwqDjsY4xMDTg8WDkU6HlLUOmPnd7/s16000/007.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 4. 我們選擇 Flutter,設定 Flutter SDK 安裝位置,點選下一步</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR0PLJrWHEcFKTcfvrHZuRbVmg2TAFI_5NF3tGwI1X6Cv0xdh6CXR8MdTAW_RxDUHNkqrJBzX_vX36At1yWh-dyPlPELUoic3U7KjwPETDlF7KzSs-CdQCnoy4zRyS-QUFdQBYdZKWVlD8SMog8x9th7MJipEwJG0lSYBhi9ZU11QsAs71zjGIjT9F/s683/102.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="490" data-original-width="683" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR0PLJrWHEcFKTcfvrHZuRbVmg2TAFI_5NF3tGwI1X6Cv0xdh6CXR8MdTAW_RxDUHNkqrJBzX_vX36At1yWh-dyPlPELUoic3U7KjwPETDlF7KzSs-CdQCnoy4zRyS-QUFdQBYdZKWVlD8SMog8x9th7MJipEwJG0lSYBhi9ZU11QsAs71zjGIjT9F/s16000/102.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 5. 輸入專案名稱(小寫+_ ) 與相關設定,點選完成開始建立專案</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjswTePnEHhR902J-jBliyAMZdmGkTzm9ClvUK8QPK0z4xnkL8VL94PlvYAtqXIrjMcXXyf9Zphyfnys0M6cMnR61ClXyjt-BehNehgGTm0vtVx7fAGS12MrGm6bX6DKFVztAk1DdAGvQjR3Um3AiJ0zz80bvgk7DtnzX31nxM7UMn2Tn6lKpJ498F/s683/103.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="527" data-original-width="683" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjswTePnEHhR902J-jBliyAMZdmGkTzm9ClvUK8QPK0z4xnkL8VL94PlvYAtqXIrjMcXXyf9Zphyfnys0M6cMnR61ClXyjt-BehNehgGTm0vtVx7fAGS12MrGm6bX6DKFVztAk1DdAGvQjR3Um3AiJ0zz80bvgk7DtnzX31nxM7UMn2Tn6lKpJ498F/s16000/103.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 6. 若您是第一次安裝設定 Android Studio,我們要設定模擬器(裝置)</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoTwJ0qfV1BsrQe7BHm0E39E8CCeD8RFPzwWArqTOYMQi2e2P_brct3RsTrVArvd8kEjeYi6e_KZcKUhT0UpLWYTHTaduvDQSD39k35j9NVq9LyqT37VK9V4vQH_VIu9csZ5Alj09fucgVmd3XCeVaTrg34iiFLeoE6lxO7_lnS7UlN9auZby5COxS/s355/201.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="209" data-original-width="355" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoTwJ0qfV1BsrQe7BHm0E39E8CCeD8RFPzwWArqTOYMQi2e2P_brct3RsTrVArvd8kEjeYi6e_KZcKUhT0UpLWYTHTaduvDQSD39k35j9NVq9LyqT37VK9V4vQH_VIu9csZ5Alj09fucgVmd3XCeVaTrg34iiFLeoE6lxO7_lnS7UlN9auZby5COxS/s16000/201.png" /></a></div><br /><p><br /></p><div class="separator" style="clear: both; text-align: center;"><br /></div><p>步驟 7. 選擇您要的裝置後,點選 Next。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieXkTNBNG2k-cIpuJtlV9swcaC1x7sD3tYHQ3Hw6-6D9HH67HWWesYzbsfSf24MzzX0aZ_4uAC_RqFx96wup8PWT2c8i8Np3_rt44f-tvd9f1P4rKmJEHNJ39CiIjll_VbF0kEE5v2N9oytUKsgI46o4-ZX13T0jHbRKvDrHta2FVdSZUN6kPDGppv/s1002/202.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="793" data-original-width="1002" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieXkTNBNG2k-cIpuJtlV9swcaC1x7sD3tYHQ3Hw6-6D9HH67HWWesYzbsfSf24MzzX0aZ_4uAC_RqFx96wup8PWT2c8i8Np3_rt44f-tvd9f1P4rKmJEHNJ39CiIjll_VbF0kEE5v2N9oytUKsgI46o4-ZX13T0jHbRKvDrHta2FVdSZUN6kPDGppv/s16000/202.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 8. 點選 Next (若無安裝相關套件或 HAMX,可以在此業一併安裝)</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyBIBl8Tap3sS3obRBsox8kLKiXuDbw22zUOUzfF-L1mDVkHt_2piaLIdNaVoanfUSBdoDGUPL2HKhYdaOk_-DxzvrtntsiJQnyddRcCfvDCvq1FhWfQVantGUG6gMdP_8f9rXtdYBWBbsPVG9rrl3aCUxyyQDCSci5lnOHbGDbwTJx78bebDJBUgQ/s1002/203.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="793" data-original-width="1002" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyBIBl8Tap3sS3obRBsox8kLKiXuDbw22zUOUzfF-L1mDVkHt_2piaLIdNaVoanfUSBdoDGUPL2HKhYdaOk_-DxzvrtntsiJQnyddRcCfvDCvq1FhWfQVantGUG6gMdP_8f9rXtdYBWBbsPVG9rrl3aCUxyyQDCSci5lnOHbGDbwTJx78bebDJBUgQ/s16000/203.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 9. 依據需求設定,點選 finish 完成裝置設定</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi7_8NEHF5ukVP_Cw6u4XyYnB4SvLftMolZk6eu--R8DgqGWAUuqu4tpu7zXgM63jaNUZbF2KXN6wL1Ig6r_JvspQFX_CJgMnf-pQuzGIFsW5tDZb8eXnfTMgBOLmQXbdmyEAZt1_CUBgrq062zBps0uN_3Fq3vjaIwRnR04NLANjoLMRSsg7Bh5eB/s1002/204.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="793" data-original-width="1002" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi7_8NEHF5ukVP_Cw6u4XyYnB4SvLftMolZk6eu--R8DgqGWAUuqu4tpu7zXgM63jaNUZbF2KXN6wL1Ig6r_JvspQFX_CJgMnf-pQuzGIFsW5tDZb8eXnfTMgBOLmQXbdmyEAZt1_CUBgrq062zBps0uN_3Fq3vjaIwRnR04NLANjoLMRSsg7Bh5eB/s16000/204.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p>步驟 10. 選擇好模擬器裝置,點選上方 Run 按鈕,測試是否可以成功啟動,確認所有安裝程序皆成功。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn4Q0FTvoCVaAr0Pcv0XgCaEu9i9acuBghOawtv0O7soFLGI4EDzJfxGOpefBJNqYa3YVe1zW60l2utLCgitvqFDaayvIxTkOz0mE48gOnHRVZd3IWGEYmw2iivz4Ft7LoWB92vCY6B0NMpbIH5jSpzLoQa9i_GF_QC6HvZWC7VfntaOpBn4LX623P/s1440/205.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="860" data-original-width="1440" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn4Q0FTvoCVaAr0Pcv0XgCaEu9i9acuBghOawtv0O7soFLGI4EDzJfxGOpefBJNqYa3YVe1zW60l2utLCgitvqFDaayvIxTkOz0mE48gOnHRVZd3IWGEYmw2iivz4Ft7LoWB92vCY6B0NMpbIH5jSpzLoQa9i_GF_QC6HvZWC7VfntaOpBn4LX623P/s16000/205.png" /></a></div><br /><p><br /></p><p>啟動畫面如下 (表示所有安裝與設定皆完成)</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidItvIL4Eqnz6X3hUiNOvSeJWh1atSYpdke2zFVpZ1Bm7CNC3pYQw8G4Dq0U_a8ROAy1baHu7j6ktc-CMK8Q5zmrEjjnOvi26TdhCwdQIDD1m8jjqRrV6wEL_oMm1SMyJVBeaDxXlnRNFISScAbWh-dsMWBkWZ16oBG7HU1oI_7quYc2Ns0vaIVMJB/s719/101.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="719" data-original-width="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidItvIL4Eqnz6X3hUiNOvSeJWh1atSYpdke2zFVpZ1Bm7CNC3pYQw8G4Dq0U_a8ROAy1baHu7j6ktc-CMK8Q5zmrEjjnOvi26TdhCwdQIDD1m8jjqRrV6wEL_oMm1SMyJVBeaDxXlnRNFISScAbWh-dsMWBkWZ16oBG7HU1oI_7quYc2Ns0vaIVMJB/s16000/101.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-51760274864846183762022-04-22T12:01:00.002+08:002022-04-22T12:01:10.837+08:00Eclipse Refactor 功能: 移動檔案至其他 Package<p>因為工作關係,最近比較常接觸 Java 網站應用程式,除了協助客戶撰寫單元測試專案範例,也協助客戶調整專案並與 Azure DevOps 進行整合。因為如此,又接觸久違 的Eclipse 開發工具。 Eclipse 雖然沒有 intellij 好用,但重構做的功能相當不錯,但個人太少使用常常忘記。本篇文章簡單紀錄如果要搬移程式至其他 Package 筆記,也給有興趣的朋友參考。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVsPQvBs9pCb6FfmlnOQswQCtiBhDImsNaSSm-2agQwTeTvkJMx077H7bIK3C6hiW1N9WvTPXcKw4grxqRU5sY6h2EL5LUvoLXIaPnTtE_VCTKoXvepFNhEZmWHLtxAmdM7knZinD2ktG_lktHqRzcVmmxkoVf2tCNLa7iOCK4wrDPU1VCY--gel0e/s640/pixta_50038216_S.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="426" data-original-width="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVsPQvBs9pCb6FfmlnOQswQCtiBhDImsNaSSm-2agQwTeTvkJMx077H7bIK3C6hiW1N9WvTPXcKw4grxqRU5sY6h2EL5LUvoLXIaPnTtE_VCTKoXvepFNhEZmWHLtxAmdM7knZinD2ktG_lktHqRzcVmmxkoVf2tCNLa7iOCK4wrDPU1VCY--gel0e/s16000/pixta_50038216_S.jpg" /></a></div><p><br /></p><span><a name='more'></a></span><p><br /></p><p>步驟 1. 滑鼠右鍵點選想要移動的檔案,選擇 Refactor > Move...</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHA63dcUBVJRnawb4qE43gsnNbmwlglX-jPBe1kZ2fg_kFyMiwNaZz_Wg7b6n4Kor3u8O6xsN56FMy71Eq8sKWg29KVQEHOJZsUJUs0JfL08JIu5kFgy_-mpsnzfriMPkhoCR0UOyFVC1afefKgaFDlEsMWSLgk03StFbK24g7h-A-7QbfFd-6XGV3/s1132/201.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1115" data-original-width="1132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHA63dcUBVJRnawb4qE43gsnNbmwlglX-jPBe1kZ2fg_kFyMiwNaZz_Wg7b6n4Kor3u8O6xsN56FMy71Eq8sKWg29KVQEHOJZsUJUs0JfL08JIu5kFgy_-mpsnzfriMPkhoCR0UOyFVC1afefKgaFDlEsMWSLgk03StFbK24g7h-A-7QbfFd-6XGV3/s16000/201.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 2. 若目標位置沒有 Package,可以先點右上角 Create Pacakge 按鈕</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcKPs7QzSKie9UiJljanXlitja7AE-0urzE1tO9N3f9yG45moMrSFaUua4u_5SWJ1U-9Kd73HZAtTCmjIZHxbpTRHlbrIJHSL-bryHDv-9YXw0-orZ1M7HCe8CEO_5X7x4aO07JgmUCJeL6UhwkPVYzySnhYtdW4xjstp1idu1KEGiLPpakxyXjUsB/s707/202.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="707" data-original-width="653" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcKPs7QzSKie9UiJljanXlitja7AE-0urzE1tO9N3f9yG45moMrSFaUua4u_5SWJ1U-9Kd73HZAtTCmjIZHxbpTRHlbrIJHSL-bryHDv-9YXw0-orZ1M7HCe8CEO_5X7x4aO07JgmUCJeL6UhwkPVYzySnhYtdW4xjstp1idu1KEGiLPpakxyXjUsB/s16000/202.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 3. 輸入 Source Folder 與 Pacakge Name,點選 Finish 按鈕完成建立 Package</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLoULrTAbBgkMNn7z2HHtFkn57bMgAHING8Uff-YYtOj5xbdKE-hoOm7PZikHJiXCQ-xiUl1kMmEdQYIbKjkn-vkcuLcB4eAVbWY3i3346LpqZEONr82oyIOnnuF1eymgRs754EWvpj3uNJSK-YT8kRNDnqE0-MWTnsHevRknZkoodlCNhzvY7vQRh/s688/203.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="674" data-original-width="688" height="626" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLoULrTAbBgkMNn7z2HHtFkn57bMgAHING8Uff-YYtOj5xbdKE-hoOm7PZikHJiXCQ-xiUl1kMmEdQYIbKjkn-vkcuLcB4eAVbWY3i3346LpqZEONr82oyIOnnuF1eymgRs754EWvpj3uNJSK-YT8kRNDnqE0-MWTnsHevRknZkoodlCNhzvY7vQRh/w640-h626/203.png" width="640" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 4. 選擇目標 Package 位置,點選 OK 按鈕</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxPQrhl2taMz7UuN-9LhHXIv6PTR4uYA9eFdd46Z6oBsLuNG_aBPDjmb6dVikPhLTAO97QYX57D0VZ1fXYzce7WljBANCaj5yVwmJNtGEio82Cw404XejQB7gfKxim4cxgkCnKMM6Wa4HefTQ0Wo7POA9WdTQEmo_mi6QPBYdo0Nhcgr61qwmx9MGO/s702/204.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="702" data-original-width="650" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxPQrhl2taMz7UuN-9LhHXIv6PTR4uYA9eFdd46Z6oBsLuNG_aBPDjmb6dVikPhLTAO97QYX57D0VZ1fXYzce7WljBANCaj5yVwmJNtGEio82Cw404XejQB7gfKxim4cxgkCnKMM6Wa4HefTQ0Wo7POA9WdTQEmo_mi6QPBYdo0Nhcgr61qwmx9MGO/s16000/204.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 5. 確認完成檔案移動</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpd5xwk9uXucy7pV-QxsnpQcnYTqhMHJe-6oUb_XOKZr5x_ulqvZtzZQzSJkoO7CRtNCCy3wzRB2QGQ-8_0e4KJPos2rIeuSNMCJeh5oStpWcbSilLJHiGW4v7i8_Qbsh0P6j9bCJi0eAsV_llVi8p0-zcO4wz4Ixfw_NBPmS2q8lFI8Q9grAPwWEB/s417/205.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="102" data-original-width="417" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpd5xwk9uXucy7pV-QxsnpQcnYTqhMHJe-6oUb_XOKZr5x_ulqvZtzZQzSJkoO7CRtNCCy3wzRB2QGQ-8_0e4KJPos2rIeuSNMCJeh5oStpWcbSilLJHiGW4v7i8_Qbsh0P6j9bCJi0eAsV_llVi8p0-zcO4wz4Ixfw_NBPmS2q8lFI8Q9grAPwWEB/s16000/205.png" /></a></div><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-39177468473246869302022-04-02T13:45:00.003+08:002022-04-02T13:45:31.958+08:00[小技巧] 如何使用 ColorTool 變更 PowerShell 背景與文字顏色<p>最近因為要印刷教學文件,需要將 PowerShell 佈景變成白底黑字,讓與會者方便檢視。無意間,發現微軟提供的 ColorTool 工具提供多種樣板 (Schema),讓使用者可以從這些樣板中挑選合適的文字與背景顏色,節省不少時間,特別紀錄一下使用流程,提供給有興趣的朋友參考。本篇文章若有錯誤或任何建議,請各位先進不吝提出,謝謝。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgunJrOa42BvAlgHrZy9NTa0tasnM8BpPgpuLzdhrsY0EAJit6-N_eFjVeC3_653jQbBR2voyrPRZ6wfNvhVJiXHvDMWan5wjVThYnlhxnSt01DgcEql1KpiCANK810xMdFycFJoFj8PJtzm7m5SEIX-mZU7HMSVFi6JSp-DmUboFHzd08aYQVUafL9/s824/003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="429" data-original-width="824" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgunJrOa42BvAlgHrZy9NTa0tasnM8BpPgpuLzdhrsY0EAJit6-N_eFjVeC3_653jQbBR2voyrPRZ6wfNvhVJiXHvDMWan5wjVThYnlhxnSt01DgcEql1KpiCANK810xMdFycFJoFj8PJtzm7m5SEIX-mZU7HMSVFi6JSp-DmUboFHzd08aYQVUafL9/s16000/003.png" /></a></div><br /><p><br /></p><span><a name='more'></a></span><p><br /></p><p>您可以在 <a href="https://github.com/microsoft/terminal/tree/main/src/tools/ColorTool" target="_blank">ColorTool</a> 找到工具詳細使用說明與原始碼,能在 <a href="https://github.com/microsoft/terminal/releases/tag/1904.29002" target="_blank">ColorTool Release</a> 下載安裝程式。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgggHPoWq17TBC_5S-22mSyMZWJzi6f6QYf-7zNDDYg43hNfEEIUFIqSlZul7stiz6BCJhUbmBfH3DAi0LRYGvom_WI8Y3e5YL-hfWGHgCIzMiYEGTsspKt0l-R_9XDcyVS3jU8IMyP17_K7RczMPPhFybHHNlr9YB9FtFrb651L6V7XMccIeUnMBg6/s1168/001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="620" data-original-width="1168" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgggHPoWq17TBC_5S-22mSyMZWJzi6f6QYf-7zNDDYg43hNfEEIUFIqSlZul7stiz6BCJhUbmBfH3DAi0LRYGvom_WI8Y3e5YL-hfWGHgCIzMiYEGTsspKt0l-R_9XDcyVS3jU8IMyP17_K7RczMPPhFybHHNlr9YB9FtFrb651L6V7XMccIeUnMBg6/s16000/001.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div>下載完成解壓縮,可以看見 schemas 資料夾與 ColorTool.exe 檔案<br /><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-NV8U9m38mUs39wklLEQFhQPSrCRuBCPXO6d0IrDFq0cBTdPTB4p6u8I7ttuoxq8-PnxGv0plOeysimOOH3h4FqHrDJux6hi36hrbVFHMDoVFBGvIgxmccaXqJYQ0IpLJeT_crMBi1NgfbzGKTO2INBNLpiBm5TqjQ-_LzyYKYXN1VSKOjWMorPeC/s556/00.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="358" data-original-width="556" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-NV8U9m38mUs39wklLEQFhQPSrCRuBCPXO6d0IrDFq0cBTdPTB4p6u8I7ttuoxq8-PnxGv0plOeysimOOH3h4FqHrDJux6hi36hrbVFHMDoVFBGvIgxmccaXqJYQ0IpLJeT_crMBi1NgfbzGKTO2INBNLpiBm5TqjQ-_LzyYKYXN1VSKOjWMorPeC/s16000/00.png" /></a></div><br /><p><br /></p><p><br /></p><p>ColorTool 指令使用方式相當簡單,如下列命令</p><p>ColorTool.exe [Options] <Schema></p><p><br /></p><p><br /></p><p>Options 參數:</p>
<table border="1" cellpadding="3" cellspacing="3" style="background-color: white; border-collapse: collapse; border: 1px solid rgb(51, 51, 255); color: black; width: 100%;">
<thead>
<tr>
<th>指令</th>
<th>說明</th>
</tr>
</thead>
<tbody>
<tr>
<td>-?, --help</td>
<td>顯示幫助訊息</td>
</tr>
<tr>
<td>-c, --current</td>
<td>印出目前使用樣板的顏色表</td>
</tr>
<tr>
<td>-v, --version</td>
<td>顯示目前版本</td>
</tr>
<tr>
<td>-l, --location</td>
<td>顯示 Schema 目錄完整路徑</td>
</tr>
<tr>
<td>-s, --schemes</td>
<td>顯示所有樣板</td>
</tr>
<tr>
<td> -o, --output <filename><filename></filename></td>
<td>輸出顏色表至檔案 (.ini格式)</td>
</tr>
<tr>
<td>-q, --quiet</td>
<td>套用樣板時不要印出顏色表</td>
</tr>
<tr>
<td>-e, --errors</td>
<td>回報解析 Schema 時錯誤</td>
</tr>
<tr>
<td>-d, --defaults</td>
<td>將 Schema 套用至註冊表預設值 </td>
</tr>
<tr>
<td>-b, --both </td>
<td>將 Schema 同時套用註冊表預設值與目前的 Console</td>
</tr>
</tbody>
</table>
<p><br /></p><p><br /></p><p><br /></p><p>開啟命令提示字元或 PowerShell,切換目錄至 ColorTool 資料夾,輸入指令 .\ColorTool.exe -s (若您是用 Command line,直接輸入 ColorTool.exe -s),即會顯示所有 Schema。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfgjjMmsf6f7Yx1cuEfMAegpgQ_2DAl6seCygN2njBLKWoscsCPTyN6M1boP_jjgEON0BbBHfMhbUy3WS4Iwi4uePz9J7fO2xxmPnejGWEDt7qZF9Jy6c_2o1cRWiv8iP-Cq77Usx6Rs4p_7Enp3-jkUGG_KAHJ4zuPm8FIMrFgP_eXDGIGIOWQYEN/s824/002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="293" data-original-width="824" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfgjjMmsf6f7Yx1cuEfMAegpgQ_2DAl6seCygN2njBLKWoscsCPTyN6M1boP_jjgEON0BbBHfMhbUy3WS4Iwi4uePz9J7fO2xxmPnejGWEDt7qZF9Jy6c_2o1cRWiv8iP-Cq77Usx6Rs4p_7Enp3-jkUGG_KAHJ4zuPm8FIMrFgP_eXDGIGIOWQYEN/s16000/002.png" /></a></div><br /><p><br /></p><p><br /></p><p>輸入指令 .\ColorTool.exe -b solarized_light.itermcolors (命令提示字元使用ColorTool.exe -b solarized_light.itermcolor),即會套用該 Schema</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA2QhjS0OFijG7Rb5MjA_Ti4hA6nF9p1Bl4KaDbmOOEgfys8n-EoJ6kxSahwGBxQ3JkYGyaciDr9KTH0PSoLVmvkhIYpVTxaj8YqRshDoSoBMO23MFFb88Zo-BCE6p6WReQjWDDORBeNy0IErF7jH7DdbgG3INQZlu8mr3PYUFzsUfv5vDKuBXfQ_o/s824/003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="429" data-original-width="824" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA2QhjS0OFijG7Rb5MjA_Ti4hA6nF9p1Bl4KaDbmOOEgfys8n-EoJ6kxSahwGBxQ3JkYGyaciDr9KTH0PSoLVmvkhIYpVTxaj8YqRshDoSoBMO23MFFb88Zo-BCE6p6WReQjWDDORBeNy0IErF7jH7DdbgG3INQZlu8mr3PYUFzsUfv5vDKuBXfQ_o/s16000/003.png" /></a></div><br /><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-12976595297411540812022-03-21T12:32:00.003+08:002022-03-21T12:32:33.213+08:00如何在 Azure Pipeline 對網站專案 (Web Site Project) 設定持續整合?<p>網站專案 (Web Site Project) 是過去熱門的開發方式,雖然隨著時間的推進漸漸地式微,但在業界仍可以看到許多網站專案。有別於一般網站應用程式(Web Application),對於網站專案進行持續整合也有些不同。本篇文章將簡單說明如何對於網站專案設定持續整合。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDteOUZou50mJn9ElJBlRNPMsnNvjcYLbtbtT3GEepdBJL2nwbgTkReKibtQJW5ZuMfjik9EPZPNzRBJGu5Q7uP67X6HAZqVNc2zCFuVaXc90RTRh0_yWo2sTjJpwr0Bd4jxQdck2HKhdhz5zzy_l8ncW18U0ugKZ5i6_YfcAfob8TOvmg7yUN-H3v/s1280/demo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDteOUZou50mJn9ElJBlRNPMsnNvjcYLbtbtT3GEepdBJL2nwbgTkReKibtQJW5ZuMfjik9EPZPNzRBJGu5Q7uP67X6HAZqVNc2zCFuVaXc90RTRh0_yWo2sTjJpwr0Bd4jxQdck2HKhdhz5zzy_l8ncW18U0ugKZ5i6_YfcAfob8TOvmg7yUN-H3v/s16000/demo.jpg" /></a></div><br /><p><br /></p><span><a name='more'></a></span><p><br /></p><p>網站專案沒有方案檔案 (sln) 與專案檔案 (csproj 或 vbproj),所以無法使用 MSBuild 直接對這兩檔案進行編譯與發佈。對於網站專案,我們需要透過發佈檔案 (.publishproj) 進行持續整合動作。 </p><p>步驟 1. 開啟網站專案,右鍵點選網站,選擇 Publish Web App</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMyY3GglUr5FjSfyPomey2RYxWC0e4I5sSjBrWP3ZgUqUrVjkJZvtwtWfIRarPrPD5iFg2QiPGFbhfu2ydHo7Qcr_XPDC8o71VA2-lR-x-_JVIzLRHPXCYbA32dXRAT3nw1jmUz8cR9tLo0DAysJ47FIDiC_Ca7lwp5ncbjItnB-FpwCZJr2TwNB0H/s1368/301.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="740" data-original-width="1368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMyY3GglUr5FjSfyPomey2RYxWC0e4I5sSjBrWP3ZgUqUrVjkJZvtwtWfIRarPrPD5iFg2QiPGFbhfu2ydHo7Qcr_XPDC8o71VA2-lR-x-_JVIzLRHPXCYbA32dXRAT3nw1jmUz8cR9tLo0DAysJ47FIDiC_Ca7lwp5ncbjItnB-FpwCZJr2TwNB0H/s16000/301.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 2. 左邊選擇 Folder,輸入發佈路徑,點選右下方 Create Profile 按鈕建立發佈檔案</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWjSZEj3eJj34E1kJBVT5KLcyE5dCpH5GVJRgB1LGr3gxhbXsuFyrG5bdrPApw6fILXWJspyFmo5CVXnevAkZj773qQ79YnUWQN7xrXiHBTq2Fi5C3ttR5NxU66upd3V9axSjICE9TZ4vzVE3ORC9oNqt82s-4URqTbxLQ9AxHOkUNkJqTAUHho6cq/s1600/302.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWjSZEj3eJj34E1kJBVT5KLcyE5dCpH5GVJRgB1LGr3gxhbXsuFyrG5bdrPApw6fILXWJspyFmo5CVXnevAkZj773qQ79YnUWQN7xrXiHBTq2Fi5C3ttR5NxU66upd3V9axSjICE9TZ4vzVE3ORC9oNqt82s-4URqTbxLQ9AxHOkUNkJqTAUHho6cq/s16000/302.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 3. 您能在專案資料夾下找到您的發佈檔案 website.publishproj</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcnoPAvmQY2cv3x12bOeRv0cdbi2IziUx1FeIAYLWQin-tF0Lrs7RfRoZ82KWpGidXaEcsOa2vWgr5dbyzZ74eppGNNi1BmFwq1YXXnUawOd6zz1tNuoX8k13hYBKXbKHv8ClJgAagPW_lI473a0okgVhEtFlAdZYel_eZoDjq_FhjTKk7kSOi8nQx/s1278/303.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1278" data-original-width="660" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcnoPAvmQY2cv3x12bOeRv0cdbi2IziUx1FeIAYLWQin-tF0Lrs7RfRoZ82KWpGidXaEcsOa2vWgr5dbyzZ74eppGNNi1BmFwq1YXXnUawOd6zz1tNuoX8k13hYBKXbKHv8ClJgAagPW_lI473a0okgVhEtFlAdZYel_eZoDjq_FhjTKk7kSOi8nQx/s16000/303.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p>步驟 4. 將此檔案加入版本管理 (Git 或 TFVC),推送至 Azure Repository</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg1EnOPi7wHuKz1SLaoCnFUbZcYLwxBXnuVPbPX1ZuxORgBaCh3aNf5hmRXx6SDNALlVr_wGMD3zw0W7Mz2bzYpfQdLJDkNAFFUfZMLoUa4PTa_Rx8RZ560FucEKuLB3c3ou4ITHoTr1MS-7QL4R8rXkwJ5uQNhkRj55xxiVZVUbEZnnZ2j4KRj4PB/s1905/309.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="910" data-original-width="1905" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg1EnOPi7wHuKz1SLaoCnFUbZcYLwxBXnuVPbPX1ZuxORgBaCh3aNf5hmRXx6SDNALlVr_wGMD3zw0W7Mz2bzYpfQdLJDkNAFFUfZMLoUa4PTa_Rx8RZ560FucEKuLB3c3ou4ITHoTr1MS-7QL4R8rXkwJ5uQNhkRj55xxiVZVUbEZnnZ2j4KRj4PB/s16000/309.png" /></a></div><br /><p><br /></p><p><br /></p><p>步驟 5. 開啟 Azure Pipeline,點選右上角 New Pipeline 按鈕 </p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoJHJA4wdWzexlmc5ALXcDmx_kXoCh_k2-h5GWJ2Rf2vo6Or5jRI6SjDV7qOBXIlqRK_keOXQNWe_b8KMx6b-yETaiBjxSsW7eEgtmyhknc94Nj7yj_0tLqrmn42W8lPuFGYGzku8VJcnU0bQwzLA-I0U8CFc1ENKoNXcBVEBoJPxe5bHpWzNWadZ7/s2266/304.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1064" data-original-width="2266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoJHJA4wdWzexlmc5ALXcDmx_kXoCh_k2-h5GWJ2Rf2vo6Or5jRI6SjDV7qOBXIlqRK_keOXQNWe_b8KMx6b-yETaiBjxSsW7eEgtmyhknc94Nj7yj_0tLqrmn42W8lPuFGYGzku8VJcnU0bQwzLA-I0U8CFc1ENKoNXcBVEBoJPxe5bHpWzNWadZ7/s16000/304.png" /></a></div><div><br /></div><div><br /></div><div><br /></div>步驟 6. 選擇使用 YAML 或傳統編輯器,我們示範使用傳統編輯器<div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzPJ8pXvOx7f0YRGSTdTtMwPhS4U5Ah_lcz7XOdJmZRp1ts4j98WSFhtz5jMJqee5fWrkgXtqfGg9zJz1ebGfJbnD2o1vcHb0Esb3ih7yTpqi8FXGc6Fg79pqbU7HkoM0KfKNrbekiN62XiWZVmqP7Fg_tJjqiadhuAL6Hf6ckxBzcjtdEdAomdK3d/s1436/305.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1127" data-original-width="1436" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzPJ8pXvOx7f0YRGSTdTtMwPhS4U5Ah_lcz7XOdJmZRp1ts4j98WSFhtz5jMJqee5fWrkgXtqfGg9zJz1ebGfJbnD2o1vcHb0Esb3ih7yTpqi8FXGc6Fg79pqbU7HkoM0KfKNrbekiN62XiWZVmqP7Fg_tJjqiadhuAL6Hf6ckxBzcjtdEdAomdK3d/s16000/305.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 7. 選擇來源</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPFHIUa4qWYq8jyw7l-ltJFMzFoh6Xm-d_iXCb641TbuuXKQBFRbY6pVR98wLug9kZzjr-5HP5IkGg26GUrJ_Rc97r0kqPW3eC5KZgnmDpL0eRa0HHwzBflOQutwZ5D442olz35onRz1MnoWAHZQiUZ6-k-astToWb9S-0vMFyhFqey_wAY84nb1ZX/s1745/306.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1491" data-original-width="1745" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPFHIUa4qWYq8jyw7l-ltJFMzFoh6Xm-d_iXCb641TbuuXKQBFRbY6pVR98wLug9kZzjr-5HP5IkGg26GUrJ_Rc97r0kqPW3eC5KZgnmDpL0eRa0HHwzBflOQutwZ5D442olz35onRz1MnoWAHZQiUZ6-k-astToWb9S-0vMFyhFqey_wAY84nb1ZX/s16000/306.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 8. 樣板 (Template) 選擇 ASP.NET</div><div><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUUBaAOqkg9vHpiyMXYCgC3lRCuEs_1n1em1eub2CoxCRsUVCf80KaXzuxBFQvsFSQNQpL94q1pLB1pJPoezsN7DbOhzoHtEA0AqF2pjPByHW7q632N76940OBbNU4hn1Mkr9DlM1ZIfv6aEURrfZ4jieOJFmEUWO0AnkEkZV19MM3GDKJxN1CFpyH/s1186/307.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1125" data-original-width="1186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUUBaAOqkg9vHpiyMXYCgC3lRCuEs_1n1em1eub2CoxCRsUVCf80KaXzuxBFQvsFSQNQpL94q1pLB1pJPoezsN7DbOhzoHtEA0AqF2pjPByHW7q632N76940OBbNU4hn1Mkr9DlM1ZIfv6aEURrfZ4jieOJFmEUWO0AnkEkZV19MM3GDKJxN1CFpyH/s16000/307.png" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>步驟 9. 點選 Pipeline,將 Path to Solution or package.conifg 更改為 website.publishproj,完成後點選儲存並執行。</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUc-gZAssm8FAJylpsKrlcT1012Mz89Atlcc_l37GCduuQWNC2qKDgrVF-9yT1H_n3FCIrRtrqG8dIA4miGyK1Ajhszz8FBeqM-B-XL7Ya93oKeUU8MFr1lftZJk_yEFF6aIVKmvokQVwUuEHCNE3vBgWhByokETw_6GTggUuHGqIGcj_x_f8ut8wR/s1989/308.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1341" data-original-width="1989" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUc-gZAssm8FAJylpsKrlcT1012Mz89Atlcc_l37GCduuQWNC2qKDgrVF-9yT1H_n3FCIrRtrqG8dIA4miGyK1Ajhszz8FBeqM-B-XL7Ya93oKeUU8MFr1lftZJk_yEFF6aIVKmvokQVwUuEHCNE3vBgWhByokETw_6GTggUuHGqIGcj_x_f8ut8wR/s16000/308.png" /></a></div><div style="margin-left: 1em; margin-right: 1em; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><p><br /></p><p>步驟 10. 點選 NuGet Restore,更改 Package.config 位置</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMqlfrYN9uH0gxSnwLJEfNazr-BcMrPGhC_JxlTS_KqSzYshn7fxGnanUVR7w7HiHWhwaZrO4etOD_YDQpMol2cwxJKI9uv1qC3Jl77AKLh7cSng6Oe7h5stFjaxthEkzn97bXcU5Y9MtD7x6VFiNJz7XKCi4HqHFtbh9C8x9RA4ypziMbvDm7K6pz/s2667/310.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1741" data-original-width="2667" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMqlfrYN9uH0gxSnwLJEfNazr-BcMrPGhC_JxlTS_KqSzYshn7fxGnanUVR7w7HiHWhwaZrO4etOD_YDQpMol2cwxJKI9uv1qC3Jl77AKLh7cSng6Oe7h5stFjaxthEkzn97bXcU5Y9MtD7x6VFiNJz7XKCi4HqHFtbh9C8x9RA4ypziMbvDm7K6pz/s16000/310.png" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><p><br /></p><p><br /></p><p>步驟 11. 執行完成</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7vNRRkBK8E9CP1fU7xv075EPixAfPv7wuy3hYxblPt4M72DjT1Ehcv2-t19ngMoMNpWqYOJXK6BK7BOc-rNgLNSAExtlEtAJoT_gXx_c4KWKaecrI1CVEDhxfYL_NnqDznlQhmSBJMTzLhEzMPrJm_nrShHUdkRqF48VUpBcoZJsViQo3dBytwzgK/s1702/311.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1242" data-original-width="1702" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7vNRRkBK8E9CP1fU7xv075EPixAfPv7wuy3hYxblPt4M72DjT1Ehcv2-t19ngMoMNpWqYOJXK6BK7BOc-rNgLNSAExtlEtAJoT_gXx_c4KWKaecrI1CVEDhxfYL_NnqDznlQhmSBJMTzLhEzMPrJm_nrShHUdkRqF48VUpBcoZJsViQo3dBytwzgK/s16000/311.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p>步驟 12. 你可以點選剛剛執行的 Pipeline,檢視 Artifacts 內容,確認發布內容為正確的。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhym3Bz720BvvFBR1ufe6u0V8YrYohYb10IkXO0ThZjV-70B9egezKVkVoJ0LJjxWq-tgqyHmqbH25-ELdEAWwXZe1-pe0r8JuWNash1MiAtAtGdsie3aUJYsicUi4XQnUxOLoxzDJvcBEDvOgTkzmY3dlzFEk590fqTyxVMoG9aT_g30GEXkjr-LFA/s1507/312.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="825" data-original-width="1507" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhym3Bz720BvvFBR1ufe6u0V8YrYohYb10IkXO0ThZjV-70B9egezKVkVoJ0LJjxWq-tgqyHmqbH25-ELdEAWwXZe1-pe0r8JuWNash1MiAtAtGdsie3aUJYsicUi4XQnUxOLoxzDJvcBEDvOgTkzmY3dlzFEk590fqTyxVMoG9aT_g30GEXkjr-LFA/s16000/312.png" /></a></div></div><br />Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-40634336761696631832022-03-21T00:16:00.008+08:002022-03-21T00:37:25.994+08:00Azure DevOps Agent on MacOS 安裝流程說明 (Install MacOS Agent)<p>因為工作需求,需要安裝 Azure DevOps 代理程式在 MacOS 上,雖然官網上寫得相當簡單,但對於 MacOS 操作不熟還真是吃盡苦頭。剛好也遇到官方的 Issue,也一併紀錄短期解決方法。若您也有需求需要在 MacOS 上安裝代理程式,不妨可以參考這篇文章 </p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGSaPy-mUxKix3o5ptd8kXiej49untutcU_BO-0F4hASCawefRhC_ZRVVtt9-BMeTwH6_ngoQxoL1SZ2V5BSmypAhaWHImnWt2lSoybYhvMACbFp4bUFUnE9JtAKAQnVxR5e5YgOJD6tVgsE3XyUm9oZvLUSe0i7fJS3_VZjhHh8jO3yyIdjHYAiYc/s640/pixta_50038216_S%20-%20%E8%A4%87%E8%A3%BD.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="426" data-original-width="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGSaPy-mUxKix3o5ptd8kXiej49untutcU_BO-0F4hASCawefRhC_ZRVVtt9-BMeTwH6_ngoQxoL1SZ2V5BSmypAhaWHImnWt2lSoybYhvMACbFp4bUFUnE9JtAKAQnVxR5e5YgOJD6tVgsE3XyUm9oZvLUSe0i7fJS3_VZjhHh8jO3yyIdjHYAiYc/s16000/pixta_50038216_S%20-%20%E8%A4%87%E8%A3%BD.jpg" /></a></div><br /><p><br /></p><span><a name='more'></a></span><p><br /></p><h2 style="text-align: left;">前置工作</h2><p>1.<span style="white-space: pre;"> </span>macOS Sierra (10.12) 或更高版本</p><p>2.<span style="white-space: pre;"> </span>安裝 <a href="https://brew.sh/" target="_blank">Homebrew</a> (用於安裝相關套件,選擇性安裝)</p><p></p><blockquote>安裝指令:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"</blockquote><p></p><p>3.<span style="white-space: pre;"> </span>安裝 Git (2.9.0 版或更高版本)</p><p></p><blockquote>安裝指令:brew install git</blockquote><p></p><p>4.<span style="white-space: pre;"> </span>版控使用TFVC 需要<a href="https://www.oracle.com/java/technologies/downloads/" target="_blank"> Oracle JAVA JDK 1.6</a> 或更高版本</p><p>5.<span style="white-space: pre;"> </span>MacOS App 來源設定可能需要解鎖,否則設定過程中需要多此允許應用程式。設定方式如下:</p><p>系統偏好設定 > 安全性與隱私權 > 一般,有時候允許從以下來源下載的APP: 任何來源會被隱藏。</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1lGiLdGkpdhPGTnb5KmGa2jX3BYRMQParjpjMaH_1qVugNbYezvtWJnde-d8u70utKtGybPbryPZ2Q-F4pE8nE_n0XZ4Wvd2F0J4H2giViIF_CZMS2pwxHAaRea2OjUvay67I1Vc-QCaYIYCcuiWE3VjwFa0tOHhVXEthIK0jkqCtpORKPJlJYxTm/s554/004.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="489" data-original-width="554" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1lGiLdGkpdhPGTnb5KmGa2jX3BYRMQParjpjMaH_1qVugNbYezvtWJnde-d8u70utKtGybPbryPZ2Q-F4pE8nE_n0XZ4Wvd2F0J4H2giViIF_CZMS2pwxHAaRea2OjUvay67I1Vc-QCaYIYCcuiWE3VjwFa0tOHhVXEthIK0jkqCtpORKPJlJYxTm/s16000/004.png" /></a></div><br /><p></p><p><br /></p><p>若要將任何來源顯示出來,可以透過指令 sudo spctl --master-disable,輸入管理者密碼即可。</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_uMTI2VfjNwFhMRtHlUNET91IsEIwE6iytCqHtmSExRphStVG8t3rJy6duVgl2Idys_y64gr3PAgzNWQQNQltvFYimdqQ53VDJ2dli5qqHetXgnjZu7MY_UOWgxy0Fpyrydg9bVEHdSY_hVKRv-NqGTh-PDTR_bulR0b6RNB4jcLj-0TO8tScJwlt/s498/005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="110" data-original-width="498" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_uMTI2VfjNwFhMRtHlUNET91IsEIwE6iytCqHtmSExRphStVG8t3rJy6duVgl2Idys_y64gr3PAgzNWQQNQltvFYimdqQ53VDJ2dli5qqHetXgnjZu7MY_UOWgxy0Fpyrydg9bVEHdSY_hVKRv-NqGTh-PDTR_bulR0b6RNB4jcLj-0TO8tScJwlt/s16000/005.png" /></a></div><br /><p></p><p><br /></p><p><br /></p><p><br /></p><h2 style="text-align: left;">安裝步驟</h2><p>Step 1. 前往GitHub(microsoft/azure-pipelines-agent) 的Release下載最新版本的MacOS Agent</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhvPMhfWn1mxqcXg9HSpDD55NMn6zFSKk30ta0H-Ieo-822wCOOUkee5VnTsPaRO__BtKfk3etj3AG3IPjkJji7hnLf2Fmxh75q_BLF4BBjXQtUvdI_-dLUqr5av3Vq9OncNJDMDgqrVULFYGBDEsL46BKZtwCmVgXjV6hLRsNqa5dubjJ1TfEX8ab/s941/003.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="640" data-original-width="941" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhvPMhfWn1mxqcXg9HSpDD55NMn6zFSKk30ta0H-Ieo-822wCOOUkee5VnTsPaRO__BtKfk3etj3AG3IPjkJji7hnLf2Fmxh75q_BLF4BBjXQtUvdI_-dLUqr5av3Vq9OncNJDMDgqrVULFYGBDEsL46BKZtwCmVgXjV6hLRsNqa5dubjJ1TfEX8ab/s16000/003.png" /></a></div><p></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwmYwPV76HZskDgIhrcmHFMMthpjuKR_XpJFCsXj8q8eBqCCAOIOphjvE41YsoPqQdwFOnZ6iaKp91cqdFXpjKoV0HpGkyzL9piDvIR-z30pRgxNQpXL94h7uFSOu7ufQy3_9rqcA7auM3VKXbe1vbKm8sw65JzCZlCUMWZMawFUp3jrU0epD_UEin/s806/002.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="479" data-original-width="806" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwmYwPV76HZskDgIhrcmHFMMthpjuKR_XpJFCsXj8q8eBqCCAOIOphjvE41YsoPqQdwFOnZ6iaKp91cqdFXpjKoV0HpGkyzL9piDvIR-z30pRgxNQpXL94h7uFSOu7ufQy3_9rqcA7auM3VKXbe1vbKm8sw65JzCZlCUMWZMawFUp3jrU0epD_UEin/s16000/002.png" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><p><br /></p><p><br /></p><p>Step 2. 下載完成後,開啟終端機,依序輸入下列指令</p><p>mkdir myagent && cd myagent</p><p>tar zxvf ~/Download/<下載檔案名稱></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj41Sdqe4GzdPeq3SOMbw8E8pLBvfNHnmtUWauV4P8CO5PzvI9EP1N1FsLFil6sIgvgsurQL6gxS1apcNzJfnEKPSEhpetVmcsxDS26sokeqMhJYYgtNIwS_MV5DZ_y4joOwyxmTyKDwLWTwaBeZBYwttvxfU7eV-48A8e7C9SZLUp1quOK7od02Qx7/s712/006.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="485" data-original-width="712" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj41Sdqe4GzdPeq3SOMbw8E8pLBvfNHnmtUWauV4P8CO5PzvI9EP1N1FsLFil6sIgvgsurQL6gxS1apcNzJfnEKPSEhpetVmcsxDS26sokeqMhJYYgtNIwS_MV5DZ_y4joOwyxmTyKDwLWTwaBeZBYwttvxfU7eV-48A8e7C9SZLUp1quOK7od02Qx7/s16000/006.png" /></a></div><br /><p>上面的指令分別為建立資料夾、切換目錄與解壓縮,下載檔案名稱可以輸入vsts後,使用tab建自動完成</p><p> </p><p><br /></p><p><br /></p><p><br /></p><p>Step 3. 撰寫此份文件時,2.200版本 MacOS Agent 若使用negotiate驗證方式會有問題,需要設定環境變數:</p><p>export AZP_AGENT_USE_LEGACY_HTTP=true</p><p>MacOS 不支援整合驗證;ALT驗證不能使用;若您使用 PAT 驗證,可以跳過此步驟。</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvqIL9Nzls6aeQSFX31K522VpcEZKtTbXF6fLuOJFWHSVf0Kq-aXDslU04QIvkiUBwYOqtvLdwyGRo3nBIbqC5iuMHDcqMmNtvpplm3nycyMjNdf9Pbt3pYgH2iDwfcOLcizEbpkyW7Txr715s0At4wsGRpZsX3iHmf2vy_TWzE7vM6FBZqMhJ4_b7/s710/009.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="489" data-original-width="710" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvqIL9Nzls6aeQSFX31K522VpcEZKtTbXF6fLuOJFWHSVf0Kq-aXDslU04QIvkiUBwYOqtvLdwyGRo3nBIbqC5iuMHDcqMmNtvpplm3nycyMjNdf9Pbt3pYgH2iDwfcOLcizEbpkyW7Txr715s0At4wsGRpZsX3iHmf2vy_TWzE7vM6FBZqMhJ4_b7/s16000/009.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p>Step 4. 輸入 ./config進行設定,依據實際情況設定,可以參考下圖</p><p>1.<span style="white-space: pre;"> </span>使用TFVC 需要同意條約</p><p>2.<span style="white-space: pre;"> </span>Azure DevOps Service/Server/TFS 伺服器位置</p><p>3.<span style="white-space: pre;"> </span>認證方式 (本範例使用Negotiate,雲端版本可以使用PAT方式)</p><p>4.<span style="white-space: pre;"> </span>使用者帳號密碼</p><p>5.<span style="white-space: pre;"> </span>代理程式集區</p><p>6.<span style="white-space: pre;"> </span>代理城市名稱</p><p>7.<span style="white-space: pre;"> </span>資料夾 (使用預設)</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjADqhvWFXEEzww9oI5FzC2V5jCX_Ix3MP-t963bJc5dARcJ5BXeIRXcCBK3b6kKuVSXiK-p-NUoA01foDWWqa_vsjUqgj2AjCiCNcIF-wnmrG3tbjEhfsdU2TQBdLNHnoTBco6SphLzPzibn6vomoBz_2X5UjGeRdQ65vpVmRAb6gb-rVAOFQMeloR/s710/008.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="489" data-original-width="710" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjADqhvWFXEEzww9oI5FzC2V5jCX_Ix3MP-t963bJc5dARcJ5BXeIRXcCBK3b6kKuVSXiK-p-NUoA01foDWWqa_vsjUqgj2AjCiCNcIF-wnmrG3tbjEhfsdU2TQBdLNHnoTBco6SphLzPzibn6vomoBz_2X5UjGeRdQ65vpVmRAb6gb-rVAOFQMeloR/s16000/008.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p>步驟 5. 安裝完成後,記得以服務方式啟動,以後重新啟動電腦就不需要手動啟動。輸入指令 ./svc.sh install 註冊服務,然後輸入 ./svc.sh start啟動服務</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPXvwWuxk9fJ_OIE1QJqg81MLe5edYHyRcXnAAUShXjkOJQO6O2kCSgOKKwvrbzuVyaiEUp4mGFOxEx6130-tTRVmMnD0MOVtr9UOzwNQWNGAnllEGOodQC5XOxTjIMGXqkWDZXBMVSHcntQGSDQR8prHhfEkIn6zSHMicUw5cUoseVihh6S5pBN3E/s473/010.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="310" data-original-width="473" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPXvwWuxk9fJ_OIE1QJqg81MLe5edYHyRcXnAAUShXjkOJQO6O2kCSgOKKwvrbzuVyaiEUp4mGFOxEx6130-tTRVmMnD0MOVtr9UOzwNQWNGAnllEGOodQC5XOxTjIMGXqkWDZXBMVSHcntQGSDQR8prHhfEkIn6zSHMicUw5cUoseVihh6S5pBN3E/s16000/010.png" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p>步驟 6. 完成代理程式安裝</p><p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVycd_J64vrpdhgOLFwL3rNu_-SlR4Q5YlEK1bPHvEIe7HOB1guG22ymdBrixIvX22cHXyScY2kTGGNo4o0ZIAu7W7jp6dTfUiU6y16qGxiTSyTeZPZNg63rpLIyvqgiZ6b24-y8xHfbkCppDTIi2hI8107ZOm3fQYyQaWHNKVdTHFzDvMgCNyrChq/s447/011.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="183" data-original-width="447" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVycd_J64vrpdhgOLFwL3rNu_-SlR4Q5YlEK1bPHvEIe7HOB1guG22ymdBrixIvX22cHXyScY2kTGGNo4o0ZIAu7W7jp6dTfUiU6y16qGxiTSyTeZPZNg63rpLIyvqgiZ6b24-y8xHfbkCppDTIi2hI8107ZOm3fQYyQaWHNKVdTHFzDvMgCNyrChq/s16000/011.png" /></a></div><br /><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-41124206468477561232022-03-08T13:56:00.003+08:002022-03-08T14:07:59.087+08:00Playwright .NET 語法技巧 - 指定瀏覽器、等待網頁讀取完成、處理警告對話框、取得 Response Body 與驗證網頁上的元素<p>PlayWright 是一套非常方便的測試工具,支援 .NET、Java、Nodejs 與 Python。語法相當完整,錄製功能也相當方便,幾乎可以直接放入測試程式內直接執行。但錄製的腳本可能因為情境或需求需要調整,這個時候就不得不要自行修改程式內容了。本篇文章提供四個常見 Playwright 語法:</p><p></p><ol style="text-align: left;"><li>指定瀏覽器</li><li>等待網頁讀取完成</li><li>處理警告對話框</li><li>取得 Response 內 Body 內容</li><li>驗證網頁上元素</li></ol><p></p><p><br /></p><p>熟悉這些基本語法,讓您在改寫腳本時更加得心應手。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://staticwebapp.azureedge.net/staticweb/tech-login.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="530" data-original-width="800" height="530" src="https://staticwebapp.azureedge.net/staticweb/tech-login.jpg" width="800" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><span><a name='more'></a></span><p><br /></p><p></p><blockquote>若您還沒使用過 PlayWright 進行測試,可以參考這篇文章:<a href="https://dog0416.blogspot.com/2021/12/playwright-for-net-end2end.html" target="_blank">使用 playwright for .NET 進行 End2End 網頁測試</a></blockquote><a href="https://dog0416.blogspot.com/2021/12/playwright-for-net-end2end.html" target="_blank"></a><p></p><p><br /></p><p><br /></p><p><br /></p><h3 style="text-align: left;">指定瀏覽器</h3><p>當我們要開啟指定瀏覽器進行測試時,可以使用 playwright.[瀏覽器選項].LaunchAsync() 語法。瀏覽器選項包含:</p><p></p><ol style="text-align: left;"><li>Chromium</li><li>Firefox</li><li>WebKit</li></ol><p></p><p>其中,您如果需要指定使用 Edge 或 Chrome,BrowserTypeLaunchOptions 需要指定 Channel,其參數包含:"chrome", "chrome-beta", "chrome-dev", "chrome-canary", "msedge", "msedge-beta", "msedge-dev", "msedge-canary"。</p><p>以啟動 Edge 為例,其程式碼如下</p><p><br /></p><script src="https://gist.github.com/matsurigoto/d0ec59970cec70f2986bbed82b608161.js"></script><p><br /></p><p><br /></p><p>如果要啟動 WebKit (),只需要下列語法即可</p><p><span style="color: red;">var browser = await playwright.Webkit.LaunchAsync();</span></p><p><br /></p><p><br /></p><p><br /></p><h3 style="text-align: left;"><br /></h3><h3 style="text-align: left;">等待網頁讀取完成</h3><p>如果遇到網頁上有需要讀取等待的需求 (如: 前端呼叫API在渲染畫面、動態下拉選單),常常會發生 Playwright 執行到一半卡住。主要原因是讀取時間造成:畫面尚未完成,腳本卻已經執行,造成執行失敗。這個時候的測試偶爾好偶爾壞,會嚴重影響測試正確性。為了避免這種情況,您可以使用 WaitForLoadStateAsync 來解決這個問題,他會等待到 Lord event 結束後在執行後續動作。 (更多語法可以參考:<a href="https://playwright.dev/dotnet/docs/api/class-page#page-wait-for-load-state" target="_blank">https://playwright.dev/dotnet/docs/api/class-page#page-wait-for-load-state</a>)</p><p><br /></p><p><span style="color: red;">await page.WaitForLoadStateAsync();</span></p><p><br /></p><p><br /></p><p><br /></p><h3 style="text-align: left;"><br /></h3><h3 style="text-align: left;">處理警告對話框</h3><div>網頁操作行為可能會遇到彈出的警告訊息,您可能需要關閉或同意。主要語法為為 dialog.AcceptAsync() 或 dialog.CloseAsync()。我們會透過 EventHandler 來處理,處理結束後再移除。</div><div><br /></div><div><script src="https://gist.github.com/matsurigoto/441259fdfc75df75f0e6f55c9920b772.js"></script></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">取得 Response 內 Body 內容</h3><div>在執行過程中,有可能需要呼叫其他 API 並取得資料,才能繼續執行。這個時候可以使用 <span style="color: red;">RunAndWaitForResponseAsync</span> 語法,第一個參數為執行動作 (範例為點畫面上按鈕),第二個參數為呼叫的 URL。接下來,您可以使用 <span style="color: red;">TextAsync()</span> 取得 Body 文字內容 (範例中為 JSON 文字,所以使用 Parser 取得內容)。</div><div><br /></div><div><script src="https://gist.github.com/matsurigoto/606d1327ed188aad823c8b55c468b26f.js"></script></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><h3 style="text-align: left;">驗證網頁上元素</h3><div>取得網頁上元素方式很多,包含:</div><div><div><ol style="text-align: left;"><li><a href="https://playwright.dev/dotnet/docs/api/class-page#page-inner-html" target="_blank">Page.InnerHTMLAsync(selector, options)</a></li><li><a href="https://playwright.dev/dotnet/docs/api/class-page#page-inner-text" target="_blank">Page.InnerTextAsync(selector, options)</a></li><li><a href="https://playwright.dev/dotnet/docs/api/class-page#page-inner-text" target="_blank">Page.InputValueAsync(selector, options)</a></li></ol></div></div><div><a href="https://playwright.dev/dotnet/docs/selectors" target="_blank">Selector </a>即為選擇器,再 PlayWright 上有許多選擇器可以使用,包含 CSS Selector。個人偏好使用 CSS 選擇器,所以下列範例為使用 CSS 選擇器。</div><div><br /></div><div>options 可以為空值。其參數有兩種</div><div><br /></div><div><b>Strict <bool?>: 選擇器解析出來只能一個元素,如果有多個會發生錯誤</b></div><div><b>Timeout <double?>: 逾時時間,預設為30秒</b></div><div><br /></div><div>您可以取得元素內容後,在測試程式使用斷言,確定內容正確</div><div><br /></div><div><script src="https://gist.github.com/matsurigoto/56dcbc63e65334d540960203959d218e.js"></script></div><div><br /></div><div><br /></div>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0tag:blogger.com,1999:blog-2795504565252173821.post-13359281080941902072022-02-17T22:02:00.000+08:002022-02-17T22:02:23.422+08:00如何將既有 dll 檔案封裝為 Nuget Package<p>早期的 .NET 開發方式常常以直接加入 dll 參考方式,來取得既有功能,但隨著專案發展與團隊成員來來去去,在沒有良好的管理機制下,這些 dll 檔案可能會變成孤兒,無從得知其版本與是否可用。另外,也遇到客戶因為 dll 沒有放置在良好的參考路徑,輕則導致專案經過搬移後,每次編譯都必須耗時費力解決問題,重則影響到部署程序,反而成為公司內部系統維護的負擔。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjzNvGmjs1a3bL6rifJIpn-zPTLBgfCSUOCVn3IPrVUK4JbM3Mg1b2JKrbp-xlcieYfhgnKGjuCZc8yL74G2fPIxVKG2qGjyfXK_TGCU3gw1vgnCPndufvU3_bwvYlX6GMPHusono-gl1dO3tDtozstBUKRUp3lpn1hy_qxdTdjX8dSNJigsfwe51n1=s2000" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1324" data-original-width="2000" src="https://blogger.googleusercontent.com/img/a/AVvXsEjzNvGmjs1a3bL6rifJIpn-zPTLBgfCSUOCVn3IPrVUK4JbM3Mg1b2JKrbp-xlcieYfhgnKGjuCZc8yL74G2fPIxVKG2qGjyfXK_TGCU3gw1vgnCPndufvU3_bwvYlX6GMPHusono-gl1dO3tDtozstBUKRUp3lpn1hy_qxdTdjX8dSNJigsfwe51n1=s16000" /></a></div><p><br /></p><span><a name='more'></a></span><p><br /></p><p>在開發期間,以參考專案方式是安全的,隨時間其方案內部共用元件趨近穩定時,個人會建議打包成 Package,透過 NuGet 方式維護是比較好的做法 (可在公司內部建立 NuGet Server)。明確的可用版本與透過 NuGet 相依性處理可以解決 dll 管理問題。本篇文章將簡單介紹如何將 dll 包裝成 NuGet,若有錯誤或任何建議請各位先進不吝提出。</p><p><br /></p><p>首先,我們需要下載 NuGet Package Explorer。在 Windows 10 或 Windows 11 可以透過 Windows Store 進行下載,你可以點選開始 > 找到 Windows Store</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhdHZVcdD7kwMNh2Q4CySzp2bCc2VkD9KW41Jjm_DYkhH8Hs6ebzNk-JnLWyapfDj_gloT4KSedf-toaZ4q8NU1jNqeKHn9iPGySqgM9Uzbon2JMchy1Vy0gMmcUUvvMaPLJz5qUamEQX4ApfLEPrkuIY_Hcc21NCTImU2ae6X2ixw6waS2ovSN96lY=s1568" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1568" data-original-width="1409" src="https://blogger.googleusercontent.com/img/a/AVvXsEhdHZVcdD7kwMNh2Q4CySzp2bCc2VkD9KW41Jjm_DYkhH8Hs6ebzNk-JnLWyapfDj_gloT4KSedf-toaZ4q8NU1jNqeKHn9iPGySqgM9Uzbon2JMchy1Vy0gMmcUUvvMaPLJz5qUamEQX4ApfLEPrkuIY_Hcc21NCTImU2ae6X2ixw6waS2ovSN96lY=s16000" /></a></div><br /><p><br /></p><p><br /></p><p>上方搜尋框輸入 NuGet Package Explorer,點選右邊按鈕進行安裝(若已經安裝,可以直接開啟)</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjhZyUWLz2rRjLel7-qtDrD7vrHYuxLbbH369WE4IxJGh0enLwUFMFIohG7pB_OBgcJrllUOK2x1BzhHqANWg2f3599uVqvZKpAEk29NDWMAahCSQxFHUH6kXaFFU3HPasywGLHMV8a9fUCVm_rBShsS6tBvL_4Wu3cf94dBzgHCrO7G-EVJsPLhxw-=s2134" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1480" data-original-width="2134" src="https://blogger.googleusercontent.com/img/a/AVvXsEjhZyUWLz2rRjLel7-qtDrD7vrHYuxLbbH369WE4IxJGh0enLwUFMFIohG7pB_OBgcJrllUOK2x1BzhHqANWg2f3599uVqvZKpAEk29NDWMAahCSQxFHUH6kXaFFU3HPasywGLHMV8a9fUCVm_rBShsS6tBvL_4Wu3cf94dBzgHCrO7G-EVJsPLhxw-=s16000" /></a></div><br /><p><br /></p><p><br /></p><p>開啟 NuGet Package Explorer ,已經預設開啟 Package (左邊視窗有相關資訊),你可以點選編輯按鈕更改相關資訊。</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjDa_yXoWiPhJRI6CEuj9rvcH87piDa2qIwLyUxu6PLvMgIamZf28KK8-b836d0-7hwyMr2KTshL4T4srRDTvNKAb4I3az_x0ZLNAVq2AZm-Pnd0A2K0sdlJBujaVJ4Mc01L0XY17lpbDkTq7a7HsRyPCdsstMWVlptASwb8EtgjDatMaGWXV9UX2jB=s1478" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1289" data-original-width="1478" src="https://blogger.googleusercontent.com/img/a/AVvXsEjDa_yXoWiPhJRI6CEuj9rvcH87piDa2qIwLyUxu6PLvMgIamZf28KK8-b836d0-7hwyMr2KTshL4T4srRDTvNKAb4I3az_x0ZLNAVq2AZm-Pnd0A2K0sdlJBujaVJ4Mc01L0XY17lpbDkTq7a7HsRyPCdsstMWVlptASwb8EtgjDatMaGWXV9UX2jB=s16000" /></a></div><div><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhfSZjVRymWW6zis9FjEPAe3uiWJfW2f6LAP9pS_N9XFCfe6WYnZTNwQtbRoWI1OsecSpHAZpvxmKclbfecxYQfcPhKgN2oEoH8PXuRuTPceS62rGi7rqoEufvzEluI5-cbdZbZerAQT6I2JASHC47xYpqdsP4MEq6Xq7FtioAnZQxMpo83oVaqZ5jB=s1478" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1289" data-original-width="1478" src="https://blogger.googleusercontent.com/img/a/AVvXsEhfSZjVRymWW6zis9FjEPAe3uiWJfW2f6LAP9pS_N9XFCfe6WYnZTNwQtbRoWI1OsecSpHAZpvxmKclbfecxYQfcPhKgN2oEoH8PXuRuTPceS62rGi7rqoEufvzEluI5-cbdZbZerAQT6I2JASHC47xYpqdsP4MEq6Xq7FtioAnZQxMpo83oVaqZ5jB=s16000" /></a></div><br /><p><br /></p><p><br /></p><p>更改完成後,我們開始加入要打包的 dll。首先我們先右鍵點選右邊的視窗,選擇 Add Folder</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhbjwZMRS7Fhl3gtPENShMhuCie3e6jAE-S2KCm6136efjoy1tQatoXAFEEOY1UuPlP1PfomDG20v-AtZTo9f6Lisjz8ToVhWEr1jHJCpaH2gb6-hm45dNNOz4hV-5U8nem59ImPXWLUQ8FG2rUJpV_Yr1khlA5D4OsKyHj7smP3qH3hw7WMHi_b4xk=s1471" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1288" data-original-width="1471" src="https://blogger.googleusercontent.com/img/a/AVvXsEhbjwZMRS7Fhl3gtPENShMhuCie3e6jAE-S2KCm6136efjoy1tQatoXAFEEOY1UuPlP1PfomDG20v-AtZTo9f6Lisjz8ToVhWEr1jHJCpaH2gb6-hm45dNNOz4hV-5U8nem59ImPXWLUQ8FG2rUJpV_Yr1khlA5D4OsKyHj7smP3qH3hw7WMHi_b4xk=s16000" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div><br /></div><div><br /></div><div>輸入資料夾名稱</div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiAZBCAng2HsjawyUFq1AZJT42ZSxt4G_41Cb_-8DcbEjlAQeC7cEGnSKZuQ54VMro3n3ipKwf3FPAhHZRHeTI7sdd6qFoEdYPn-NmK4kk3ITOyOSkmbuIDy0JC8gOrs9wcF6rf1eqwh-ixyEmdEIuARkX4hyBciAjHU4jQ-CjZN5ddLmdUe-Sl6Dbg=s658" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="366" data-original-width="658" src="https://blogger.googleusercontent.com/img/a/AVvXsEiAZBCAng2HsjawyUFq1AZJT42ZSxt4G_41Cb_-8DcbEjlAQeC7cEGnSKZuQ54VMro3n3ipKwf3FPAhHZRHeTI7sdd6qFoEdYPn-NmK4kk3ITOyOSkmbuIDy0JC8gOrs9wcF6rf1eqwh-ixyEmdEIuARkX4hyBciAjHU4jQ-CjZN5ddLmdUe-Sl6Dbg=s16000" /></a></div><br /><p><br /></p><p><br /></p><p><br /></p><p>右鍵點選資料夾,點選要加入特定版本的 Folder。在這裡我們加入 .NET Framework dll,所以選擇 Add .NET Framework Folder,並選擇特定版本</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEga7NiIWADHC6XaJ8RnJb_jYFkbTRKyYEmxROQFJSlGyJlF0cZU1LVovo7JBaXi6w0s0m2G7l_MAZaWzgvKTGHaJOAOpuX9B-jZDkLxVeQbQZQUc6HcfM5vHr0lyoGHvDssegSAgQV6lalNBAH_tS5drS8ysg_crCrC0XrB451nc8rfFDmlDzkMFrED=s1541" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1284" data-original-width="1541" src="https://blogger.googleusercontent.com/img/a/AVvXsEga7NiIWADHC6XaJ8RnJb_jYFkbTRKyYEmxROQFJSlGyJlF0cZU1LVovo7JBaXi6w0s0m2G7l_MAZaWzgvKTGHaJOAOpuX9B-jZDkLxVeQbQZQUc6HcfM5vHr0lyoGHvDssegSAgQV6lalNBAH_tS5drS8ysg_crCrC0XrB451nc8rfFDmlDzkMFrED=s16000" /></a></div><br /><p><br /></p><p><br /></p><p>右鍵點選 .NET Framework 資料夾,選擇 Add Existing File ...,選擇要加入的 dll 檔案</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiIKS0KfWw9kJTB1y3zULJ_PlVXubZmCWZ7zMtML6oux1k9ezRiTeY_4Qey9-C-8Havb2nXTlkBcWekOVQTNb5kRnmbJRWiETUpOkjZww6sr7CZ0qoE36YhVuZUFs-r3d4vyrkRMDUBNaEm6-_L4FID6JFjisDECJtIvtzXT1ZrjhNgWGUvNrSwSC8g=s1470" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1283" data-original-width="1470" src="https://blogger.googleusercontent.com/img/a/AVvXsEiIKS0KfWw9kJTB1y3zULJ_PlVXubZmCWZ7zMtML6oux1k9ezRiTeY_4Qey9-C-8Havb2nXTlkBcWekOVQTNb5kRnmbJRWiETUpOkjZww6sr7CZ0qoE36YhVuZUFs-r3d4vyrkRMDUBNaEm6-_L4FID6JFjisDECJtIvtzXT1ZrjhNgWGUvNrSwSC8g=s16000" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgCWDbEsNC3I14Mj8AybSAwOTm-ILLtOIPsUuFOLltHoHOL7Ex1f6-Y4bBgOcTqHksXLT-VOH6OFtNZD4tT5LYGOj4kC10iYYLBI6V-6Vju10ZyZLSmYfof-aMdycXoATzgV1cXzrD16WI55cN14gW3tDmfspL-aYVKdjD6S8SdeKO8jWjhwRI6jVNe=s1478" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1289" data-original-width="1478" src="https://blogger.googleusercontent.com/img/a/AVvXsEgCWDbEsNC3I14Mj8AybSAwOTm-ILLtOIPsUuFOLltHoHOL7Ex1f6-Y4bBgOcTqHksXLT-VOH6OFtNZD4tT5LYGOj4kC10iYYLBI6V-6Vju10ZyZLSmYfof-aMdycXoATzgV1cXzrD16WI55cN14gW3tDmfspL-aYVKdjD6S8SdeKO8jWjhwRI6jVNe=s16000" /></a></div><br /><p><br /></p><p><br /></p><p>完成加入後,點選檔案 > 儲存,將打包好的 ngpkg 儲存好,事後上傳至 NuGet 或 NugGet Server 即可。</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgXhFA4WFj696Kvxs8L9PElGFovRqVcof1I4y9RXlQFqHJslwxbadJriUYhpDbKY6fWlPqlhYYvLeO5FOMnxCpAkIeKaGLRUXLUS6ANDcCyXgRFr5v0qi-XXEvJU5Lfda6RRHwBs1TSR2wV6cp9AC8gHMVVzPYOsDlLnhO_ZJLshmh6XymSYB362SFz=s1480" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="1480" src="https://blogger.googleusercontent.com/img/a/AVvXsEgXhFA4WFj696Kvxs8L9PElGFovRqVcof1I4y9RXlQFqHJslwxbadJriUYhpDbKY6fWlPqlhYYvLeO5FOMnxCpAkIeKaGLRUXLUS6ANDcCyXgRFr5v0qi-XXEvJU5Lfda6RRHwBs1TSR2wV6cp9AC8gHMVVzPYOsDlLnhO_ZJLshmh6XymSYB362SFz=s16000" /></a></div><div><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiJEXB53jV5hDWPPAs660zlffdrnCZzbMyr1PCczjGB87iqRNnDxPO2rODbjQLxuSPhZGTXgP5tNbYvoMPfJIdgTawzzEB2UyAWbdgfzzcbhO_3Js-P7a_Jds2NHI_jumplf7Bylilo1TeM6YvzYkEHQvrXSejeajYRx-BAkEzkmXbq0ZMYD7k4LiMR=s1598" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1069" data-original-width="1598" src="https://blogger.googleusercontent.com/img/a/AVvXsEiJEXB53jV5hDWPPAs660zlffdrnCZzbMyr1PCczjGB87iqRNnDxPO2rODbjQLxuSPhZGTXgP5tNbYvoMPfJIdgTawzzEB2UyAWbdgfzzcbhO_3Js-P7a_Jds2NHI_jumplf7Bylilo1TeM6YvzYkEHQvrXSejeajYRx-BAkEzkmXbq0ZMYD7k4LiMR=s16000" /></a></div><p><br /></p>Duran Hsiehhttp://www.blogger.com/profile/11107578319408050628noreply@blogger.com0