docker環境下使用gitlab,gitlab-runner 爲 NetCore 持續集成

docker環境下使用gitlab,gitlab-runner 爲 NetCore 持續集成
環境
Centos7.6 安裝應用docker,docker-compose (我的Centos是用Hyper-V跑的分了8G的內存,阿里雲2G根本跑不起來gitlab)

爲了保證我的Centos環境乾淨所以我的gitlab與gitlab-runner都是採用docker服務運行,包括後續的runner的工作形式(executor)也是選的docker。

準備工作:

拉取鏡像:這步驟耗時挺長的,耐心等待吧(如果這個鏡像沒有了,你可以去hub.docker.com搜一下對應的鏡像)

1
2
3
4
docker pull gitlab/gitlab-ce:latest
docker pull gitlab/gitlab-runner:latest
docker pull docker:stable
docker pull mcr.microsoft.com/dotnet/core/sdk
創建gitlab 與gitlabruner 服務
新建文件:docker-compose.yml ,
在Centos服務器上創建docker-compose.yml文件並運行

docker-compose run -d
複製代碼
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: '192.168.2.2'
environment:

 GITLAB_OMNIBUS_CONFIG: |
   external_url 'http://hts92.wicp.vip:8989'#這裏需要更換成你的固定ip或局域網IP地址(我個人做法是用的動態域名。做的端口映射,如果你是內網做demo無所謂)

ports:

 - '8989:8989'

volumes:

 - '/srv/gitlab/config:/etc/gitlab'
 - '/srv/gitlab/logs:/var/log/gitlab'
 - '/srv/gitlab/data:/var/opt/gitlab'

gitlab-runner:
image: 'gitlab/gitlab-runner:latest'
container_name: 'gitlab-runner'
restart: 'always'
volumes:

  - '/srv/gitlab-runner/confg:/etc/gitlab-runner'
  - '/var/run/docker.sock:/var/run/docker.sock'

複製代碼
到此 gitlab 與gitlab-runner 已經搭建好了。(第一次登陸時需要你設置root用戶密碼這裏我就不截圖了,因爲我已經設置完了。)

接下來進入gitlab 新建個項目。項目名隨意,

進入剛建好的項目

在開發機新建webapi項目:
dotnet new webapi -n user.api --no-https

添加鏡像檢測腳本
添加鏡像檢測刪除腳本到項目根目錄(後續ci構建腳本會用到,每次從新編譯docker file 時 會幫你刪除掉之前的實例跟鏡像):保存爲check-images.sh 放到項目根目錄
if [ $(docker ps -a --format {{.Names}} | grep user-api) ]
then

docker rm -f user-api
docker rmi user-api

fi
創建 .gitlab-ci.yml文件 放到項目根目錄
複製代碼
stages:

  • build
  • deploy

構建

build-job:
stage: build
only:

- master

cache:

untracked: true

script:

- dotnet restore
- dotnet publish -o ./out -c Release

artifacts:

# 可以緩存在gitlab的流水線記錄中,供直接下載
expire_in: 30 days
paths:
  - out/

tags:

- 01-user-api-builder

發佈正式

deploy-job:
stage: deploy
only:

- master

dependencies:

- build-job  # 這裏一定要依賴build-job,不然dockerfile裏面的out目錄無法使用

script:

- ls out/
- docker ps
- sh ./check-images.sh
- docker build -t user-api .
# 這裏可以添加將生成好的image上傳到dockerhub或者docker本地倉庫

### 如果生成的鏡像需要統一上傳到倉庫管理,則後面的邏輯可以分離到另外一個runner去執行
# 這裏可以添加從dockerhub或本地倉庫拉取指定鏡像
- docker run -d --name user-api -p 8080:80 user-api

tags:

- 01-user-api-deploy

複製代碼
創建 Dockerfile文件
創建 Dockerfile文件 放到項目根目錄 (這裏值得注意的是mcr.microsoft.com/dotnet/core/sdk 鏡像名,要跟我們準備環境時候的鏡像名保持一致,要不然build 時還需要在拉取 浪費時間,當然你可可以換成runtime環境的。好處就是編譯鏡像小,用我這個編譯鏡像大)

