作者 | 存诚 阿里云弹性计算团队
来源 | Serverless 公众号,整理自《Serverless 技术公开课》

导读:本节课程为您介绍如何基于阿里云 Serverless Kubernetes(简称 ASK)服务,来快速构建 GitLab 持续集成环境。

ASK 介绍

首先,ASK 是什么?ASK 是阿里云推出的无服务器版 Kubernetes 容器服务。与传统的 Kubernetes 服务相比,ASK最大的特点就是通过虚拟节点接入 Kubernetes 集群,而 Kubernetes 的 Master 节点也完全由阿里云容器服务托管。因此,在整个 ASK 集群中,用户无需管理和运维真实节点,只用关心 Pod 资源即可,ASK 中的 Pod 则由阿里云弹性容器实例 ECI 承载。

ASK 的优势主要有以下几点:

  • 降低用户使用 Kubernetes 的门槛,无需管理 Node 节点;
  • 无需考虑节点的容量规划;
  • 以 Pod 为单位按需计费;
  • 宕机故障影响面小,Pod 级别。

同时,ASK 主要适用的场景有:

  • 在线业务弹性(视频直播、在线教育);
  • 大数据计算(Spark);
  • 定时任务;
  • CI/CD 持续集成。

GitLab CI on ASK 的优势

说到 CI/CD,大家最熟悉的两个工具,一个是 Jenkins,另一个是 GitLab CI,随着 Devops 角色的流行,越来越多的企业采用 GitLab CI 作为持续集成的工具,下面给大家介绍下 GitLab CI on ASK。gitlab-runner 以 Pod 形式注册到 ASK 集群中,每个 CI/CD stage 也对应一个 Pod。

这么做的优势有以下几点:

  • 服务高可用(Deployment+PVC);
  • 无需维护 K8s Master、Node 节点,在没有任何构建任务的情况下,只需要运行一个 Pod(gitlab-runner);
  • 触发一个构建任务,启动一个 Pod,按需计费;
  • 宕机故障只会影响以 Pod 为单位。

实践演示

接下来给大家演示如何在阿里云 ASK 集群上部署 gitlab-runner,并且通过 gitlab CICD Pipeline 部署 Java 应用到 ASK 集群中。

其中涉及到的知识点主要有:

  • 通过 configMap 保存 gitlab runner 和 executor 的配置;
  • 通过 secret 保存 ASK 集群的访问凭证和镜像仓库的密钥;
  • 通过 PVC 缓存 runner cache 和 maven 仓库;
  • 通过 imageCache 缓存容器镜像。

本节课程涉及到的所有的配置文件(yaml)都已经上传到 github 供大家下载【下载链接】。

下面开始演示,视频版演示请点击【观看链接】。

1. 准备 ASK 集群

  • 在【容器服务控制台】创建标准 Serverless K8s 集群

  • 集群创建完成后,基本信息中有 API server 公网链接地址

  • 连接信息中有 ASK 集群访问凭证

2. 准备 PV/PVC

准备两个 nas 盘,一个做 gitlab runner cache,一个做 maven 仓库,请自行替换 nas server 地址和path

kubectl apply -f mvn-pv.yaml
kubectl apply -f mvn-pvc.yaml
kubectl apply -f nas-pv.yaml
kubectl apply -f nas-pvc.yaml

3. 准备 Secret

  • kubeconfig 里的证书公私钥拷贝到 secret 中,secret.yaml
kubectl apply -f secret.yaml
  • docker-registry 的认证信息,ECI 支持免密拉取,但是 push docker image 还是要用到
kubectl create secret docker-registry registry-auth-secret --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=${xxx} --docker-password=${xxx}
  • 查看生成的 secret 可以用以下命令
kubectl get secret registry-auth-secret --output=yaml

4. 准备 ConfigMap

把 gitlab runner 的 url、token,ASK 集群的 api server 地址拷贝到 config.yaml

kubectl apply -f config-map.yaml

5. 准备 imageCache(可选,节省镜像拉取时间)

目前 AS K默认安装了 imagecache-crd,可以用以下命令查询,如果没有可以自己安装

# 查看image cache crd 是否安转
kubectl get crd
# 安装image cache crd
kubectl apply -f imagecache-crd.yaml
# 制作imagecache
kubectl apply -f imagecache.yaml

6. 部署 gitlab runner

kubectl apply -f gitlab-runner-deployment.yaml

7. 进行一个简单的 CI 任务

git repo 中的 .gitlab-ci.yml 类似 Jenkinsfile,定义了构建任务的工作流。我们修改 demo 项目中的 src/main/webapp/index.jsp 文件,然后 git commit -m “change index info” 提交。 gitlab 中的流水线任务即被触发,整个流程涉及到编译、打包、部署。

