$30 off During Our Annual Pro Sale. View Details »

那些年我們做過的 DevOps Pipeline @ DevOpsDays Taipei 2023

Cheng-Wei Chen
September 28, 2023

那些年我們做過的 DevOps Pipeline @ DevOpsDays Taipei 2023

那些年我們做過的 DevOps Pipeline @ DevOpsDays Taipei 2023

CI / CD Pipeline 是 DevOps 工程實踐中非常重要的一項工具,這麼多年過去 CI / CD 技術與工具的發展,已經從地端到雲端、VM 到 Container、老爺爺到太空章魚⋯⋯等經歷多個年代。到底為何我們仍需要 CI / CD Pipeline?

就讓我們來回顧一下 CI / CD Pipeline 的歷史軌跡,放眼過去、展望未來,認識這項在實踐 DevOps 時,你絕對少不了的重要工具!

Cheng-Wei Chen

September 28, 2023
Tweet

More Decks by Cheng-Wei Chen

Other Decks in Technology

Transcript

  1. Photo by Simon Stratford on Unsplash
    Cheng Wei Chen @ DevOpsDays Taipei 2023
    那些年我們做過的
    DevOps Pipeline

    View Slide

  2. Cheng Wei Chen 陳正瑋
    Athemaster 炬識科技 / Technology Consultant
    《Effective DevOps 中⽂版》譯者、GitLab Hero、DevOps Taiwan Community 志⼯
    著作《和艦長⼀起30天玩轉GitLab》
    https://chengweichen.com

    View Slide

  3. 當有人跟你說:
    「嘿,我們來導入

    DevOps 吧!」
    你覺得他打算⋯⋯?
    Photo by Camylla Battani on Unsplash

    View Slide

  4. 1
    2
    3
    4
    5

    View Slide

  5. 什麼是 CI / CD?
    Photo by Camylla Battani on Unsplash

    View Slide

  6. 圖片來源 - https://semaphoreci.com/blog/7-continuous-integration-tools-for-php-laravel
    圖片來源 - https://ohdear.app/news-and-updates/our-gitlab-ci-pipeline-for-laravel-applications
    圖片來源 - https://lorisleiva.com/laravel-deployment-using-gitlab-pipelines 隨意 Google 找到的

    View Slide

  7. 圖片來源 - https://docs.gitlab.com/ee/ci/introduction/
    GitLab Hero 自肥

    View Slide

  8. Continuous Integration
    Photo by JJ Ying on Unsplash
    持續 整合

    View Slide

  9. Testing
    Code
    Deploy
    Build
    Debug / Feature
    Local 環境
    composer
    source code (*.php)
    code/ -> /var/www/
    開啟瀏覽器,點⼀點⋯

    View Slide

  10. Testing
    Local Code
    Deploy
    Build
    Local 環境
    Testing
    Main Code
    Deploy
    Build
    其他環境
    Debug / Feature

    View Slide

  11. Photo by Aldo De La Paz on Unsplash
    Continuous Integration

    View Slide

  12. 沒有⾃動化測試,

    不要說你是在做 CI!
    Photo by Jamie Street on Unsplash

    View Slide

  13. 圖片來源:《Continuous Delivery》Ch4
    功能性驗收測試
    單元測試


    整合測試


    系統測試
    非功能性驗收測試


    效能測試、負載測試


    安全性測試
    探索性測試


    可⽤性測試
    商業
    技術
    團隊 專案
    手動 / 自動
    手動
    自動
    自動

    View Slide

  14. 圖片來源: http://www.ambysoft.com/essays/
    fl
    oot.html

    View Slide

  15. 開發⼈員應遵守的 CI 七⼤要領:
    • Commit code frequently
    • Don’t commit broken code
    • Fix broken builds immediately
    • Write automated developers tests
    • All tests and inspections must pass
    • Run private builds
    • Avoid getting broken code
    網路上查得到

    View Slide

  16. Continuous Delivery
    Photo by JJ Ying on Unsplash
    持續 交付

    View Slide

  17. Code
    Delivery
    Release
    source code (*.php)
    artifacts.zip
    User
    Install / Config / Provision / Setup …
    Photo by Fernando Lavin on Unsplash


    Photo by Roberto Sorin on Unsplash


    Photo by Campaign Creators on Unsplash


    Photo by William Hook on Unsplash
    Application / Services
    Install / Config / Provision / Setup …
    Deploy

    View Slide

  18. Code
    Delivery
    Release
    Deploy
    environment
    dev staging prod
    local
    開發 測試 老闆 顧客
    Install / Config / Provision / Setup …
    source code (*.php)
    artifacts.zip
    con
    fi
    g
    fi
    les


    env
    fi
    les
    +
    VM VM VM (Cloud)

    View Slide

  19. 任何人(環境)


    都可以


    取得(部署)


    任意版本的應用程式
    當然前提是如果有那個必要性與權限
    注意:不只是 Source Code

    View Slide

  20. Code
    Delivery
    Release
    Deploy
    environment
    dev staging prod
    local
    開發 測試 老闆 顧客
    持續交付
    Install / Config / Provision / Setup …

    View Slide

  21. 修復問題的耗費的資源
    尚未整合的「異動」數量
    修復問題 之 惡性循環
    發生問題
    +
    +
    +
    持續(頻繁)的整合與交付⼩範圍的異動(包含程式、環境⋯⋯)
    每次異動都靠 CI / CD


    守護最低限度的品質
    及早發現問題
    及早修復問題
    +
    潛在問題的數量 / 複雜度

    發生問題的機率

    View Slide

  22. Testing
    Local Code
    Deploy
    Build
    Local 環境
    Testing
    Main Code
    Deploy
    Build
    其他環境
    Debug / Feature
    CI / CD

    View Slide

  23. 持續交付的原則:
    • 建立可重複且可靠的流程
    • 盡可能的⾃動化
    • 以版本控制管理並保護⼀切
    • 越是棘⼿的事,越要儘早且頻繁處理
    • 重視品質
    • 交付是每位成員的責任
    • 持續改善
    2-3-4
    網路上查得到

    View Slide

  24. 圖片來源 - https://www.ithome.com.tw/article/152583
    CI/CD 還在崛起?

    View Slide

  25. 1999 – VMware
    2007 - Bamboo
    2007 - Cruise
    1999 – Continuous Integration
    1999 – eXtreme Programming
    1994 - Origin of


    Continuous integration


    by Grady Booch
    2007 - CI (Book)
    資料來源: https://en.wikipedia.org/wiki/Continuous_integration
    2010 - CD (Book)
    2011 - Jenkins
    2006 - TeamCity
    2010 - GoCD
    2005 - Huden 2009 - 1st


    DevOpsDays
    2007 – VirtualBox
    我們在這裡
    2000 - Apache Subversion (SVN)
    2005 - Git
    1990 2000 2015
    1995 2010
    2005 2020 2025

    View Slide

  26. 第 1 代
    CI / CD Pipeline
    CI Server
    VM
    SSH
    VM
    Agent
    Developer
    Jenkins
    Server
    Target Server / VM


    User / Password / SSH Key


    Actions / Shell scripts


    Pipeline / Step / Job
    Run backup / git pull / composer / con
    fi
    gure
    DB / runtime / nginx site con
    fi
    g / HA (LB)
    GUI

    View Slide

  27. 1999 – VMware
    2007 - Bamboo
    2007 - Cruise
    1999 – Continuous Integration
    1999 – eXtreme Programming
    1994 - Origin of


    Continuous integration


    by Grady Booch
    2007 - CI (Book)
    2010 - CD (Book)
    2011 - Jenkins
    2006 - TeamCity
    2000 - Apache Subversion (SVN)
    2010 - GoCD
    2005 - Huden 2009 - 1st


    DevOpsDays
    2007 – VirtualBox
    資料來源: https://en.wikipedia.org/wiki/Continuous_integration
    2008 - Bitbucket
    2016 - Gitea
    2005 - Git
    2011 - Travis CI
    2011 - CircleCI
    2012 - GitLab CI
    2018 - GitHub Action
    1990 2000 2015
    1995 2010
    2005 2020 2025
    2011 - GitLab
    2008 - GitHub

    View Slide

  28. 第 2 代
    CI / CD Pipeline
    Pipeline
    VCS
    YAML
    CI Service
    Developer
    Server
    Target Server / VM


    Actions / Shell scripts


    Pipeline / Step / Job
    Run backup / git pull / composer / con
    fi
    gure
    DB / runtime / nginx site con
    fi
    g / HA (LB)
    GitLab CI
    User / Password / SSH Key
    VM SSH
    CI Job

    View Slide

  29. 第 2 代
    CI / CD Pipeline
    Pipeline
    VCS
    YAML
    CI Service
    Pipeline as Code
    GitLab & GitLab CI
    VM SSH
    CI Job
    Developer
    VCS CI / CD

    View Slide

  30. 1999 – VMware
    2007 - Bamboo
    2007 - Cruise
    1999 – Continuous Integration
    1999 – eXtreme Programming
    1994 - Origin of


    Continuous integration


    by Grady Booch
    2007 - CI (Book)
    2010 - CD (Book)
    2011 - Jenkins
    2006 - TeamCity
    2000 - Apache Subversion (SVN)
    2010 - GoCD
    2005 - Huden 2009 - 1st


    DevOpsDays
    2007 – VirtualBox
    2016 - Gitea
    2012 - GitLab CI
    2008 - Bitbucket
    2005 - Git
    2011 - Travis CI
    2011 - CircleCI
    2018 - GitHub Action
    2011 - GitLab
    2008 - GitHub
    資料來源: https://en.wikipedia.org/wiki/Continuous_integration
    2014 - Docker (v1.0)
    2015 - K8s
    1990 2000 2015
    1995 2010
    2005 2020 2025

    View Slide

  31. 1999 – VMware
    2007 - Bamboo
    2007 - Cruise
    1999 – Continuous Integration
    1999 – eXtreme Programming
    1994 - Origin of


    Continuous integration


    by Grady Booch
    2007 - CI (Book)
    2010 - CD (Book)
    2011 - Jenkins
    2006 - TeamCity
    2000 - Apache Subversion (SVN)
    2010 - GoCD
    2005 - Huden 2009 - 1st


    DevOpsDays
    2007 – VirtualBox
    2016 - Gitea
    2012 - GitLab CI
    2008 - Bitbucket
    2005 - Git
    2011 - Travis CI
    2011 - CircleCI
    2018 - GitHub Action
    2011 - GitLab
    2008 - GitHub
    資料來源: https://en.wikipedia.org/wiki/Continuous_integration
    2014 - Docker (v1.0)
    2015 - K8s
    1990 2000 2015
    1995 2010
    2005 2020 2025
    第 2.5 代
    CI / CD Pipeline
    VM VM
    Container

    View Slide

  32. build test release
    deploy


    dev / stg
    test


    dev / stg
    deploy


    prod
    code
    Local
    第 1~2 代 CI / CD Pipeline
    build


    VM
    build


    VM
    zip
    dev


    VM
    stg


    VM
    prod


    VM
    test


    VM
    prod


    VM
    Local


    容器
    build


    容器
    test


    容器
    image
    dev


    容器
    stg


    容器
    第 2.5 代 CI / CD Pipeline
    prod


    VM
    prod


    VM

    View Slide

  33. 1999 – VMware
    2007 - Bamboo
    2007 - Cruise
    1999 – Continuous Integration
    1999 – eXtreme Programming
    1994 - Origin of


    Continuous integration


    by Grady Booch
    2007 - CI (Book)
    2010 - CD (Book)
    2011 - Jenkins
    2006 - TeamCity
    2000 - Apache Subversion (SVN)
    2010 - GoCD
    2005 - Huden 2009 - 1st


    DevOpsDays
    2007 – VirtualBox
    2016 - Gitea
    2012 - GitLab CI
    2008 - Bitbucket
    2005 - Git
    2011 - Travis CI
    2011 - CircleCI
    2018 - GitHub Action
    2011 - GitLab
    2008 - GitHub
    資料來源: https://en.wikipedia.org/wiki/Continuous_integration
    2014 - Docker (v1.0)
    2016 - IaC (Book, 1st)
    2020 - IaC (Book, 2nd)
    2015 - Spinnaker
    2015 - Buddy
    2019 - Argo CD
    2018 - Jenkins X
    1990 2000 2015
    1995 2010
    2005 2020 2025
    2017 - GitOps
    2021 - Terraform v1.0.0
    第 3 代
    CI / CD Pipeline
    Container
    VCS
    YAML
    Container
    Automation
    2021 - Pulumi v2.0.0
    2015 - K8s

    View Slide

  34. K8s 是新時代的 OS / Infra
    Photo by JJ Ying on Unsplash

    View Slide

  35. 第 3 代
    CI / CD Pipeline
    Container
    VCS
    YAML
    Container
    Automation
    Everything as Code
    Dev / Ops / Infra
    圖片來源:https://landscape.cncf.io

    View Slide

  36. build test release
    deploy


    dev / stg
    test


    dev / stg
    deploy


    prod
    code
    第 3 代 CI / CD Pipeline
    Local


    容器
    build


    容器
    test


    容器
    image
    dev


    k8s
    stg


    k8s
    prod


    k8s
    Infrastructure Code / Manifest Code
    Application Code
    plan test
    code apply test

    View Slide

  37. 涉及:⼯具、架構、流程
    Photo by Renel Wackett on Unsplash
    你調整過多少次 Pipeline?
    Jenkins


    GitLab CI
    1 VM


    2 VM / Container
    3 Stage


    5 Stage

    View Slide

  38. 好的程式與架構是

    持續演化來的~
    Photo by Fancycrave on Unsplash
    江湖傳⾔
    你會說 Pipeline嗎?
    你會說 Pipeline 嗎?

    View Slide

  39. 好的程式與架構是

    持續演化來的~
    組織架構、文化、流程、Tech Stack 也是

    Photo by Fancycrave on Unsplash
    江湖傳⾔
    DevOps Pipeline 當然也是

    View Slide

  40. 想像與思考
    PHP
    DigitalOcean
    GitLab CI
    Monolith
    Members: 3
    Laravel
    這些條件會產生何種 Pipeline?
    GitLab.com
    NAS run Docker

    View Slide

  41. 想像與思考 2
    JAVA
    AWS
    Jenkins
    Monolith
    Members: 10
    Spring
    這些條件會產生何種 Pipeline?
    Bitbucket
    VM

    View Slide

  42. 想像與思考 3
    Golang
    AWS
    GitLab CI
    Microservice
    Dev Team: 30
    Go Micro
    這些條件會產生何種 Pipeline?
    自架 GitLab
    GCP Azure
    Argo CD
    K8s
    Platform Team: 6

    View Slide

  43. 想像與思考 4
    JAVA
    AWS
    Jenkins
    Monolith
    Members: 10
    Spring
    如果加上更多的條件呢?
    Bitbucket
    VM
    軟硬整合?
    金融業?
    多產品彼此相依?
    APP + Web?

    View Slide

  44. Photo by Joshua J. Cotten on Unsplash
    有哪些「因素」會影響


    CI/CD Pipeline 的規劃?
    想想看

    View Slide

  45. 程式語言
    部署環境
    可用 IT 資源
    組織架構
    工具決策
    產品交付方式
    資安規範
    團隊文化
    軟體架構
    系統架構
    如何 build?
    如何 test?
    產業別 產品類型
    團隊人數
    產品的品質要求
    產品迭代速度
    產品交付速度

    View Slide

  46. 全都是相依關係
    Photo by Fancycrave on Unsplash
    有辦法只靠⾃⼰搞定?

    View Slide

  47. 還不用談到 DevOps,光是 CI / CD
    Process
    People Technology
    涉及:流程、人、技術
    Pipeline / Work
    fl
    ow Top
    Bottom
    Tools / Solution
    Team Department

    View Slide

  48. Photo by Fancycrave on Unsplash
    建議?

    View Slide

  49. 圖片來源:網路迷因
    以下分享的內容


    可能不適⽤於你、你的公司或團隊


    請⼩⼼服⽤。

    View Slide

  50. Mindset
    圖片來源:https://www.ghibli.jp/works/laputa/
    • 是⼀趟漫長的旅程
    太漫長了~


    長到都⽣青苔了~

    View Slide

  51. Mindset
    圖片來源:https://www.ghibli.jp/works/laputa/
    • 持續改善、迭代是常態
    第三個 Job

    壞了誒?
    沒事~


    正常迭代嘍~

    View Slide

  52. Mindset
    圖片來源:https://www.ghibli.jp/works/laputa/
    • 跨職能、跨部⾨的溝通協調無可避免
    部署失敗
    Infra
    Ops
    Dev
    炸鍋的 Prod 環境

    View Slide

  53. The Question Behind the Question
    圖片來⾃ DevOpsDays Taipei 2022
    • 退後⼀步,了解全貌

    View Slide

  54. The Question Behind the Question
    Photo by Fancycrave on Unsplash
    • 退後⼀步,了解全貌


    • ⼈、流程、⼯具、資源限制,

    權衡多項變因的多重相依關係


    • 找出關鍵瓶頸點,

    安排超前 2~3 步的規劃


    • 交付「價值」,⽽不是無謂的⾃動化

    View Slide

  55. Communicate, collaborate, align goals
    圖片來源:https://www.ghibli.jp/works/kazetachinu/
    • 持續溝通不能少
    有在⽤ Docker 的舉⼿!

    View Slide

  56. Communicate, collaborate, align goals
    圖片來源:https://www.ghibli.jp/works/kazetachinu/
    • 對⿑團隊對於 Pipeline 的期待
    以後 K8s 就歸你管吧!
    ……

    View Slide

  57. Communicate, collaborate, align goals
    圖片來源:https://www.ghibli.jp/works/kazetachinu/
    • 建立共同的 Pipeline 使⽤原則
    哪個蠢貨在週五按下
    Deploy 的!
    你老闆啊

    View Slide

  58. Communicate, collaborate, align goals
    圖片來源:https://www.ghibli.jp/works/kazetachinu/
    • 避免落入無效的⾃動化
    沒有測試,就全⾃動
    部署,錯了嗎?
    ⼤錯特錯

    View Slide

  59. First success, Small Wins
    Photo by Fancycrave on Unsplash
    • 搶下灘頭堡


    • 借⼒使⼒


    • 越過死亡⼭⾕
    死亡山谷
    灘頭堡
    Small Win
    Small Win

    View Slide

  60. Knowledge management
    Photo by Fancycrave on Unsplash
    • 關鍵知識、決策、技能的


    • 保存


    • 交流


    • 傳承
    CNCF 也說了要好好的寫⽂件

    View Slide

  61. Photo by Fancycrave on Unsplash
    更實務或技術⼀點的建議?

    View Slide

  62. 圖片來源:網路迷因
    以下分享的內容


    可能不適⽤於你、你的公司或團隊


    請⼩⼼服⽤。

    View Slide

  63. 釐清是哪個世代的 Pipeline
    Photo by Fancycrave on Unsplash
    • 1


    • 2


    • 2.5


    • 3

    View Slide

  64. 建立管理相依關係的原則
    Photo by Fancycrave on Unsplash
    • Dependency


    • Package


    • Release


    • Artifact
    • Container


    • Secret


    • Infrastructure


    • Environment
    management

    View Slide

  65. ⼩處著⼿,持續迭代
    Photo by Fancycrave on Unsplash
    • 不要妄想⼀條龍,CI、CD 是可以拆開的


    • Everything as Code


    • 良好的軟⼯技巧、架構設計


    • 模板、模組、繼承


    • 標準化與客製化的愛恨情仇 (80/20)


    • 測試再測試


    • VSM、三步⼯作法、系統思考、全貌⋯⋯

    View Slide



  66. 書不讀嗎?
    Docker





    Container


    Books
    More…

    View Slide

  67. Photo by Fancycrave on Unsplash
    總結 & 回顧

    View Slide

  68. DevOps != CI/CD != ⾃動化

    View Slide

  69. Photo by Aldo De La Paz on Unsplash
    CI / CD 是你的守護者

    View Slide

  70. 修復問題的時間長度
    尚未整合的「異動」數量
    修復問題 之 惡性循環
    潛在問題的數量

    與發生問題的機率
    發生問題
    +
    +
    +
    持續(頻繁)的整合與交付⼩範圍的異動(包含程式、環境⋯⋯)
    每次異動都靠 CI / CD


    守護最低限度的品質
    及早發現問題
    及早修復問題
    +

    View Slide

  71. 沒有⾃動化測試,

    不要說你是在做 CI / CD
    Photo by Jamie Street on Unsplash

    View Slide

  72. • 頻繁的整合異動(Code、Con
    fi
    g、Env⋯⋯)


    • 建立團隊開發維運的協作節奏


    • 及早取得回饋、發現錯誤、修復錯誤


    • 建置流程的標準化、簡化


    • 降低試錯成本、減少浪費
    持續整合 / 交付

    View Slide

  73. CI / CD 的原則:
    • 建立可重複且可靠的流程
    • 盡可能的⾃動化
    • 以版本控制管理並保護⼀切
    • 越是棘⼿的事,越要儘早且頻繁處理
    • 重視品質
    • 交付價值是每位成員的責任
    •持續改善

    View Slide

  74. 第 1 代
    CI / CD Pipeline
    CI Server
    GUI
    VM
    SSH
    VM
    Agent
    第 2 代
    CI / CD Pipeline
    Pipeline
    VCS
    YAML
    CI Service
    CI Job
    第 3 代
    CI / CD Pipeline
    Container
    VCS
    YAML
    Container
    Automation
    VM
    Container
    2.5
    VM

    View Slide

  75. 程式語言
    部署環境
    可用 IT 資源
    組織架構
    工具決策
    產品交付方式
    資安規範
    團隊文化
    軟體架構
    系統架構
    如何 build?
    如何 test?
    產業別 產品類型
    團隊人數
    產品的品質要求
    產品迭代速度
    產品交付速度

    View Slide

  76. 全都是相依關係
    Photo by Fancycrave on Unsplash
    有辦法只靠⾃⼰搞定?

    View Slide

  77. CI / CD / DevOps
    Process
    People Technology
    涉及:流程、人、技術
    Pipeline / Work
    fl
    ow Top
    Bottom
    Tools / Solution
    Team Department

    View Slide

  78. • Mindset


    • The Question Behind the Question


    • First success, Small Wins


    • Communicate, collaborate, align goals


    • Knowledge management
    Photo by Fancycrave on Unsplash
    個⼈⼼得

    View Slide

  79. • 釐清是哪個世代的 Pipeline


    • 建立管理相依關係的原則


    • ⼩處著⼿,持續迭代
    Photo by Fancycrave on Unsplash
    個⼈⼼得

    View Slide



  80. 書不讀嗎?
    Docker





    Container


    Books
    More…

    View Slide

  81. 實踐 第3代 CI/CD 的難題?


    第3代 CI/CD 解決了什麼新問題?
    Photo by Camylla Battani on Unsplash

    View Slide

  82. Photo by Clark Tibbs on Unsplash
    Thank You

    View Slide