文档章节

docker环境下使用gitlab,gitlab-runner 为 NetCore 持续集成

SEOwhywhy
 SEOwhywhy
发布于 07/27 09:52
字数 1331
阅读 13
收藏 0

  环境
  
  Centos7.6 安装应用docker,docker-compose (我的Centos是用Hyper-V跑的分了8G的内存,阿里云2G根本跑不起来gitlab)
  
  为了保证我的Centos环境干净所以我的gitlab与gitlab-runner都是采用docker服务运行,包括后续的runner的工作形式(executor)也是选的docker。
  
  准备工作:
  
  拉取镜像:这步骤耗时挺长的,耐心等待吧(如果这个镜像没有了,你可以去hub.docker.com搜一下对应的镜像)
  
  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 -www.renheeyuLe.com 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 -www.chaoyul.com -name user-api http://kunlunyule.com/-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", www.chengmingdl.com"/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)
  
  总结:
  
  看着几行代码搞定,但是由于第一次做也耗时将近两天,随后在做就简单多了。整理出以上内容给大家分享。 以下为参考文章。有问题留言。
  
  参考文章

© 著作权归作者所有

SEOwhywhy
粉丝 8
博文 155
码字总数 342404
作品 0
私信 提问
DevOps 流水线工具 gitlab-ci 实践

GitLab-CI GitLab-CI 是一套配合 GitLab 使用的持续集成系统。当然,还有其它的持续集成系统,同样可以配合 GitLab 使用,比如 Jenkins。上一遍文章利用自定义 DSL 简化 jenkins 流水线,就是...

scottlin
03/24
0
0
【持续集成】GitLab CI + Docker 实现持续集成

GitLab CI + Docker 实现持续集成 一、持续集成(Continuous Integration, CI)的基本概念 概述 在传统软件的开发中,代码的集成工作通常是在所有人都将工作完成后在项目即将结束进行时,而...

周二
08/26
0
0
docker环境下使用gitlab,gitlab-runner 为 NetCore 持续集成

环境 Centos7.6 安装应用docker,docker-compose (我的Centos是用Hyper-V跑的分了8G的内存,阿里云2G根本跑不起来gitlab) 为了保证我的Centos环境干净所以我的gitlab与gitlab-runner都是采...

一身大彪
07/27
0
0
前端的gitlab的ci初尝试

title: 前端的gitlab的ci尝试 date: 2018-05-22 11:56:22 tags: gitlab ci 本文记录一个前端部署Gitlab的CI。不是在自己的服务器上面搭建的Gitlab。使用的是Gitlab.com的Gitlab的CI,在腾讯云...

小落
2018/05/22
0
0
asp.net core结合Gitlab-CI实现自动化部署

0、目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一、前言 在之前的文章中写过k8s+Jenkins+GitLab-自动化部署asp.net core项目 的topic,这次讲解一下gitlab-ci的CI/CD,说实话,自动...

如痴如醉
01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

会用python把linux命令写一遍的人,进大厂有多容易?

看过这篇《2000字谏言,给那些想学Python的人,建议收藏后细看!》的读者应该都对一个命令有点印象吧?没错,就是 linux 中经常会用到的 ls 命令。 文章中我就提到如何提升自己的 python 能力...

上海小胖
11分钟前
1
0
HashMap的特性

一、hashmap数据结构:哈希表结构:数组+链表 hashmap调用默认构造方法会产生一个默认底层是长度为16的Entry数组,首先调用key的hasCode()方法来得到一个整数, int hash = hash(key.hashCode...

GGbird
11分钟前
2
0
第五章 spring-connet之Imports注解来龙去脉

前言 imports是一个在spring体系里非常重要的注解,基本每个Enable开头的注解必然有一个import注解。接下来我们深入研究下import的作用。看小节的同学建议先取看PostProcessorRegistrationDe...

鸟菜啊
15分钟前
1
0
CentOS部署Harbor镜像仓库

关于Harbor Harbor是用于存储和分发Docker镜像的镜像仓库服务,相比Docker Registry,Harbor在安全、标识、管理等方面做了增强,更适合企业使用; 官方网站:https://goharbor.io/ 官方开源:...

程序员欣宸
19分钟前
1
0
JavaScript调试必会的8个console方法

每个JavaScript开发者都用过console.log()来调试程序,但实际上Console对象还提供了很多其他方法可以提高调试效率。本文将介绍8个有趣的Console方法,即使JavaScript老手也不一定知道! 1、c...

汇智网教程
41分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部