FROM mcr.microsoft.com/dotnet/core/sdk
WORKDIR /app
COPY out/ /app
ENTRYPOINT [ "dotnet", "/app/user.api.dll" ]

以上內容一同傳至 gitlab剛建好的項目

gitlab項目目錄結構如下

註冊runner,
找到rnner信息

註冊第一個runner
記得替換吊對應信息。(--url,--registration-toke)

複製代碼
docker exec -it gitlab-runner gitlab-runner register -n \
--url http://hts92.wicp.vip:8989/ \
--registration-token QJiAZYz3KSJyhWfsHKhC \
--executor docker \
--tag-list "01-user-api-builder"
--description "01-user-api-builder" \
--docker-image "mcr.microsoft.com/dotnet/core/sdk" \
複製代碼

註冊第二個runner
(值得注意的是: --docker-volumes /var/run/docker.sock:/var/run/docker.sock,當時沒有這句話 我的docker實例無法跟docker容器(docker run docker)本身通訊 。這個問題讓我找了進一天的時間)

複製代碼
docker exec -it gitlab-runner gitlab-runner register -n \
--url http://hts92.wicp.vip:8989/ \
--registration-token QJiAZYz3KSJyhWfsHKhC \
--executor docker \
--tag-list "01-user-api-deploy" \
--description "01-user-api-deploy" \
--docker-image "docker:stable" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock
複製代碼
如下代表runner 已經開始工作了並且執行成功。

查看鏡像
複製代碼
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
user-api latest 62eafc3e4bf6 About a minute ago 1.74GB
mcr.microsoft.com/dotnet/core/sdk 20190726 3af77ac73731 2 days ago 1.74GB
mcr.microsoft.com/dotnet/core/sdk latest 3af77ac73731 2 days ago 1.74GB
gitlab/gitlab-runner-helper x86_64-d0b76032 f8d183475601 2 days ago 52.4MB
docker stable c4154a2b47a1 4 days ago 216MB
mysql/mysql-server latest 12a8d88596c0 4 days ago 294MB
gitlab/gitlab-runner latest 4142c6fc05d4 2 weeks ago 410MB
gitlab/gitlab-ce latest 15563c211d40 3 weeks ago 1.8GB
microsoft/mssql-server-linux latest 314918ddaedf 7 months ago 1.35GB
registry 2.3 83139345d017 3 years ago 166MB
[root@localhost ~]#
複製代碼
查看容器
2ced458eea91 user-api "dotnet /app/User.Ap…" 21 seconds ago Up 20 seconds 0.0.0.0:8080->80/tcp user-api
cfed5894c526 microsoft/mssql-server-linux "/opt/mssql/bin/sqls…" 3 minutes ago Up 3 minutes 0.0.0.0:1433->1433/tcp sqlserver
d713e32ee388 gitlab/gitlab-ce:latest "/assets/wrapper" 3 days ago Up 39 minutes (healthy) 22/tcp, 80/tcp, 443/tcp, 0.0.0.0:8989->8989/tcp gitlab_gitlab_1
e0cf226629d3 registry:2.3 "/bin/registry /etc/…" 3 days ago Up 39 minutes 0.0.0.0:5000->5000/tcp gitlab_registry_1
eab855f64938 gitlab/gitlab-runner:latest "/usr/bin/dumb-init …" 3 days ago Up 39 minutes gitlab-runner
以上容器已經運行成功

測試
(我的Centos虛擬機地址192.168.2.2)

總結:
  看着幾行代碼搞定,但是由於第一次做也耗時將近兩天,隨後在做就簡單多了。整理出以上內容給大家分享。 以下爲參考文章。有問題留言。

參考文章

https://www.lizenghai.com/archives/5180.html#Runner

https://docs.gitlab.com/ee/ci/docker/using_docker_build.html

https://www.jianshu.com/p/43ffba076bc9
原文地址https://www.cnblogs.com/hts92/p/11220604.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章