前言

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

说回正题,持续集成工具主流的就 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. Unity3D学习笔记9——加载纹理

    目录 1. 概述 2. 详论 2.1. Resources方式 2.2. API方式 2.3. Web方式 1. 概述 理论上,Unity中加载纹理并没有什么难度,只需要将图片放置在Assets文件夹 ...

  2. MPI学习笔记(二):矩阵相乘的两种实现方法

    mpi矩阵乘法(C=αAB+βC) 最近领导让把之前安装的软件lapack.blas里的dgemm运算提取出来独立作为一套程序,然后把这段程序改为并行的,并测试一下进程规模扩展到128时的并行效率.  ...

  3. nginx编译安装支持lua脚本

    一.准备编译环境 1.操作系统:CentOS7.6 2.安装编译所需安装包 yum install gcc pcre pcre-devel zlib zlib-devel openssl openss ...

  4. get 和 post 的区别

    1. get 提交的信息显示在地址栏中 post 提交的信息不显示在地址栏中 2. get 对于敏感数据信息不安全,因为信息显示在地址栏中 post 对于敏感数据安全 3. get 不支持大数据量请求 ...

  5. React报错之Object is possibly null

    正文从这开始~ 类型守卫 使用类型守卫来解决React中useRef钩子"Object is possibly null"的错误.比如说,if (inputRef.current) ...

  6. 文件上传接入阿里云OSS

    目的:将文件交给阿里云进行管理,可避免文件对本地服务器资源的占用,阿里云OSS还可根据读写偏好选择合适的文件存储类型服务器,文件异地备份等 一.阿里云OSS基础了解(前提) 1.存储空间(Bucket ...

  7. 如何在BI中增加“路线地图”并进行数据分析?

    随着客户的需求越来越"百变",最近在做大屏设计的葡萄陷入了困境. 近期客户提出的需求是想在BI工具中增加 "路线地图"展示功能并进行数据分析. 不仅如此,这个& ...

  8. Luogu1880 [NOI1995]石子合并 (区间DP)

    一个1A主席树的男人,沦落到褪水DP举步维艰 #include <iostream> #include <cstdio> #include <cstring> #i ...

  9. 非常全的一份Python爬虫的Xpath博文

    非常全的一份Python爬虫的Xpath博文 Xpath 是 python 爬虫过程中非常重要的一个用来定位的一种语法. 一.开始使用 首先我们需要得到一个 HTML 源代码,用来模拟爬取网页中的源代 ...

  10. vivo 基于 JaCoCo 的测试覆盖率设计与实践

    作者:vivo 互联网服务器团队- Xu Shen 本文主要介绍vivo内部研发平台使用JaCoCo实现测试覆盖率的实践,包括JaCoCo原理介绍以及在实践过程中遇到的新增代码覆盖率统计问题和频繁发布 ...