初探gitlab & gitlab-runner & asp.net core持續集成


文章簡介

  •  gitlab & gitlab-runner 簡介

  •  基於gitlab & gitlab-runner 的asp.net core webapi 極簡持續集成實踐

 

gitlab & gitlab-runner 簡介

寫在最前面,文中示例使用到了docker & docker-compose 相關知識,文中的gitlab server 以及 gitlab-runner都是使用docker容器,以及gitlab-runner的執行方式也是docker模式,相關內容不再贅述,但是注意點會在文中標注。

gitlab是一款基於git的代碼管理平台, 可以基於此做代碼管理,以及相關CI-CD操作。gitlab-runner是一個代碼持續集成工具,將其注冊至gitlab后可以基於此做相關的CI-CD。

持續集成流程大致分為三步,1)本地用戶將代碼上傳至gitlab倉庫 2)gitlab-runner接收代碼推送事件,從gitlab拉取相關代碼(需要將runner注冊至gitlab&將創建項目委托給runner)  3)runner執行自動集成腳本(.gitlab.ci.yml),編譯發布服務。如圖所示=》

 

文檔傳送門=>gitlab https://docs.gitlab.com/ee/README.html  gitlab-runner  https://docs.gitlab.com/runner/

極簡實踐

  • 從dockerhub下載gitlab & gitlab-runner 鏡像  
    docker pull gitlab/gitlab-ce  & docker pull gitlab/gitlab-runner
  • 創建gitlab & gitlab-runner容器
    docker run -d --hostname localhost -p 10080:80 -p 10443:443 --name gitlab -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-ce:latest 
    docker run -d --name gitlab-runner --link gitlab -v /var/run/docker.sock:/var/run/docker.sock --restart always gitlab/gitlab-runner:latest -- 這里注意下,runner啟動容器時候需要-v
    /var/run/docker.sock:/var/run/docker.sock命令將本地的docker服務套接在runner容器上(直白點就是runner容器可以使用本機docker服務) ;--link將runner容器鏈接到gitlab容器
  • 等gitlab啟動幾分鍾,此時我們可以看到現在有兩個正在運行的容器
  • 接下來訪問我們本機的10080端口就可以訪問到我們的gitlab了,第一次進入需要初始化密碼。順便我們現在再創建一個叫做tony的用戶。登錄后,是這樣的一個界面=》
  •  

     接下來,我們注冊gitlab-runner。 注冊的目的是將gitlab-runner 與 gitlab綁定起來。回到我們的powershell(命令行)界面,執行命令。我們依次需要填寫我們的gitlab地址,服務token,描述信息,tag標簽(runner會根據tag標簽來決定自動編譯項目的推送也可以修改runner配置執行所有推送),runner執行模式(這里我們選docker),以及默認鏡像。gitlab地址和token我們需要以管理員身份進入gitlab服務,選擇Overview的Runners菜單查看。這里注意,gitlab地址不可以寫localhost,會導致runner找不到gitlab(每一個docker容器相當於獨立的服務器)

    docker exec -it gitlab-runner gitlab-runner register
  • runner注冊成功后,我們進入gitlab的的runner頁面會出現我們注冊的runner;此時我們切換tony用戶,創建一個項目(我這里的mywebsite);回到root用戶,將runner分配給這個項目(同時把不需要tag就可以執行編譯的選項選上);這時候,我們的mywebsite項目就托管在了注冊的runner上了。

  • 然后我們創建一個asp.net core v2.2的webapi項目,並為其編寫dockerfile ,容器編排我們使用docker-compose的方式。主要文件內容

     1 FROM  mcr.microsoft.com/dotnet/core/sdk:2.2 as build-env
     2 # code目錄
     3 WORKDIR /code  
     4 
     5 #項目拷貝至code
     6 COPY *.csproj ./ 
     7 RUN dotnet restore
     8 
     9 # #代碼拷貝至code
    10 COPY  . ./
    11 # #發布文件在code/out文件夾
    12 RUN dotnet publish -c Release -o out
    13 # #找到runtime 
    14 FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
    15 # #新建一個目錄app
    16 WORKDIR /app
    17 # #code目錄發布的代碼文件放到app
    18 COPY --from=build-env /code/out ./
    19 # 輸出到80端口
    20 EXPOSE 80
    21 ENTRYPOINT [ "dotnet","tonywebsite.dll" ]
    DockerFile
    1 version: '3'
    2 services:
    3   web: 
    4     build: .
    5     container_name: 'aspnetcore'
    6     ports:
    7       - '8003:80'
    docker-compose.yml
  • 然后編寫自動集成腳本

     1 build-master:
     2   image: docker:19.03.2
     3   stage: build              
     4 
     5   script:
     6     - docker --version
     7 
     8 image:
     9   name: docker/compose:1.24.1         #添加docker-compose,使用docker-compose編排鏡像
    10   entrypoint: ["/bin/sh", "-c"]
    11 
    12 rtest:
    13   script:
    14     - docker-compose --version
    15     - docker-compose up -d --build --force-recreate
    .gitlab.ci.yml
  •  

  • 此時我們把我們的項目推送至我們的gitlab服務器,就會開始自動構建了;jobs可以看到相關日志

  •  

  •  我們訪問到我們的8003端口,可以看到控制器返回的內容

  • 接下來,我們修改下返回內容,提交至git服務器

  • 此時,我們再次訪問我們的8003端口可以看到,我們的修改已生效=》

 

 

最后寫下注意事項:

  • 我們的一整套操作都是基於Docker容器,包括服務的打包,以及交互,大家生產環境使用時候,
  • 注意掛載下資料卷;runner是根據tag來編輯提交的代碼,假如想讓runner編譯所有的提交,注意在runner配置中選擇不設置tag也編譯
  • runner注冊至gitlab時候,輸入地址注意

 

也是剛開始了解Gitlab & gitlab-runner的ci 以及pipeline解決方案,假如文中有寫錯的地方歡迎大家批評指正。第一篇僅限極簡的把CI服務搭建起來,並沒有涉及優化點,以及原理性的知識,敬請期待。。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM