环境

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"

最新文章

  1. 06.LoT.UI 前后台通用框架分解系列之——浮夸的图片上传
  2. php中用GD绘制折线图
  3. windows 下 gvim打开默认全屏显示
  4. JavaScript学习笔记——对象分类
  5. 读<jQuery 权威指南>[6]--实用工具函数
  6. 安装了iis之后,打开默认网站http://localhost/要求输入用户名和密码解决办法
  7. JSP文件下载及出现getOutputStream() has already been called for this response的解决方法
  8. URAL 1200 Horns and Hoofs 枚举
  9. sql server抓取表结构的语句
  10. Entity Framework 实践系列 —— 搞好关系 - 单相思(单向一对一,one-to-one)【转】
  11. C++经典题目:有n个人围成一圈,顺序排号,然后数数进行淘汰的解法和一些思考
  12. Java 感知Mysql存储过程变量数量
  13. [KISSY5系列]KISSY5安装使用(一)
  14. Python3中的模块
  15. Android WebView的缓存方式分析
  16. What a Ridiculous Election UVALive - 7672 (BFS)
  17. Android--Activity中使用Intent传值
  18. Linux在终端命令行模式下智能补全功能以及组合键
  19. 通过selenium登录网页获取特定信息
  20. 笔记:mysql升序排列asc,降序排列desc

热门文章

  1. Codility---FrogJmp
  2. win7 docker安装文件及安装问题
  3. 打包成war包之后如何读取配置文件
  4. Scala 学习之路(五)—— 集合类型综述
  5. oracle 和 mysql 常用语句对比汇总
  6. code forces 1173 B. Nauuo and Chess
  7. kali Linux渗透测试技术详解
  8. 微信小程序map组件z-index的层级问题
  9. 高并发架构系列:Redis缓存和MySQL数据一致性方案详解
  10. UVa 1440:Inspection(带下界的最小流)***