.NetCore 配合 Gitlab CI&CD 实践 - 开篇
引言
这是一个系列的文章,讲述的是一个中小型开发团队如何从零开始使用搭建基建 GitLab
代码托管平台,以及使用 GitLab Runner
实现 CI/CD
的故事。本系列通过部署一个完整的 .net core
项目来做配合实战,可能这个案例并不能适合每个人,但希望可以给刚接触 GitLab
以及 CI/CD
的小伙伴带来一些启发。对 GitLab
以及 CI/CD
有一定了解的,可以略过本文,直接开启下一章。
Gitlab CI&CD 是什么?
如上官方图示,可以理解为 Gitlab 给开发者提供了一项功能,在代码提交后自动触发一段开发者自定义的脚本,以此来完成诸如但不限于构建部署的工作。完成一次项目发布我们通常需要以下 4 个步骤:
- 编译
- 测试
- 构建
- 部署
编译
在编译阶段我们是运行 dotnet build
进行包还原以及项目编译,这里还可以包含团队的代码风格检查
测试
测试阶段主要跑我们自己写的单元测试,题外话:测试也挺难写的
构建
将我们测试通过的项目打包成 docker 镜像,上传到镜像仓库
部署
从镜像仓库上拉取我们镜像,部署到集群上,这里后面我们使用 docker-compose
部署
准备工作
我们这里需要做的事情串起来就是,代码提交到 gitlab
,触发平台的 CI/CD
任务,开始编译代码,运行测试,打包镜像并上传镜像,最后部署应用。
安装 GitLab
version: "3"
services:
gitlab:
image: gitlab/gitlab-ce:13.1.2-ce.0
container_name: 'devops-gitlab'
restart: always
hostname: '<your hostname>'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url "<your gitlab url>"
gitlab_rails['gitlab_shell_ssh_port'] = 23
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "<your qq email>"
gitlab_rails['smtp_password'] = "xCcqh*L4jkqFCS"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '<your qq email>'
gitlab_rails['smtp_domain'] = "exmail.qq.com"
ports:
- '81:80'
- '443:443'
- '23:22'
volumes:
- '/gitlab/config:/etc/gitlab'
- '/gitlab/logs:/var/log/gitlab'
- '/gitlab/data:/var/opt/gitlab'
logging:
driver: "json-file"
options:
max-size: "20m"
max-file: "10"
我这边使用 docker-compose 来安装的,替换掉上面的对应的 域名地址 以及 邮箱即可使用。我这里用的是 QQ 企业邮箱你也可以换成其他的。随后在配置一下 nginx, 可以通过 80 端口访问 gitlab。
upstream gitlab{
# 域名对应 gitlab配置中的 external_url
# 端口对应 gitlab 配置中的 nginx['listen_port'],通过环境变量可设置
server 192.168.1.42:81;
}
server{
listen 80;
# 此域名是提供给最终用户的访问地址
server_name <your gitlab host name>;
location / {
# 这个大小的设置非常重要,如果 git 版本库里面有大文件,设置的太小,文件push 会失败,根据情况调整
client_max_body_size 50m;
proxy_redirect off;
#以下确保 gitlab中项目的 url 是域名而不是 http://git,不可缺少
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 反向代理到 gitlab 内置的 nginx
proxy_pass http://gitlab;
index index.html index.htm;
}
}
安装 GitLab Runner
# For Debian/Ubuntu/Mint
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
# For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
- 注册 runner
首先要先获取gitlab-ci的Token:
项目主页 -> Sttings -> CI/CD -> Runners Expand
使用命令注册 gitlab-runner:
gitlab-runner register
需要按照步骤输入:
- 输入 gitlab 的服务URL,就是你 gitlab 的访问地址
- 输入 gitlab-ci 的Toekn,获取方式参考上图
- 关于集成服务中对于这个 runner 的描述
- 给这个 gitlab-runner 输入一个标记,这个 tag 非常重要,在后续的使用过程中需要使用这个 tag 来指定 gitlab-runner
- 是否运行在没有 tag 的 build 上面。在配置 gitlab-ci 的时候,会有很多 job,每个job可以通过tags属性来选择runner。这里为true表示如果job没有配置tags,也执行
- 是否锁定 runner 到当前项目
- 选择执行器,gitlab-runner 实现了很多执行器,可用在不同场景中运行构建,详情可见 GitLab Runner Executors,这里选用 Shell 模式
重复执行两次,分别选择 shell
模式以及 docker
模式
刷新页面就可以看到新增的一个Runner:
- 开通阿里云 docker 镜像仓库
这个上阿里云开通一下还是简单的,就不细讲了
结束
好了,到这里准备工作差不多了,下一篇开始实战。
.NetCore 配合 Gitlab CI&CD 实践 - 开篇的更多相关文章
- .NetCore 配合 Gitlab CI&CD 实践 - 单体项目
前言 上一篇博文 .NetCore 配合 Gitlab CI&CD 实践 - 开篇,主要简单的介绍了一下 GitLab CI 的持续集成以及持续部署,这篇将通过 GitLab CI 发布一个 ...
- 实践分享!GitLab CI/CD 快速入门
用过 GitLab 的同学肯定也对 GitLab CI/CD 不陌生,GitLab CI/CD 是一个内置在 GitLab 中的工具,它可以帮助我们在每次代码推送时运行一系列脚本来构建.测试和验证代码 ...
- CI Weekly #6 | 再谈 Docker / CI / CD 实践经验
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- 前端初探 Gitlab CI/CD
前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就是其中一项,那么什么是 C ...
- Gitlab CI/CD
Gitlab CI/CD 前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就 ...
- [转]GitLab Continuous Integration (GitLab CI/CD)
本文转自:https://docs.gitlab.com/ee/ci/README.html GitLab Continuous Integration (GitLab CI/CD) The bene ...
- 使用 Gitlab CI/CD 实现自动化发布站点到 IIS
说明 这里先介绍下两个东西 CI/CD.GitLab Runner,当然在此之前你需要对 git 有所了解,关于 git 这里不做说明,可以自行百度. 首先介绍 CI/CD :随着我们开发方式的转变, ...
- .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker
之前写过使用Jenkins实现自动化部署,最近正好没事研究了下GitLab的自动化部署,顺便记录一下. 使用GitLab部署我们需要准备两件事,第一个起码你得有个GitLab,自己搭建或者使用官方的都 ...
- GitLab CI/CD持续集成设置
GitLab CI/CD持续设置 官方文档地址(https://docs.gitlab.com/ee/ci/README.html) GitLab CI.CD功能非常完善,只需要简单几步,就可以完成项 ...
随机推荐
- Pandas基础知识图谱
所有内容整理自<利用Python进行数据分析>,使用MindMaster Pro 7.3制作,emmx格式,源文件已经上传Github,需要的同学转左上角自行下载或者右击保存图片.该图谱只 ...
- 用Helm部署Kubernetes应用,支持多环境部署与版本回滚
1 前言 Helm是优秀的基于Kubernetes的包管理器.利用Helm,可以快速安装常用的Kubernetes应用,可以针对同一个应用快速部署多套环境,还可以实现运维人员与开发人员的职责分离.现在 ...
- 题解:2018级算法第一次上机 C1-pair
题目描述 北航2018级软件学院算法分析与设计第一次上机第三题 样例 实现解释 题目类型: 这类题目其实就是典型的递归分析语句形式的问题,也是编译原理课程中语法分析的重要方法之一. 解决方案: 为了解 ...
- JavaScript学习 Ⅴ
十. 一些对象 Date 对象 Date对象用来表示一个时间 创建Date对象 如果直接使用构造函数创建一个Date对象,则会封装为当前代码执行的时间 var d = new Date(); 创建一个 ...
- 萌新计划 PartⅠ
Part Ⅰ web1-7 题目总体代码框架如下,其中过滤内容不同,大体上通过构造出id=1000类似的语句进行绕过,得到flag <?php # 包含数据库连接文件 include(" ...
- .NET Core微服务开发服务间调用篇-GRPC
在单体应用中,相互调用都是在一个进程内部调用,也就是说调用发生在本机内部,因此也被叫做本地方法调用:在微服务中,服务之间调用就变得比较复杂,需要跨网络调用,他们之间的调用相对于与本地方法调用,可称为远 ...
- Jmeter(十七) - 从入门到精通 - JMeter后置处理器 -上篇(详解教程)
1.简介 后置处理器是在发出“取样器请求”之后执行一些操作.取样器用来模拟用户请求,有时候服务器的响应数据在后续请求中需要用到,我们的势必要对这些响应数据进行处理,后置处理器就是来完成这项工作的.例如 ...
- python环境搭建及配置
我选择的是pycharm,这个对新手比较友好 我目前正在自学周志华的西瓜书,在做练习题3.3时需要用到python来实现,做这个练习需要numpy库和matplot库,最开始的时候忘了anaconda ...
- 深入理解JVM(二)垃圾收集器
GC三问: 哪些内存需要回收? 什么时候回收? 如何回收? 程序计数器.虚拟机栈.本地方法栈随线程而生,随线程而灭,栈帧的内存分配在类结构确定下来就已知,在方法结束或者线程结束时就会回收.所以垃圾回收 ...
- 主机无法访问虚拟机中运行的Django项目
在虚拟机中的linux上运行了Django项目,虚拟机中可以访问,但外部主机无法访问(连接超时),但主机能ping同虚拟机,虚拟机也能ping通主机 需检查三个地方:(后面发现虚拟机的ip地址存在改变 ...