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搜一下对应的镜像)
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)
总结:
看着几行代码搞定,但是由于第一次做也耗时将近两天,随后在做就简单多了。整理出以上内容给大家分享。 以下为参考文章。有问题留言。
参考文章
转载于:https://my.oschina.net/u/3386278/blog/3079799
docker环境下使用gitlab,gitlab-runner 为 NetCore 持续集成相关推荐
- docker 启动命令_Jenkins视频课程在Docker环境下安装Jenkins,命令行如何启动Jenkins...
Tomcat是Apache开发的一款servlet容器,可以提供java服务,作为服务器来使用.Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建.部署.自动化, 满 ...
- docker环境下solr6.0配置(中文分词+拼音)
前言:这篇文章是基于之前的"linux环境下配置solr5.3详细步骤"(http://www.cnblogs.com/zhangyuan0532/p/4826740.html)进 ...
- Docker环境下Java应用的最大内存和堆内存的设置
Docker环境下Java应用的最大内存和堆内存的设置 1. 设置应用允许使用的最大内存 通过docker run(创建一个新的容器并运行)命令中设置-m来进行设置.案例如下所示. docker r ...
- PaddleOCR——Docker环境下基于HubServing模式部署Restful API服务(CPU版本)
Docker环境下基于HubServing模式部署Restful API服务(CPU版本) 在日常项目应用中,相信大家一般都会希望能通过Docker技术,把PaddleOCR服务打包成一个镜像,以便在 ...
- 如何在 Docker 环境下自动给 .NET 程序生成 Dump
前言 之前"一线码农"大佬有写文章介绍了如何在 windows 下自动 dump,正好手里有个在 docker 环境下 dump 的需求,所以在参考大佬文章的基础上,有了本篇. 工 ...
- php stomp rabbitmq,docker环境下的RabbitMQ部署,Spring AMQP使用
AMQP简介 AMQP,即 Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦和 ...
- MySQL在Docker环境下运行基础
墨墨导读:MySQL在Docker环境下运行的基础操作,本文从Docker介绍.安装Docker.MySQL安装部署几个方面展开介绍. 另:墨天轮邀请到原厂专家直播解析MySQL的性能管理,欢迎大家报 ...
- Docker环境下的前后端分离部署与运维 脚本
<Docker环境下的前后端分离部署与运维>脚本 文章目录 <Docker环境下的前后端分离部署与运维>脚本 一.Docker虚拟机常用命令 二.安装PXC集群,负载均衡,双机 ...
- docker环境下orientdb的数据库导入与导出
前言 orientdb 是一个开源的多模型 NoSQL 数据库,本文记录docker环境下部署的orientdb实现数据库的导出与导入 进入orientdb 由于是docker环境部署,我们需要先进入 ...
- Linux服务器docker环境下Jasper Report报错
Linux服务器docker环境下Jasper Report报错 Jasperreports模板制作方法在网上都有很多教程,可以自行探索一下 我用的模板参考:https://blog.csdn.net ...
最新文章
- 前端 重构时需要注意的事项_驾驶式扫地车的功能特点和使用时需要注意事项...
- CSS之布局(盒子的水平布局)
- Linux---管理网络
- java微信oppo,OPPO实现全球首次5G微信视频通话,国产手机满分操作
- 【HDU 2814 扩展欧拉 a^b ≡ (a mod c)^b mod ϕ(c)+ϕ(c) modc,b=ϕ(c) 】
- java sunjce,无法初始化类javax.crypto.SunJCE_b
- qt实现窗口拖动的两种思路
- 项目落地才是硬道理!TensorFlow 2 牛了
- 惠普触控板使用指南_惠普笔记本触摸板使用技巧
- Windows错误、问题汇总
- 紫光视频平台服务器系统,紫光展锐打造操作系统生态,赋能万物互联智能时代...
- 多项式拟合缺点_常见算法优缺点
- Windows环境下搭建Redis集群
- OpenCV中文文档4.0.0学习笔记(更新中……)
- 03-能看懂代码,就是自己写不出来,怎么办?
- DLM分布式锁的实现机制
- 力扣 167. 两数之和 II - 输入有序数组
- 【什么是 Nodejs ?】
- HDOJ 1495 倒可乐(BFS)
- 物联网云平台的优势有哪些
热门文章
- linux系统下检测硬盘上的坏道和坏块
- Shell 使用日期或计数器 命名 文件和文件夹
- sql server主键自增
- 【汇智学堂】-python小游戏(太空阻击之二-准备工作)
- 京东店铺产品关键词如何进行选择,如何优化?
- 人事面试100问,助你从容面对
- 计算机系统综述3000字,计算机系统试验综述.doc
- 无状态应用:Deployment副本应用及水平扩展
- CenterFace: Joint Face Detection and Alignment Using Face as Point
- java 打洞_TCP打洞和UDP打洞的区别 (相互直接访问)