前端篇文章中,我们已经成功的将asp.net core webapi在Docker容器中运行,并且部署了一套自己的GitLab环境。

.Net & Docker(二)5分钟快速用Docker部署你自己的GitLab

. Net & Docker(一)在Docker容器上运行.Net Core API

接下来我们将用GitLab CI 来做到当有代码提交时自动部署asp.net core web api到Docker容器。

  • GitLab CI 介绍
  • 安装本地Shell Runner
  • 注册Runner
  • 编辑 .gitlab-ci.yml 执行任务

GitLab CI 介绍

GitLab CI 是GitLab的一部分,提供了一套UI及API用来管理项目的构建等。每一个构建请求称之为job,而这些job最后会被指定的Runner来执行。

Runner是GitLab CI的重要组件之一,它可以部署在独立的服务器上,不影响GitLab服务器。

GitLab CI 支持多平台(Windows、OSX、Unix) 多语言(Java、Php、Ruby等),这其中自然也包括C#。它还有以下几个特性:

  • 分布式运行:多服务器、并行
  • 可以运行在本地、Docker容器、SSH Remote等
  • 支持批处理:windows、Power Shell (这让我们用msbuild 编译上一代的.net程序有了可能)

Runner三步走:

  1. 安装
  2. 注册
  3. 使用

在使用也就是执行阶段,GitLab Runner 给我们提供了以下7种执行方式。官方称之为 executors。

  • Shell
  • Docker
  • Docker Machine
  • Parallels
  • VirtualBox
  • SSH
  • Kubernetes

在注册Runner阶段,我们就需要选择executor,我们今天将选择使用本地Shell这种大家最熟悉的方式来执行作业Job。

安装本地Shell Runner

  1. 下载安装
sudo curl --output /usr/local/bin/gitlab-runner 
https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-darwin-amd64

2. 提升权限

sudo chmod +x /usr/local/bin/gitlab-runner

注册Runner

1. 输入以下命令启动注册

sudo gitlab-runner register
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )

2. 我们会输入 http://127.0.0.1 也就是我们安装在本地的GitLab

3. Please enter the gitlab-ci token for this runner 要求输入 gitlab-ci token

在项目的 Settings->Pipelines中可以找到

4. 输入描述

5. 输入tag(留空也可以,之后可以进行编辑 )

6. 选择当遇到没有打标签的提交时是否会执行,我们选 true

7. 是否锁定此runner 到当前项目, 我们选 false

8. 先一个执行者 executor

这一步比较重要 (ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell) 我们先shell在本地执行。

9. 选择默认使用的镜像: microsoft/dotnet:latest

在注册完之后,我们可以在GitLab获取gitlab-ci token 的页面看到我们刚刚注册的这个 runner

编辑.gitlab-ci.yml 执行任务

这是我们今天的最后一步,也非常简单。我们只需要在根目录添加 .gitlab-ci.yml的 输入两行命令即可。

build_image:
  script:
    - docker build -t my-docker-image .
    - docker run -t -p 8080:80 my-docker-image

而这两句命令就是我们自己去构建镜像,以及运行容器的命令只不过由 gitlab-ci runner 来执行而已。

我们最后要做的只需要提交一份代码即可:

编辑了一下 .gitlab-ci.yml文件并把它提交到gitlab。

这个commit下会有一个任务被自动触发执行,查看这个任务,和我们在命令行执行 docker build 和 docker run 没有什么两样 。

最后我们可以直接访问重新编译之后的结果 。

docker images

查看我们的镜像列表, my-docker-image刚刚被更新。

docker ps

查看我们的容器列表,基于 my-docker-image 启动的容器也已经被更新。

到这里我们已经完成了 dotnet core api 自动部署到 Docker 的全部过程,有了CI持续集成之后,我们开发完成代码自测通过之后只需要提交代码即可自动发布到测试完成(测试通过之后,还可以一键部署到生产环境)需要人工操作。同时还可以在CI中加入自动化测试,以保障开发快速稳定地迭代。

分类: 技术随笔

1 条评论

hunter · 2018年7月25日 下午5:52

顶一个

发表评论

电子邮件地址不会被公开。 必填项已用*标注