寫在最前面,文中示例使用到了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
docker pull gitlab/gitlab-ce & docker pull 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-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" ]
1 version: '3' 2 services: 3 web: 4 build: . 5 container_name: 'aspnetcore' 6 ports: 7 - '8003:80'
而後編寫自動集成腳本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服務器,就會開始自動構建了;jobs能夠看到相關日誌asp.net
咱們訪問到咱們的8003端口,能夠看到控制器返回的內容ide
接下來,咱們修改下返回內容,提交至git服務器
此時,咱們再次訪問咱們的8003端口能夠看到,咱們的修改已生效=》
最後寫下注意事項:
也是剛開始瞭解Gitlab & gitlab-runner的ci 以及pipeline解決方案,假如文中有寫錯的地方歡迎你們批評指正。第一篇僅限極簡的把CI服務搭建起來,並無涉及優化點,以及原理性的知識,敬請期待。。