初探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模式,相關內容再也不贅述,可是注意點會在文中標註。html

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

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

 

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

極簡實踐

  • 從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容器至關於獨立的服務器)shell

    docker exec -it gitlab-runner gitlab-runner register
  • runner註冊成功後,咱們進入gitlab的的runner頁面會出現咱們註冊的runner;此時咱們切換tony用戶,建立一個項目(我這裏的mywebsite);回到root用戶,將runner分配給這個項目(同時把不須要tag就能夠執行編譯的選項選上);這時候,咱們的mywebsite項目就託管在了註冊的runner上了。api

  • 而後咱們建立一個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
  • 而後編寫自動集成腳本app

     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能夠看到相關日誌asp.net

  •  

  •  咱們訪問到咱們的8003端口,能夠看到控制器返回的內容ide

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

  • 此時,咱們再次訪問咱們的8003端口能夠看到,咱們的修改已生效=》

 

 

最後寫下注意事項:

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

 

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

 

 

 

 

相關文章
相關標籤/搜索