SlideShare a Scribd company logo
1 of 81
Artifacts Management
with CI&CD
Blackie Tsai
Hi! I am Blackie
• Technical Architect
• Microsoft MVP 2017 – Present
• 2018 iT 邦幫忙鐵人賽
• DevOps組冠軍
• 最佳團隊(XY動手不動口)
• 大內攻城 (Software Engineering in .NET)
- Organizer
• Study4.tw - Core Member
• Speaker on .NET Conf 2017 & 2018,
GCPUG.TW, etc.…
今天想與大家分享…
Software Artifacts
Artifacts Management Tools
Artifacts Management with Continue Integration
Artifacts Management with Continue Deployment
Special thanks to
• https://itunes.apple.com/tw/developer/wang-ming-ren/id1294969400
Ming-Ren Wang (aka Hotdog Wang)
輕鬆考駕照
默背模式讓你無腦背題庫
NS大買家
Switch 買遊戲的最佳幫手
• https://www.linkedin.com/in/ming-jen-wang-027a5368
• Nexus Artifacts Management
• Jenkins, Continue Integration
• Docker, Container
• Selenium, MS Test, Load Testing
• iOS, Sketch
先破題
持續交付的意義在於
效率提升
可靠的質量
安全牢固的產出
有效的團隊協作
透明的流程
Software Artifacts
什麼是 Artifacts
An artefact is an ornament, tool, or other object
that is made by a human being.
是由人類製造的人工製品,如裝飾品,工具或其他物體。
什麼是 Software Artifacts
Software Artifact 是在軟體開發過程中產
生的副產品。可能包含項目源代碼,依賴
項,二進製文件或資源,並且可以根據技
術以不同的佈局表示。
通常存儲在 Repository 如 npm registry, d
ocker hub 等,可以讓團隊之間共享更為方
便。
編譯 (Compiling)、打包 (Packing) 、加工(Processing)
原始碼
(Source Code)
產出物
(Artifacts)
產出物類型
Library/Package
程式於開發時所引用
的第三方或自身獨立
部分功能的產出物
Application Build
原始碼經過編譯或是
打包所參考產出物
Any Binary File
任何一個與開發或商
業運作有關的產出物,
如設計文件或素材大
檔
Image File
建置環境所需的映像
檔案
Deployment Profile
部署所需的設定配置
檔
這些都是產出物
什麼是 Artifacts Repository
是一個存儲位置,其中包含 packages, libraries, binaries, or containers 等組件,以便
可以安裝或使用它們.使用已經開發好的部分產出,延續開發商務應用可有效加速開發
的產出、縮短時程並收斂改變的變更處.不同的開發語言或是工具有自己的管理工具:
Java
Central Repository(Maven Central)
.NET
NuGet Gallery
Python
Pypi.org
Ruby
RubyGems.org
JavaScript
Npmjs.org
Linux
YUM
Container
hub.docker.com
Kubernetes
helm.sh
以自身開發環境為例
目前團隊使用的技術與環境
• OS
– macOS, CentOS
• Service
– C#, .NET Core
• Presentation - Web
– JavaScript, React
• Provisioning
– Container, Docker
• Deployment
– K8s, Helm
• Version Control
– Git, Gitlab
Artifacts Management
MyApp
Git LFS
Packages ContainerOS Deployment
Artifacts of Software Development
最害怕的交付是哪些?
• 原始碼直接部署與修改
• 配置設定與原始碼強耦合
– 修改不易
– 對應不同的環境有不同的配置
• 當次部署有問題,經過一番處理成功部署了,但不知道怎麼被修好的
• 部署流程有工具自動完成,但如果多一個新環境或流程則需要全部重寫
• 內外交付溝通沒有標準語言
https://www.pinterest.com/pin/370702613054573734/
在其他環境開發時…
https://www.pinterest.com/pin/354095589444668688/
在其他環境部署時…
出自笑傲江湖2:東方不敗
需要讓人手動修改/操作
就一定會出錯
Artifacts 的目的是讓開發與交付
變得更簡易, 不易出錯且更具彈性
舉例來說
Artifacts Management
MyApp
Git LFS
Packages ContainerOS Deployment
yum yum
npm, NuGet
yum
npm, NuGet
MyApp
yum
npm, NuGet
MyApp
yum
npm, NuGet
MyApp
yum
npm, NuGet
MyApp
在剛剛這個例子裡
問題:
開發人員正在一遍又一遍地下載相同的組件,降低生產速度並降低建
置的性能。
解決辦法:
改用 Artifacts Repository Management Tool ,協助減輕與開源/第三方
組件使用相關的緩慢下載。並開始考慮建立於組織內的存儲庫配置與
改善開發與部屬流程的強化.
Artifacts Management Tools
Artifacts Repository
Management Tool
• 是一個集中管控各種不同類型 Repository
的系統,可用來建立開發團隊間更加的協
同開發基礎
• 藉由更廣泛的軟件和基於本地端的套件發
佈,提高架構與開發的性能與變更控制
• 減少網絡帶寬和對遠程存儲庫的依賴
• 保護您的公司免受互聯網中斷,公共存儲
庫中斷(Maven Central, npm, nuget, dock
er hub 等),甚至刪除開源組件。
Cloud Host V - -
On-premise Host(Container) V V V
Repositories Excellent* Well Limited**
Searchability / Flexibility Excellent Limited -
Interactions - REST API +
Tools
Excellent Well Limited
LDAP V V V
Users/Groups and Roles Well Well Excellent
Storage Backends Local
Storage
Local Storage
and S3
Local Storage, S3
and Azure Storage
https://www.praqma.com/stories/artifactory-nexus-proget/
* Jfrog OSS only supports : Maven, Gradle and Ivy
** ProGet supports : Powershell, Chocolatey, VSIX, etc…
• Maven Repositories
• Raw Repositories and Maven Sites
• .NET Package Repositories with NuGet
• Node Packaged Modules and npm Registries
• PyPI Repositories
• Ruby, RubyGems and Gem Repositories
• Bower Repositories
• Yum Repositories
• Git LFS Repositories
• Private Registry for Docker
• Go Package Repositories with vgo*
• Helm Repositories for K8s*
* Community Support only
我選用
Nexus Repository Manager
FREE to use!
FREE to use!
FREE to use!
Install Nexus with Docker
• Pull image
$ docker pull sonatype/nexus3
• Create Persistent Volume
– 使用 docker volume(建議做法)
$ docker volume create --name nexus-data
$ docker run -d -p 8081:8081 --name nexus -v nexus-data:/nexus-data sonatype/nexus3
– 將本機目錄視為一個 volume 並將其 Mount 至設定
$ mkdir /some/dir/nexus-data && chown -R 200 /some/dir/nexus-data
$ docker run -d -p 8081:8081 --name nexus -v /some/dir/nexus-data:/nexus-data sonatype/nexus3
• 開啟 http://localhost:8081 並用 admin/admin123 作為 Administrator 登入
*新啟用的 container 需要 2-3 minutes 暖機. 可查看 log 確認 instance 是否準備服務
https://help.sonatype.com/repomanager3/download
Nexus Repository Manager 各目錄
• bin:包含Nexus啟動|停止等腳本,以及一些跟啟動有關的配置參
數,如JVM,karaf等
• etc:包含主配置文件nexus-default.properties,以及一些其他配置
文件,如ssl,jetty,karaf等
• lib:包含跟karaf相關的jar包
• public:包含跟Nexus應用相關的共用資源
• system:包含所有組成Nexus應用的組件和插件
• sonatype-work 預設的數據存儲目錄,包含所有組件,倉庫,配置,
db,日誌等。
Nexus Repository Manager
Welcome Page
Accounts and Privileges
Security Model
Users, Roles, and Privileges
• Users
– 三種類型 Anonymous, Users 與 LDAP
– Anonymous 使用 Realms 控制所賦予的權限
– Users 使用 Roles 控制所賦予的權限
– LDAP 使用 Realms + 指定 Roles 控制所賦予的權限
• Realms
– 一系列的群組權限,包括 Nexus 系統預先定義的群組或的從LDAP匯入
• Roles
– 繫結該角色實際賦予的 Privileges
• Privileges
– 紅色 = Admin 權限
– 灰色 = 僅有 View 權限
Repository Types
• Hosted Repository
– 自行開發、維護與上傳的 package
• Proxy Repository
– 通常為第三方的 package,Proxy Repository 是鏈接到遠端儲存庫的儲存庫。
– 根據 Proxy Repository 的本地內容驗證對 package 的任何請求,如果未找到本地組件,
則將請求轉發到遠端儲存庫。
– 可額外設定 Sync up Stream 將轉發到遠端儲存庫請求回應儲存一份本地主機內,下次即
可在本地取得。
• Group Repository
– 是多個儲存庫的集合.提供單一的訪問地址.
Artifact Metadata
• Name
• Version
• Timestamp
• Commit SHA Id
• Others…
API
Artifacts Management
with Continue Integration
良好的 DevOps 需要工具來有效
管理不斷增長的產出物,以確保
順利的讓開發工作與應用服務/程
式的持續整合與部屬不被中斷
今天發生天災或是官方在維護,組織的開發
部署會遇到什麼問題嗎?
想一下
下面的情境現在團隊能否達成與如何達成?
• 新人的開發環境如何最快速的建置完成?
• 新功的開發有部分功能先前有其他人寫過,如何分享給本
次開發使用?
• 部署到發佈的產出能被人為修改的地發有哪些?
• 如何在當前的 CI 流程內多插入一個新項目該如何來調整
流程?
• 建立一個新的部屬環境,該調整哪些地方與內容?
重點在如何解除耦合性
樂高(LEGO)思維
當有越多不同顆粒的完整體可選擇時,能
做得決定也就越廣,且每個決定都包含了
先前已確認的完整內容.
以下是我與團隊實務上的做法經驗
依照需求,採有兩種 Git Flow…
一般應用程式開發
(Gitlab Flow)
核心共用模組開發
(Github Flow)
實際流程差異
一般應用程式開發
(Gitlab Flow)
核心共用模組開發
(Github Flow)
選擇 Fork/Branch 的原因
乾淨的 Merge Commit 才能再遇到問題時選擇上一個 Commit 還原
Version Control
有版本、版本有意義才有管理的可能
Semantic Versioning
Versioning during Development
開發與正式不會是同一個版本但應該看得出關係
Pre-release and Publish Package
使用 Cake 協助 .NET 封裝 Library
Private Repository Manager
• Nexus Repository Manager 具有 upstream sync 功
能(Proxy)
– 保持組織內 Repository 與外部 Repository 的一致性
– 保持本機與組織內 Repository 的一致性
Private Repository Manager Team Repository Manager
Artifacts Management
with Continue Deployment
Artifacts Environments
Configurations
and Profiles
Setting
Documents,
Tools and
Process flow
Delivery for Software
避免包含 Configuration 與 Setting 的方法
OS 環境變數 k8s 環境變數與設定 獨立服務
個人推薦 Consul
.NET Artifact(.dll)
Configuration
Source code
External artifacts
Build Procedure New Artifacts
Jenkins Trigger
Internal Library
Container Provisioning
Configuration
Source code
External artifacts
Build Procedure
New Artifact
available for
deployment
Automated
acceptance testing
Provisioning
Push to
Nexus Repository
Product Release
https://godleon.github.io/blog/Kubernetes/k8s-Helm-Introduction/
Jenkins Job
Jenkins 只拿來執行腳本!!!!!
讓我們簡單回顧一下這場的內容
持續交付的意義在於
效率提升
可靠的質量
安全牢固的產出
有效的團隊協作
透明的流程
今天分享的內容有些開發語言、技術
無法支援該怎麼辦?
有些時候你就是會吃不飽…
local-npm
A Node server that acts as
a local npm registry
https://www.npmjs.com/package/local-npm
Athens
A Server for Go Packages
https://github.com/gomods/athens
Nexus Repository
Helm Format
Community Plugin for Helm
https://github.com/sonatype-nexus-community/nexus-repository-helm
Helm Nexus
Repository
PushA plugin for helm that will pus
h a chart to a Nexus Hosted
Repository
https://github.com/sonatype-nexus-community/helm-nexus-push
Helm Nexus
Repository
PushA plugin for helm that will pus
h a chart to a Nexus Hosted
Repository
https://github.com/sonatype-nexus-community/helm-nexus-push
ChartMuseum
An open-source Helm Chart
Repository server
https://github.com/helm/chartmuseum
Nexus Repository
Manager OSS
Host on GCP by Blackie Tsai
https://github.com/blackie1019/gcp-k8s-persisantdisk-nexus3-oss
Nexus Repository
Manager OSS
Host on GCP by Helm
https://github.com/helm/charts/tree/master/stable/sonatype-nexus
Nexus Repository
Manager OSS
Host on AWS
https://guides.sonatype.com/repo3/quick-start-guides/aws-for-repo/
有的時候只想玩玩它…
Azure Artifacts
https://azure.microsoft.com/zh-tw/services/devops/artifacts/
Azure DevOps Serve (前身為 Team Foundation Server) 也有內建支援
Thank you!
Enjoy your DevOps journey with FUN
References
 https://help.sonatype.com/learning
 https://hub.docker.com/r/sonatype/nexus3/
 https://rickhw.github.io/2018/07/08/DevOps/Artifacts-Management/
 https://www.skytap.com/blog/continuous-delivery-fully-functional-environments-skytap-part-2/
 https://help.sonatype.com/repomanager3/repository-manager-feature-matrix
 http://exchange.sonatype.com/list
 https://blackie1019.github.io/2017/08/07/JFrog-Universal-Artifact-Repository-Manager/
 https://blackie1019.github.io/2017/08/15/Another-Free-Universal-Package-Manager-ProGet/
 https://blackie1019.github.io/2017/08/18/One-More-Universal-Package-Manager-Nexus-Repository-Manager/
 https://blackie1019.github.io/2017/08/10/local-npm-Offline-npm-registry/

