發表文章

目前顯示的是 4月, 2018的文章

Simple gitlab CI/CD with docker

圖片
年初挑了bitbucket + jenkins作為docker內部簡易自動化建置與部署的設置 那時候由於jenkins是內網的服務,bitbucket沒辦法送webhook進來,無法實作pipeline 自建bitbucket也是可以,但有沒有一個服務是一條龍做完的呢?就是gitlab 由於gitlab community edition (簡稱gitlab-ce) 跟 gitlab-runner免費授權的緣故 成為現在許多企業內部專案管理與自動化建置、測試與部署的首選 以下會以 gitlab-ce  +  gitlab-runner 兩個docker image為基底,建置兩個容器服務 並拿 Angular 、免費網域靜態檔案放置服務 Surge 當實作目標,走過一遍gitlab CI/CD 整個架構圖如下: gitlab-ce 為整個專案程式碼管理服務與pipeline主控台 gitlab-runner 則是當pipeline啟動時,會根據gitlab特有的 gitlab-ci.yml 執行CI/CD gitlab-ce 每個專案會有一組自己的token,用以註冊gitlab-runner gitlab-runner註冊時,可以選擇執行方式(executor),我們選用docker gitlab-runner會另外開幾個container來pull code與執行CI/CD,最後push到surge上 前置作業: (1). 註冊好surge的帳戶與自定義的網域名稱 (2). 確認docker的記憶體要4gb ram以上 (開發環境為Docker for Mac) (3).  gitlabDocker  目錄,主要放置  docker-compose.yml (4).  testCICD  目錄,主要放置  Angular 與 gitlab-ci.yml (5). gitlab-ce版本:10.6.1 主要步驟有四: 撰寫docker-compose file,確認兩個服務之間可以正常連線 設定User、Group、Project,模擬一般專案合作使用狀況 設定 gitlab-ce pipeline,註冊runner Push Code & auto-run pipeline 除了2.以外,

Common Q&A of gitlab-ce

圖片
Q1. 能否保護特定branch不讓人Push? 可以,並可將使用者分成 五種權限 ,分別可以對CI/CD不同階段有不同的操作。 可以依Group設定對Group底下所有Repository的權限 亦可依每個Repository做設定,假設兩者都有設定了,會以比較高的為優先 e.g., Jimmy在Group的權限預設是Guest,在A repository是 Developer。 則在該Repository的權限即是Developer,可以PUSH到 Unprotected的 branch Q2. 能否有討論區 有接近需求的討論區(Issue),但畢竟是respositry based的,所以沒有獨立討論區 但每個repository都有一個Issue block可以討論 Q3. 能否有Webhook通知? 能,以 Slack 來說,可以依據想通知的事件(e.g., Push, Issue…etc) 發通知到Slack Mail的部分要另外設定SMTP,可以自架mail server(郵件伺服器) 亦可用外部或公司內部郵件伺服器服務 信件的通知,比較是走個人訂閱層面的;Webhook的用途比較像廣播 Q4. 上的Change如何link到Issue 透過Crosslinking Issue。 在Commit Message加上 #<該Issue編號> push上來,在gitlab瀏覽時會自動連結,如下 Q5. 能否像Gerrit Server Cherry-pick 一個change? 可以。程序是 先push到一個非target branch 從gitlab 操作介面對該change cherrypick 並發merge pull request過去 此時會產生一個cherry-pick-xxx的temporary branch,那筆change就在其上 Target branch的maintainer如果覺得OK就可以merge該cherry-pick-xxx branch