---
# System prepended metadata

title: CI/CD 入門 - GitLab
tags: [軟體, CI/CD]

---

CI/CD 入門 - GitLab
======

> ***不知自己不知道, 那你會以為你知道.***

###### tags: `CI/CD` `軟體` 

此篇前言
------
- 為什麼要導入 CI/CD 呢?(此次主要想學習的)
    - 單元測試價值的衍生
    - 軟體周期迭代的**更快**
    - 部屬的流程自動化
    - 人工作業的時間減少, 有利於空出時間來做其它事情.
    - 系統管控從**發布程式碼**到**APP上版**, 更有利於追蹤與管理.
    - 軟體專案每次的調整與部屬, 將有**信心**地應對.

- 工具與環境
    - GitLab

- CI/CD 要點
     - 最少須包含: 版控、自動建置與整合測試(unittest、auto testing...)、發行管理
    - 依據需求選定工具, 通常是選擇時間成本較低的
    - 關於版控可以研究 git flow, 依團隊需求制定策略. 簡單點可以使用兩個分支(現行是 master & developer)
    - CI 導入初期, 可以關注以下
        - success build
        - pass unit test
        - manage artifacts
    - CD
        - 分成測試環境與正式環境, 兩個環境最好能相仿. 以環境面較為複雜, 須注意任何細節.
        - 因為環境與 package 的關係, 難以找到自動化部屬相關的套件. 建議使用 container 
        - containers 能夠把 web sites, services, jobs, cli tools 等等形式的 application 都包裝成 container image
        - 統一用 docker registry 的方式管理
        - 微服務可參考: https://columns.chicken-house.net/2017/05/28/aspnet-msa-labs1/

# ch01 DevOps & GitLab 基本認識
- DevOps 起初關注於軟體生命週期中**開發團隊**與**維運團隊**的溝通和協作是否能**降低隔閡** 與 **維運更加敏捷**. 
- 廣義的 DevOps:
    - 企業應帶給客戶之價值
    - 組織文化的深遠影響
    - 企業轉型運動
    - 打破企業中的隔閡(Breaking Down Silos)
- 狹義的 DevOps: 聚焦於開發到維運(Dev ~ Ops)的流程所遇到的問題
- 實踐 DevOps 時, 請記得 DevOps 之父 Patrick Debois 說的「***DevOps, is a human problem***」
- GitLab CE 和 GitLab EE 選擇: **選擇 EE**
    - EE 為 CE 的威力加強版
    - 免去未來若想要 CE 升為 EE 的流程
- 選擇 GitLab Server 或 gitlab.com
    - 資安考量
    - 自行架設需額外考慮維護 Server 的成本
    - 各有優缺點請依據需求與情境去考量

# ch02 使用 GitLab

因考量穩定性問題想自行架設 GitLab Server, 要安裝時發現是用沒接觸過的方式. 經考量先用較快速的方法
- [Linix 作業系統的選擇](https://www.linuxyes.com/blog/linuxyes-2/post/2021-linux-ubuntu-centos-12)
    - 2021 年的比較差異要點為: 
        - CentOS 未來是要付費的
        - ubuntu 可能是未來的趨勢
- 使用 windwos 下的 hyper-V
- hyper-V 掛載 ubuntu 後安裝 docker

## GitLab 安裝過程 2.2
- windows 10 開啟 hyper-v service
- 下載 ubuntu 20.04 LTS x64
    - https://www.ubuntu-tw.org/modules/tinyd0/
    - 安裝 .iso 時遇到 "The signed image hash is not allowed": 因安全性問題只能安裝特規授權的映像檔.
        - 須在設定中找 Security 將 Secure Boot 關閉, 才能進入安裝.
    - 安裝過程中可以設定 AD, 不過還沒有想到哪裡會用到. 暫且先跳過