More Related Content

What's hot

OWASP Top 10 (2013) 正體中文版
OWASP Top 10 (2013) 正體中文版OWASP Top 10 (2013) 正體中文版
OWASP Top 10 (2013) 正體中文版Bruce Chen
 
基礎網頁程式攻擊檢驗
基礎網頁程式攻擊檢驗基礎網頁程式攻擊檢驗
基礎網頁程式攻擊檢驗Taien Wang
 
OWST - Orange Web Security Toolkit Documentation
OWST - Orange Web Security Toolkit DocumentationOWST - Orange Web Security Toolkit Documentation
OWST - Orange Web Security Toolkit DocumentationOrange Tsai
 
Reactive application with akka.NET & .NET Core
Reactive application with akka.NET & .NET CoreReactive application with akka.NET & .NET Core
Reactive application with akka.NET & .NET CoreChen-Tien Tsai
 
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場twMVC
 
Android Taipei 2013 August - Android Apps Security
Android Taipei 2013 August - Android Apps SecurityAndroid Taipei 2013 August - Android Apps Security
Android Taipei 2013 August - Android Apps SecurityTaien Wang
 
用戶端攻擊與防禦
用戶端攻擊與防禦用戶端攻擊與防禦
用戶端攻擊與防禦Taien Wang
 