成本对比

使用 ASK 与一台预付费 ECS 的成本对比:

从上述成本计算可以看出,当您每天的 CI/CD 任务少于 126 个时,使用 ASK+ECI 会比购买一台包年包月的 ECS 更加划算。在享受按需付费的同时,也降低了运维成本,更加重要的是,当业务规模扩大、CI/CD 任务数量陡增时,不再需要担心 Node 节点的扩容。ASK+ECI 的方案,可以被认为是 CI/CD 持续集成场景的量身标配。

Serverless 公众号,发布 Serverless 技术最新资讯,汇集 Serverless 技术最全内容,关注 Serverless 趋势,更关注你落地实践中的遇到的困惑和问题。

教你 7 步快速构建 GitLab 持续集成环境相关推荐

  1. 从零入门 Serverless | 教你 7 步快速构建 GitLab 持续集成环境

    作者 | 存诚 阿里云弹性计算团队 本文整理自<Serverless 技术公开课>,"Serverless"公众号后台回复"入门",即可获取系列文章 ...

  2. 基于Docker构建-NET持续集成环境

      最近在考虑将整个项目组的产品,努力向着持续集成(CI)/持续部署(CD)的方向靠拢,因为目前我们仅仅实现了基于Docker的自动化部署,而部署包的构建依然依赖于人工打包,而每个版本的测试和部署,基 ...

  3. 【DevOps实战|基于Jenkins与Gitlab构建企业级持续集成环境系统】(Jenkins+Gitlab+Keepalived+Haproxy+Sonarqube+Http+灰度自动部署)

    目录 一.DevOps简介 二.CI/CD简介 1.代码部

  4. Jenkins+Maven+SVN快速搭建持续集成环境

    Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面看看我们是如何几分钟就快速搭建一个持续集成环境吧. 假设我们目前已经有2个maven项目:entities(J ...

  5. GitLab 与 Jenkins 结合构建持续集成环境

    持续集成概述及运行流程 CI/CD介绍 把开发工作流程分为以下几个阶段: 编码 → 构建 → 集成 → 测试 → 交付 → 部署 正如你在上图中看到,持续集成(Continuous Integrati ...

  6. Jenkins Gitlab持续集成打包平台搭建

    相关概念 Jenkins Jenkins,一个用Java编写的开源的持续集成工具,提供了软件开发的持续集成服务,可监控并触发持续重复的工作,具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点. ...

  7. 高德引擎构建及持续集成技术演进之路

    来自:高德技术 01 背景 由于导航应用中的地图渲染.导航等核心功能对性能要求很高,所以高德地图客户端中大量功能采用 C++ 实现.随着业务的飞速发展,仅地图引擎库就有40多个模块,工程配置极其复杂, ...

  8. 基于 Jenkins 快速搭建持续集成环境--转

    源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...

  9. 基于 Jenkins 快速搭建持续集成环境

    持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域 ...

最新文章

  1. 清华医工结合项目及三创项目与天津市27家重点医院对接
  2. 编译时遇到如下错误error C2061: syntax error : identifier 'THIS_FILE'
  3. js断点和调试学习总结3
  4. Java正则表达式应用
  5. C语言知识总结——宏,枚举
  6. android系统加载主题的流程,详解Android布局加载流程源码
  7. 网络摄像头 java_在Java中从网络摄像头捕获图像?
  8. sqlserver 按日、周、月统计方法
  9. 有关mysql的清理与优化_mysql优化点整理
  10. OSPF邻接关系建立过程
  11. 十进制转换为二进制数、八进制数和十六进制
  12. gstreamer v4l2预览双摄像头
  13. element -ui如何去掉原来的蓝色下划线
  14. ASML的EUV光刻机卖不动?
  15. 98% after emitting CopyPlugin vue启动停止的原因
  16. Mysql序号 查询
  17. 【 MVC 】显示数据库数据表格
  18. 【操作系统】——PV操作
  19. 年薪超过 50 万的程序员在哪些公司工作?
  20. Codeforces 1207 C. Gas Pipelin(线性DP)

热门文章

  1. 【干货】python多进程和多线程谁更快
  2. 2018摩拜算法工程师笔试题
  3. windows平台下压缩tar.gz
  4. struct与typedef 结构体定义
  5. JS小技巧 ----- 关于 ... 运算符的使用场景
  6. 递归与递推类型题小结
  7. 常用类 (二) ----- Math类
  8. bzoj2733 永无乡 splay树的启发式合并
  9. javascript正则表达式验证IP,URL
  10. WampServer2.0的Apache的service无法启动的解决方法