2024年2月21日 星期三

[Gitlab]CI-流程建置

 

CI(Continuous Integration)是Devops的軟體開發流程,主要針對程式碼變更後的自動建置和測試之後,定期將變更合併置主要Repository,CI的關鍵目標是能更快發現和解決問題、改善軟體品質還有減少驗證和釋出軟體更新所需的時間。


此篇文章將教你如何建立Gitlab CI流程

環境說明:

  • Gitlab (self-managed)
  • Gitlab Runner
  • Docker (windows)


首先在Docker上安裝Gitlab-Runner,輸入以下指令安裝Docker

sudo docker run -itd --restart always --name gitlab-runner \

  -v /etc/gitlab-runner \

  -v /var/run/docker.sock:/var/run/docker.sock \

  gitlab/gitlab-runner

p.s.如果gitlab網址是HTTPS協定,則需要加上ssl的相關設定

 -e CA_CERTIFICATES_PATH=/etc/gitlab-runner/certs/server.crt \

  -e LOCAL_CA_PATH=/usr/local/share/ca-certificates/ \



查看Docker是否有建立成功(Running表示有成功)



建立Runner前先去專案內找到Registration toeken,路徑 Settings>CI/CD>Runners




開啟終端機介面,並輸入Gitlab-runner開始建立project runner,

# gitlab-runner register


Enter the GitLab instance URL (for example, https://gitlab.com/):

<PLACE YOUR GITLAB URL>

Enter the registration token:

<PLACE YOUR TOKEN HERE>

Enter a description for the runner:

[4b3193ddb657]: 

Enter tags for the runner (comma-separated):

build,test

Enter optional maintenance note for the runner:


Registering runner... succeeded                     runner=GR1348941LEDi2FSZ

Enter an executor: virtualbox, kubernetes, custom, docker, parallels, ssh, docker-ssh, shell, docker+machine, docker-ssh+machine:

docker

Enter the default Docker image (for example, ruby:2.7):

nodejs

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!


Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml" 


這時再去專案內查看Runner是否有建立成功



成功後就可以編輯.gitlab-ci.yml,可從專案的左側菜單進入,路徑Build/Pipeline editor



點選"Configure pipeline",會開啟一個空的.gitlab-ci.yml,可輸入以下範例

範例專案是React
stages:
  - build
  - test
  - deploy

default:               # Add a default section to define the `image` keyword's default value
  image: node           # use nodejs

build-job:
  stage: build
  before_script:
    - npm install      # install package
  script:
    - npm run build    # build
  tags:
    - build 
  artifacts:
    paths:
      - "dist/"

test1:
  stage: test
  image: busybox       # Override the default `image` value with `busybox`
  script:
    - echo 'test1'
  tags:
    - test
  
deploy-prod:
  stage: deploy
  image: busybox       # Override the default `image` value with `busybox`
  dependencies:
    - build-job
  script:
    - find dist/
  tags:
    - deploy
    
    

檔案編輯好後拉至最下方,設定Commit message和Branch後點選"Commit changes"就可以觸發Runner


去Build>Pipelines查看是否有開始執行


點選pipelin進去,可查看執行步驟以及目前的執行狀況


再點選job進去,可查看job的執行log



等一下後,就可以看到pipeline已經執行完了,

可以透過Pipeline列表的右側下載該pipeline build步驟跑出來的程式碼(artifacts)


這樣CI流程就初步建立起來了,更多詳細的Pipeline設定可參考官方文件


CI還有許多機制與流程可以依照現有工作結構去調整,最簡單的例子就是
先CI確認程式碼可以build以及通過automatic test,再透過Git PR(Pull Request)來讓Reviewer針對此次修改去Code Review,沒問題才能將程式碼合併至主要Repository內。



沒有留言:

張貼留言

【.Net Core】 EF Core + Web API 實作

 EF Core是Entity Framework在.Net Core使用的版本,功能幾乎相同,但具有輕巧、高擴充性以及高效能等優點,建議各位學習。 通常在.Net Core如果要用ORM的方式會有兩種選擇分別是EF Core以及Dapper。 從其他網路文章可以看到這兩種在最新...