前言

写代码这项工作,本质就是将工作自动化,减少手工操作提供效率,因为人的本质都是懒狗,程序员也不能例外,为了各种意义的效率提升(懒),我们需要持续集成工具,将代码测试、编译、发布这些重复性很高的工作,全部变成自动化,减轻工作量,提高效率,解放生产力,为华夏伟大复兴贡献力量

说回正题,持续集成工具主流的就 Jenkins 、Gitlab CI/CD 这些,因为我们刚好在用 Gitlab,所以就不去折腾 Jenkins 了,直接用这个好了~

关于 Gitlab 的安装,可以参考我之前写的文章:GitLab的安装、配置、使用

概念科普

缩略词 CI / CD 具有几个不同的含义。CI/CD 中的"CI"始终指持续集成,它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。

CI/CD 中的"CD"指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。两者都事关管道后续阶段的自动化,但它们有时也会单独使用,用于说明自动化程度。

…… (省略又臭又长的名词解释)

只需记得 CI/CD 其实就是一个流程(通常形象地表述为管道),用于实现应用开发中的高度持续自动化和持续监控。因案例而异,该术语的具体含义取决于 CI/CD 管道的自动化程度。许多企业最开始先添加 CI,然后逐步实现交付和部署的自动化(例如作为云原生应用的一部分)。

安装Gitlab-Runner

根据Gitlab官网的指引

# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 # Give it permissions to execute
sudo chmod +x /usr/local/bin/gitlab-runner # Create a GitLab CI user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash # Install and run as service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

服务器使用的是CentOS7系统,实际配置时遇到无法识别gitlab-runner命令的问题,用echo $PATH打印了一下环境变量发现是没有/usr/local/bin,添加到PATH就可以了

安装的时候会自动创建gitlab-runner用户,Runner会在这个用户下执行各种任务,当然用户名和Home目录都可以自定义,就是上面倒数第二个命令。

注册Runner

在Gitlab中,依次进入:菜单 - 管理员 - 概览 - Runner - 注册一个实例Runner

就会出来一个token,使用以下命令注册即可

sudo gitlab-runner register --url http://gitlab地址:端口/ --registration-token HjymWn4gEzHaVizpvG

注册过程中会让你输入一些信息,最后需要选择executer,可选项有virtualbox、docker、shell之类的,这里我选的shell,直接执行命令控制项目部署。其他的executer等后面再来研究用法。

注册完辽就可以在Gitlab的管理界面看到这个Runner了

为了让所有项目都能用这个Runner进行部署,需要修改一下配置,把这个钩打上

配置

为了让gitlab-runner用户能够使用docker,需要将其加入到docker用户组

usermod -aG docker gitlab-runner

配置docker代理

因为我们的生产服务器不能直接访问外网,所以还得配置一下docker的代理

编辑文件:/home/gitlab-runner/.docker/config.json

{
"proxies":
{
"default":
{
"httpProxy": "http://proxy_ip:8080",
"httpsProxy": "http://proxy_ip:8080",
"noProxy": "localhost,127.0.0.1"
}
}
}

gitlab-ci.yml

只要在项目的根目录中加入这个文件,然后推送代码到 Gitlab (一般来说是 master 分支),Gitlab Runner 就会根据 script 来执行构建任务。

平时开发时,如果不想要自动构建,可以 checkout 到其他分支(例如 dev)进行开发,等到功能完成需要发布的时候,再合并到 master 分支即可。

这里我写的是用 docker 部署一个 AspNetCore 应用的例子,实际还有 Python、Go、前端项目等常用例子,我后面再更新相关的文章~

variables:
GIT_STRATEGY: none
stages:
- deploy
deploy_job:
stage: deploy
only:
- master
script:
- cd /home/gitlab-runner/projects/dotnet/dashboard
- rm -rf dashboard-backend
- git clone http://127.0.0.1:8080/deali/dashboard-backend.git
- cd dashboard-backend
- docker-compose up --build -d

小结

这样就搞定了 Gitlab CI/CD 的基础用法,也就是所谓的“持续集成”,可以说灰常好用了~

当然它的功能很强、很多,本文的例子只是用到了其中一种,更多的用法我还在探索中,有收获的话后续会更新这个系列的文章。

参考资料