伺服器端攻擊與防禦II
伺服器端攻擊與防禦II伺服器端攻擊與防禦II
伺服器端攻擊與防禦IITaien Wang
 
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場twMVC
 
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)Jeff Chu
 
微軟實戰課程日:玩轉雲端 技術與架構
微軟實戰課程日:玩轉雲端 技術與架構微軟實戰課程日:玩轉雲端 技術與架構
微軟實戰課程日:玩轉雲端 技術與架構Jeff Chu
 
WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」Orange Tsai
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Jeff Chu
 
網頁安全 Web security 入門 @ Study-Area
網頁安全 Web security 入門 @ Study-Area網頁安全 Web security 入門 @ Study-Area
網頁安全 Web security 入門 @ Study-AreaOrange Tsai
 
淡江大學 - 產品測試+安全性測試+壓力測試
淡江大學 - 產品測試+安全性測試+壓力測試淡江大學 - 產品測試+安全性測試+壓力測試
淡江大學 - 產品測試+安全性測試+壓力測試Taien Wang
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理Justin Lin
 
使安全成為軟體開發必要部分
使安全成為軟體開發必要部分使安全成為軟體開發必要部分
使安全成為軟體開發必要部分Taien Wang
 
Azure mobileservice
Azure mobileservice Azure mobileservice
Azure mobileservice twMVC
 
