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 -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 "helloapi-build" \
--description "helloapi-deploy-job" \
--docker-image "mcr.microsoft.com/dotnet/core/sdk:3.1"
注册第二个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 .74GB
mcr.microsoft.com/dotnet/core/sdk 3af77ac73731 days ago .74GB
mcr.microsoft.com/dotnet/core/sdk latest 3af77ac73731 days ago .74GB
gitlab/gitlab-runner-helper x86_64-d0b76032 f8d183475601 days ago .4MB
docker stable c4154a2b47a1 days ago 216MB
mysql/mysql-server latest 12a8d88596c0 days ago 294MB
gitlab/gitlab-runner latest 4142c6fc05d4 weeks ago 410MB
gitlab/gitlab-ce latest 15563c211d40 weeks ago .8GB
microsoft/mssql-server-linux latest 314918ddaedf months ago .35GB
registry 2.3 83139345d017 years ago 166MB
[root@localhost ~]#
查看容器
2ced458eea91 user-api "dotnet /app/User.Ap…" seconds ago Up seconds 0.0.0.0:->/tcp user-api
cfed5894c526 microsoft/mssql-server-linux "/opt/mssql/bin/sqls…" minutes ago Up minutes 0.0.0.0:->/tcp sqlserver
d713e32ee388 gitlab/gitlab-ce:latest "/assets/wrapper" days ago Up minutes (healthy) /tcp, /tcp, /tcp, 0.0.0.0:->/tcp gitlab_gitlab_1
e0cf226629d3 registry:2.3 "/bin/registry /etc/…" days ago Up minutes 0.0.0.0:->/tcp gitlab_registry_1
eab855f64938 gitlab/gitlab-runner:latest "/usr/bin/dumb-init …" days ago Up 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
docker exec -it gitlab-runner gitlab-runner register -n \ --url http://hts92.wicp.vip:8989/ \ --registration-token QJiAZYz3KSJyhWfsHKhC \ --executor docker \ --tag-list "helloapi-build" \ --description "helloapi-deploy-job" \ --docker-image "mcr.microsoft.com/dotnet/core/sdk:3.1"
docker环境下使用gitlab,gitlab-runner 为 NetCore 持续集成的更多相关文章
- Docker环境下的Mysql8 实现主从数据库数据同步方案
本文记录下通过MySQL Replication在Docker环境下,通过多个容器 实现数据库主从配置. MySQL Replication就不多解释了,简单说就是MySQL非常出色的一个功能,该功能 ...
- docker环境下solr6.0配置(中文分词+拼音)
前言:这篇文章是基于之前的“linux环境下配置solr5.3详细步骤”(http://www.cnblogs.com/zhangyuan0532/p/4826740.html)进行扩展的.本篇的步骤 ...
- docker环境下solrcloud+zookeeper集群部署教程
前言:两个月前的16年11月份完成的配置,使用的solr6.1和zookeeper3.4,刚刚写成blog,目前版本可能有小版本的变化. 本例完成结果为:在docker环境下部署solrcloud集群 ...
- Mac+Docker环境下xdebug的配置
由于容器化的需要,前几天我本地也换成了docker环境.就研究了一下docker环境下phpstorm和xdebug的配置. http://www.mmfei.com/?p=453 这个博客给出了一个 ...
- Elasticsearch Docker环境下安装
Elasticsearch Docker环境下安装 Daemon镜像配置的是https://registry.docker-cn.com Linux:vi /etc/docker/daemon.jso ...
- docker环境下mysql参数修改
原文:docker环境下mysql参数修改 需要修改log_bin为on,看了好几个博客说都需要删掉容器重新生成,然而并非如此, 我们可以用docker cp 命令将docker的文件"下载 ...
- Docker环境下Java应用的最大内存和堆内存的设置
Docker环境下Java应用的最大内存和堆内存的设置 1. 设置应用允许使用的最大内存 通过docker run(创建一个新的容器并运行)命令中设置-m来进行设置.案例如下所示. docker r ...
- 如何在 Docker 环境下自动给 .NET 程序生成 Dump
前言 之前"一线码农"大佬有写文章介绍了如何在 windows 下自动 dump,正好手里有个在 docker 环境下 dump 的需求,所以在参考大佬文章的基础上,有了本篇. ...
- Docker环境下运行python+selenium+chrome
Docker环境下运行python+selenium+chrome docker运行时占用的资源非常少,而且能将环境进行有效的隔离,可以快速的进行部署,因此可以将docker与selenium结合实现 ...
- Nginx系列(8)- Nginx安装 | Docker环境下部署
Docker环境下部署Nginx https://www.cnblogs.com/gltou/p/15186971.html
随机推荐
- java多线程之wait和notify
多线程中的通信是非常重要的概念,线程直接实现通信就可以并发完成很多复杂工作. java在Object类中就设计了wait()和notify()两个方法,以解决这个问题. 1.释义: wait()方法将 ...
- export命令的使用
一:export将环境变量昭告天下 1.直接输入export会将显示bash下的所有环境变量 2.env/set/export/declare都可以显示shell的变量 ...
- What?Tomcat-竟然也算中间件?
关于 MyCat 的铺垫文章已经写了两篇了: MySQL 只能做小项目?松哥要说几句公道话! 北冥有 Data,其名为鲲,鲲之大,一个 MySQL 放不下! 今天是最后一次铺垫,后面就可以迎接大 Bo ...
- 【POJ - 3414】Pots(bfs)
Pots 直接上中文 Descriptions: 给你两个容器,分别能装下A升水和B升水,并且可以进行以下操作 FILL(i) 将第i个容器从水龙头里装满(1 ≤ i ≤ 2); DRO ...
- C# 异步转同步 TaskCompletionSource
本文通过TaskCompletionSource,实现异步转同步 首先有一个异步方法,如下异步任务延时2秒后,返回一个结果 private static async Task<string> ...
- 关于重写equals()和hashCode()的思考
最近这几天一直对equals()和hashCode()的事搞不清楚,云里雾里的. 为什么重写equals(),我知道. 但是为什么要两个都要重写呢,我就有点迷糊了,所以趁现在思考清楚后记录一下. 起因 ...
- 新手如何学python?
在学习Python前,你应该规划好自己的学习方向,毕竟Python的方向比较多,比如: web开发 爬虫 自动化开发(运维,测试).脚本开发 大数据(数据挖掘,数据分析) 人工智能.机器学习 选择好自 ...
- 使用SpringSecurity搭建授权认证服务(1) -- 基本demo认证原理
使用SpringSecurity搭建授权认证服务(1) -- 基本demo 登录认证是做后台开发的最基本的能力,初学就知道一个interceptor或者filter拦截所有请求,然后判断参数是否合理, ...
- WIN7下vs2010滑轮滚动不正确的解决方法
win7下vs2010在滚动滑轮时文档滚动条不滚动而是解决方案的滚动条滚动的解决方法, 控制面板>设备和打印机>鼠标设置>滚轮选项卡里面将滚轮功能设置设为只使用office97预设的 ...
- html select 可输入 可编辑
<HTML> <HEAD> <META http-equiv='Content-Type' content='text/html; charset=gb2312'> ...