持续集成指南:GitLab 的 CI/CD 工具配置与使用的更多相关文章

  1. Docker 集成 Jenkins Gitlab 实现 CI/CD

    首先介绍下环境部分,文章中共涉及到三台服务器,分别用 Gitlab,Jenkins,Deploy 三个名称代替,部署在内网环境,同时因为政策原因,服务器无法直接连通外网.下载 Jenkins 插件时需 ...

  2. 7款不错的 CI/CD工具

    时至今日,越来越多的工程团队开始实行敏捷开发,借以推动更短.更快的发布周期.而代码库的增长与更高的生产构建频率,也带动持续集成与持续部署/交付工具快速兴起.如果您有意提升发布频率,或者是不太清楚哪些工 ...

  3. 8款不错的 CI/CD工具

    Jenkins Jenkins是CI市场中最知名且最常见的名号之一.其最初是由Sun公司的一位工程师打造的一个辅助项目,并迅速扩展为最大的开源CI工具之一,可帮助工程团队实现自动化部署.顺带一提:我们 ...

  4. [转] gitlab 的 CI/CD 配置管理

    [From] http://blog.51cto.com/flyfish225/2156602 gitlab 的 CI/CD 配置管理 (二) 标签(空格分隔):运维系列 一:gitlab CI/CD ...

  5. Azure Data Factory(三)集成 Azure Devops 实现CI/CD

    一,引言 由于上一节文章内容过长,无法分享Azure Data Factory 的持续集成,持续发布.今天将着重介绍一下在使用 Azure DevOps Pipeline 发布,自动进行持续集成,并且 ...

  6. 从零入门 Serverless | 企业级 CI/CD 工具部署 Serverless 应用的落地实践

    背景知识 通过以往几节课程的学习,相信大家对于 SAE 平台已经有了一定的了解.SAE 为客户免除了很多复杂的运维工作,开箱即用.按用量付费:与此同时 SAE 提供了丰富的 Open API,可以很容 ...

  7. 持续集成之④:GitLab触发jenkins构建项目

    持续集成之④:GitLab触发jenkins构建项目 一:目的为在公司的测试环境当中一旦开发向gitlab仓库提交成功代码,gitlab通知jenkins进行构建项目.代码质量测试然后部署至测试环境, ...

  8. 使用Gitlab的CI/CD功能自动化推送docker镜像到Nexus仓库出现的问题

    在服务器中可以直接使用命令行登录,推送docker镜像等 但是在使用Gitlab的CI/CD功能中,gitlab-ci.yml文件执行过程中出现如下错误: 原因分析: 服务器上之前使用命令行登陆过Ne ...

  9. 老李分享:持续集成学好jenkins之Git和Maven配置

    老李分享:持续集成学好jenkins之Git和Maven配置   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

随机推荐

  1. NOI / 2.1基本算法之枚举-8760:Cantor表

    总时间限制: 1000ms 内存限制: 65536kB 描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 我们以Z字形给上表的每一项编 ...

  2. Python下载网易云收藏

    提前声明 仅作为个人学习使用,任何版权问题作者概不负责 本文的语言不会且不可能很严谨 博客园的编辑器有点BUG把我搞晕头了,所以本文可能有点鬼畜 前情 不知道各位有几个是对国内大厂的软件设计很满意的? ...

  3. C#委托的最简单入门和理解

      委托是.net语言中非常重要的一个概念,初学不太好理解也没有关系的,在一次一次的攻关后会领会到委托的精妙,可以说 .net 没有委托就没有后面更高级的事件,异步多线程等等特性的形成可能.所以一定要 ...

  4. Odoo Session In Redis

    # odoo session in redis # 一.下载安装Session in Redis免费模块 # 下载地址:https://apps.odoo.com/apps/modules/12.0/ ...

  5. Apache DolphinScheduler 架构演进介绍及开源经验分享 - eBay 阮文俊

    引言 来自 eBay 的文俊同学在近期的上海开源大数据 Meetup 上做了十分精彩的 "Apache DolphinScheduler 的架构演进" 分享.本次分享有近 200 ...

  6. Luogu1856 [USACO5.5]矩形周长Picture (线段树扫描线)

    对于横轴,加上与上一次扫描的差值:对于竖轴,加上高度差与区间内不相交线段\(*2\)的积: 难点在pushdown,注意维护覆盖关系.再就注意负数 #include <iostream> ...

  7. java学习第二天面向对象.day07

    变量的生命周期 成员变量:存储在堆内存中,随着对象的销毁而销毁 局部变量:存储在栈内存中,随着所定义方法的调用结束而销毁 局部变量存储在方法中,每次调用方法都会在栈空间开辟一块内存空间--栈帧,方法调 ...

  8. Java Stream 函数式接口外部实例的引用

    Java Function Interface 函数式接口: Stream.empty() .filter(Predicate) .map(Function) .forEach(Consumer); ...

  9. 【JDBC】学习路径4-分页查询

    第一章:什么是分页查询呢? 简而言之,分页数 就是百度搜索引擎中的网页的页数. 分页查询,就是从数据库中提取一部分出来,给用户. 用处:减少服务器负担. 为了方便测试,我们先给数据库添加大量信息. 还 ...

  10. JavaScript设计模式及代码实现——单例模式

    单例模式 1 定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 2 应用时机 当一个类的实例被频繁使用,如果重复创建这个实例,会无端消耗资源.比如 dialog 弹窗会被全局重复使用 业务 ...