[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享
[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享
[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享Duran Hsieh
 

What's hot (20)

OWASP Top 10 (2013) 正體中文版
OWASP Top 10 (2013) 正體中文版OWASP Top 10 (2013) 正體中文版
OWASP Top 10 (2013) 正體中文版
 
基礎網頁程式攻擊檢驗
基礎網頁程式攻擊檢驗基礎網頁程式攻擊檢驗
基礎網頁程式攻擊檢驗
 
OWST - Orange Web Security Toolkit Documentation
OWST - Orange Web Security Toolkit DocumentationOWST - Orange Web Security Toolkit Documentation
OWST - Orange Web Security Toolkit Documentation
 
Reactive application with akka.NET & .NET Core
Reactive application with akka.NET & .NET CoreReactive application with akka.NET & .NET Core
Reactive application with akka.NET & .NET Core
 
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
雲端環境的快取策略-Global Azure Bootcamp 2015 臺北場
 
Android Taipei 2013 August - Android Apps Security
Android Taipei 2013 August - Android Apps SecurityAndroid Taipei 2013 August - Android Apps Security
Android Taipei 2013 August - Android Apps Security
 
用戶端攻擊與防禦
用戶端攻擊與防禦用戶端攻擊與防禦
用戶端攻擊與防禦
 
伺服器端攻擊與防禦II
伺服器端攻擊與防禦II伺服器端攻擊與防禦II
伺服器端攻擊與防禦II
 
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
雲端上的資訊安全-Global Azure Bootcamp 2015 臺北場
 
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
 
微軟實戰課程日:玩轉雲端 技術與架構
微軟實戰課程日:玩轉雲端 技術與架構微軟實戰課程日:玩轉雲端 技術與架構
微軟實戰課程日:玩轉雲端 技術與架構
 
WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」WebConf 2013「Best Practices - The Upload」
WebConf 2013「Best Practices - The Upload」
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
 
網頁安全 Web security 入門 @ Study-Area
網頁安全 Web security 入門 @ Study-Area網頁安全 Web security 入門 @ Study-Area
網頁安全 Web security 入門 @ Study-Area
 
淡江大學 - 產品測試+安全性測試+壓力測試
淡江大學 - 產品測試+安全性測試+壓力測試淡江大學 - 產品測試+安全性測試+壓力測試
淡江大學 - 產品測試+安全性測試+壓力測試
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
 
使安全成為軟體開發必要部分
使安全成為軟體開發必要部分使安全成為軟體開發必要部分
使安全成為軟體開發必要部分
 
Azure mobileservice
Azure mobileservice Azure mobileservice
Azure mobileservice
 
[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享
[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享
[Study4TW Visual Studio Everywhere] asp.net core 實務開發經驗分享
 

Similar to Artifacts management with CI and CD

.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式升煌 黃
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛Edward Kuo
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
網站上線了,然後呢?
網站上線了,然後呢?網站上線了,然後呢?
網站上線了,然後呢?Kirk Chen
 
Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AILangchain and Azure ML and Open AI
Langchain and Azure ML and Open AIKo Ko
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
 
玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手Poy Chang
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7twMVC
 
Elastic stack day-1
Elastic stack day-1Elastic stack day-1
Elastic stack day-1YI-CHING WU
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharinggavin_lee
 
讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術Yu Lung Shao
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild裕波 周
 
石玉磊 Web rebuild
石玉磊 Web rebuild石玉磊 Web rebuild
石玉磊 Web rebuildWebrebuild
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer TalkLarry Cai
 
使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心Du Yamin
 
01 DevOps and Azure DevOps overview
01 DevOps and Azure DevOps overview01 DevOps and Azure DevOps overview
01 DevOps and Azure DevOps overviewAlan Tsai
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用iammutex
 
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...Alan Tsai
 

Similar to Artifacts management with CI and CD (20)

.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式.NET Conf Taiwan 2022 - Tauri -前端人員也能打造小巧快速的 Windows 應用程式
.NET Conf Taiwan 2022 - Tauri - 前端人員也能打造小巧快速的 Windows 應用程式
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
網站上線了,然後呢?
網站上線了,然後呢?網站上線了,然後呢?
網站上線了,然後呢?
 
Html5
Html5Html5
Html5
 
Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AILangchain and Azure ML and Open AI
Langchain and Azure ML and Open AI
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手玩轉 .NET Interactive Notebooks 一次就上手
玩轉 .NET Interactive Notebooks 一次就上手
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7
 
Elastic stack day-1
Elastic stack day-1Elastic stack day-1
Elastic stack day-1
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharing
 
讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術讓軟體開發與應用更自由 - 使用 Docker 技術
讓軟體開發與應用更自由 - 使用 Docker 技術
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild
 
石玉磊 Web rebuild
石玉磊 Web rebuild石玉磊 Web rebuild
石玉磊 Web rebuild
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心
 
01 DevOps and Azure DevOps overview
01 DevOps and Azure DevOps overview01 DevOps and Azure DevOps overview
01 DevOps and Azure DevOps overview
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用Mysql HandleSocket技术在SNS Feed存储中的应用
Mysql HandleSocket技术在SNS Feed存储中的应用
 
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
不會 Javascript 沒關係,用 Blazor 來解決前端需求 - 成為 Full Stack .NET 開發者吧 - .NET Conf 2020...
 

More from Chen-Tien Tsai

關於軟體工程師職涯的那些事
關於軟體工程師職涯的那些事關於軟體工程師職涯的那些事
關於軟體工程師職涯的那些事Chen-Tien Tsai
 
Designing distributedsystems cht6
Designing distributedsystems cht6Designing distributedsystems cht6
Designing distributedsystems cht6Chen-Tien Tsai
 
The Cloud - What's different
The Cloud - What's differentThe Cloud - What's different
The Cloud - What's differentChen-Tien Tsai
 
How to be a professional speaker
How to be a professional speakerHow to be a professional speaker
How to be a professional speakerChen-Tien Tsai
 
響應式程式開發之 .NET Core 應用 
響應式程式開發之 .NET Core 應用 響應式程式開發之 .NET Core 應用 
響應式程式開發之 .NET Core 應用 Chen-Tien Tsai
 
Artifacts management with DevOps
Artifacts management with DevOpsArtifacts management with DevOps
Artifacts management with DevOpsChen-Tien Tsai
 
Web optimization with service woker
Web optimization with service wokerWeb optimization with service woker
Web optimization with service wokerChen-Tien Tsai
 
GCPUG.TW Meetup #25 - ASP.NET Core with GCP
GCPUG.TW Meetup #25 - ASP.NET Core with GCPGCPUG.TW Meetup #25 - ASP.NET Core with GCP
GCPUG.TW Meetup #25 - ASP.NET Core with GCPChen-Tien Tsai
 
.NET Study Group - ASP.NET Core with GCP
.NET Study Group - ASP.NET Core with GCP.NET Study Group - ASP.NET Core with GCP
.NET Study Group - ASP.NET Core with GCPChen-Tien Tsai
 
Webpack and Web Performance Optimization
Webpack and Web Performance OptimizationWebpack and Web Performance Optimization
Webpack and Web Performance OptimizationChen-Tien Tsai
 
DotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactDotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactChen-Tien Tsai
 
Website Auto scraping with Autoit and .Net HttpRequest
Website Auto scraping with Autoit and .Net HttpRequestWebsite Auto scraping with Autoit and .Net HttpRequest
Website Auto scraping with Autoit and .Net HttpRequestChen-Tien Tsai
 
C# 2 to 5 short Introduction
C# 2 to 5 short IntroductionC# 2 to 5 short Introduction
C# 2 to 5 short IntroductionChen-Tien Tsai
 
DevOps for dummies study sharing - part II
DevOps for dummies study sharing - part IIDevOps for dummies study sharing - part II
DevOps for dummies study sharing - part IIChen-Tien Tsai
 
Git essential training & sharing self
Git essential training & sharing selfGit essential training & sharing self
Git essential training & sharing selfChen-Tien Tsai
 
How to make a Load Testing with Visual Studio 2012
How to make a Load Testing with Visual Studio 2012How to make a Load Testing with Visual Studio 2012
How to make a Load Testing with Visual Studio 2012Chen-Tien Tsai
 

More from Chen-Tien Tsai (19)

關於軟體工程師職涯的那些事
關於軟體工程師職涯的那些事關於軟體工程師職涯的那些事
關於軟體工程師職涯的那些事
 
Designing distributedsystems cht6
Designing distributedsystems cht6Designing distributedsystems cht6
Designing distributedsystems cht6
 
The Cloud - What's different
The Cloud - What's differentThe Cloud - What's different
The Cloud - What's different
 
How to be a professional speaker
How to be a professional speakerHow to be a professional speaker
How to be a professional speaker
 
Agile tutorial
Agile tutorialAgile tutorial
Agile tutorial
 
響應式程式開發之 .NET Core 應用 
響應式程式開發之 .NET Core 應用 響應式程式開發之 .NET Core 應用 
響應式程式開發之 .NET Core 應用 
 
Artifacts management with DevOps
Artifacts management with DevOpsArtifacts management with DevOps
Artifacts management with DevOps
 
Web optimization with service woker
Web optimization with service wokerWeb optimization with service woker
Web optimization with service woker
 
GCPUG.TW Meetup #25 - ASP.NET Core with GCP
GCPUG.TW Meetup #25 - ASP.NET Core with GCPGCPUG.TW Meetup #25 - ASP.NET Core with GCP
GCPUG.TW Meetup #25 - ASP.NET Core with GCP
 
.NET Study Group - ASP.NET Core with GCP
.NET Study Group - ASP.NET Core with GCP.NET Study Group - ASP.NET Core with GCP
.NET Study Group - ASP.NET Core with GCP
 
Webpack and Web Performance Optimization
Webpack and Web Performance OptimizationWebpack and Web Performance Optimization
Webpack and Web Performance Optimization
 
DotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactDotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + react
 
Website Auto scraping with Autoit and .Net HttpRequest
Website Auto scraping with Autoit and .Net HttpRequestWebsite Auto scraping with Autoit and .Net HttpRequest
Website Auto scraping with Autoit and .Net HttpRequest
 
C# 2 to 5 short Introduction
C# 2 to 5 short IntroductionC# 2 to 5 short Introduction
C# 2 to 5 short Introduction
 
Docker - fundamental
Docker  - fundamentalDocker  - fundamental
Docker - fundamental
 
DevOps for dummies study sharing - part II
DevOps for dummies study sharing - part IIDevOps for dummies study sharing - part II
DevOps for dummies study sharing - part II
 
Redis tutoring
Redis tutoringRedis tutoring
Redis tutoring
 
Git essential training & sharing self
Git essential training & sharing selfGit essential training & sharing self
Git essential training & sharing self
 
How to make a Load Testing with Visual Studio 2012
How to make a Load Testing with Visual Studio 2012How to make a Load Testing with Visual Studio 2012
How to make a Load Testing with Visual Studio 2012
 

Artifacts management with CI and CD

Editor's Notes

  1. Application Build 原始碼經過編譯或是打包所參考產出物 Application Library/Component/Package 程式於開發時所引用的第三方或自身獨立部分功能的產出物 Virtual Machine/Container Image 建置環境所需的映像檔案 Deployment Profile 部署所需的設定配置檔 Any Binary File 任何一個與開發或商業運作有關的產出物,如Repository 的 README.md.
  2. 所以簡單說,透過 Artifact 解偶 (decouple) 整個 pipeline,讓需要的角色可以獨立作業。 如果 pipeline 只能是按鍵部署,而沒有其他的選擇,那麼表示部署流水線是沒有任何彈性的,換言之,部署的主動性只有開發團隊有,其他人都無法自主,造成的現象就是 強耦合 (couple),當有第二、第三環境要部署的時候,就要重新 Pull Code、Build … 實際上是沒有意義的。