在群晖docker上构建私有云IDE和devops构建链

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 本文关键字:云IDE。docker as cloud ide,在群晖上安装docker gitlab,gitlab ci for docker

本文关键字:云IDE。docker as cloud ide,在群晖上安装docker gitlab,gitlab ci for docker

在以前的文章中我们说到docker是一种,集云虚拟化,装机,开发机,user modeos,langvm,app runtime为一体的东西。(或者不严格地说,仅仅可以当所有这些东西来用)。而这,其实就是我们一直想集成达到的DISKBIOS方案。

在《docker as engitor及云构建devops选型》一文中我们还说到,docker可用于组建私有devops,模拟engitor的效果,在那文的文尾我们提到云IDE,git是这个云IDE收集工程源码文件的云化过程(git同时是实现为客户端也是服务端一体的,所以它是云IDE客户端负责收集工程文件,在服务端它返回给下一级CI过程),那么集成了CI的git服务器实现品(如gitlab version8+版本以上自带CI模块),就是云IDE中定义如何自动化构建这个工程的过程。

可见在云开发中,docker生态是一个非常流行和强大的东西,云IDE的先进理念实际就是devops(实际上,像gitlab这样的实现品已有cloud ide这样的插件)。

下面我们就来讨论如何用docker的gitlab ci模拟云IDE中的自动化构建链效果。我们的环境是群晖docker上。用外置postgresql实例的方法,我们最终要实现的结果,就是实现gitlab以docker为executor的CI链,可以实现面向docker为开发机的构建,发布的自动化过程。VS 托管在远处的devops服务器,有一个私有devops的好处是,我们可以在本地即时快捷地观看和控制程序构建的过程。

群晖docker上搭建gitlab

跟《docker上安装ellie》一样,这同样是个复杂的过程,gitlab是ruby的,gitlab cl是nodejs的,跟ellie docker一样是涉及到多语言环境的。我们复用ellie中的postgresql9.5镜像。

我用的是2019.2.2号左右dockerhub上sameersbn/gitlab的GitLab Community Edition 11.7.0(在他的镜像中,7.4.3之前版本,镜像里包含所有组件,7.4.3版本镜像里只包含核心组件:nginx、sshd、ruby on rails、sidekiq),不要下载官方的gitlab/gitlab-ce,那个镜像里内内置了postgresql数据库。启动时占用内存过大。而且不正交。由于这个镜像很大,外网线路下载起来很费事,容易中断,我们可以利用上shadowsocks的方法,在windows上开一个允许局域网连接。然后在群晖控制面板->你当前使用的网络界面中配置一个代理服务器。之后下载就会快多了,下载完全后,同时下载redis:latest,这样postgresql9.5,redis,gitlab镜像都有了。先启动postgresql和redis的实例。

再开启一个sameersbn/gitlab的实例,link到postgresql9.5:别名postgresql,redis:别名redisio,80容器端口映到8001,因为主机群晖占用了80。增加几个环境变量,

GITLAB_SECRETS_DB_KEY_BASE=随便写
GITLAB_SECRETS_SECRET_KEY_BASE=随便写
GITLAB_SECRETS_OTP_KEY_BASE=随便写

启动,gitlab会自动连接postgresql,发现容器退出,查看日志后发现,FATAL: role "root" does not exist,数据库中没有root用户,这是因为gitlab实例对postgresql实例的数据库有root检查,及其它一些硬性配置上的要求。下面这些做:在群晖的web版进postgresql1实例的终端机界面(点新增会自动打开一个bash终端)新建一个root用户并赋于权限。

su - postgres
psql
create user root with password 'password';
ALTER ROLE root WITH SUPERUSER;
此时再尝试启动应该没有上述错误了。但又退出,且提示psql: FATAL: database "gitlabhq_production" does not exist
CREATE USER gitlab WITH PASSWORD 'password';
CREATE DATABASE gitlabhq_production OWNER gitlab;
GRANT ALL PRIVILEGES ON DATABASE gitlabhq_production TO gitlab;
\q

最终启动成功,发现内存维持在1G多比gitlab/gitlab-ce少很多,打开群晖ip:8001,会提示让你修改root的密码,这个root是gitlab用户的不是postgresql的。用root和这个密码登录,进群晖ip:8001/admin/。

现在可以在上面建立repo,clone的界面上显示的是localhost,你需要额外加二个启动环境参数来定制这里显示为localhost的部分,另外如果你想导出各种volumes,参照ellie关于权限的处理方法就行。

最后,然后进admin/runners查一个token,备用。

在群晖docker上安装gitlab ci for docker

这里的坑有点多。

首先不要下载sameersbn/gitlab-ci-multi-runner:latest(gitlab/gitlab-runner也是multi的),这个版本太老,启动后link到一个别名为gitlab的第一步安装的gitlab实例,sameersbn的runner是可以定义环境变量注册的

RUNNER_TOKEN:上面的token
CI_SERVER_URL:http://link到的gitlab别名:80到主机的转发端口/ci
RUNNER_DESCRIPTION:随便填
RUNNER_EXECUTOR:这个暂时先填shell

虽然方便,然而我尝试了下这种方法在上述sameersbn/gitlab-ci-multi-runner版本中根本无法使用,一直提示404,PANIC: Failed to register this runner. 404,PANIC: Failed to register this runner. Perhaps you are having network problems

我们下载同gitlab版本的gitlab/gitlab-runner:v11.7.0,启动后link到第一步安装的gitlab别名gitlab,然后进终端机用命令行方式注册runner到CI:

像上一个方法一样新建一个bash,会进入/home/gitlab_runner中,打入gitlab-runner register会提示输入六个选项的参数。依次是:

url:这个填http://gitlab/ci
registration-token:这个填第一步获取备用到的那个token
executor这里填docker
docker-image这里我可以按需求填alpine:3,这个有什么讲究呢?这什么选这个呢?预置的有什么用呢?其实这是构建Docker image时填写的image名称,根据项目代码语言不同,指定不同的镜像。
description随便填
tag-list这里填v1170

所以你看出来了,以后devops的触发主要是由其中对应到这里的tags来触发,docker ci build的原理其实就是以某docker image为虚拟机,在里面一层一层构建fs,然后叠加成最终镜像,这里的docker-img即为那个虚拟机。

所以docker image加tag的组合可以根据很多不同目的来定义多个。多用。

以上我们注册的runner是全局的。也有per工程私有的runner,上述tag为v1170的docker runner就是工程全局共享的

至于各种参数具体有什么用,等以后讲吧。那个触发文件流程定义.gitlab-ci.yml更是复杂,反正runner是建立起来了,在项目的/settings/ci_cd,CI/CD Pipelines -> Runners activated for this project,会看到已激活的runners


还有,我们可以搞个for elmlang,下回吧,这样在我们的私人服务器上就可以即时持续集成了(以达到不断向其喂给碎片化项目内容,持续集成为大应用的目的,这也许就是微服务的由来)


(此处不设回复,扫码到微信参与留言,或直接点击到原文)

qrcode.png

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
运维 安全 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在数字化转型的浪潮中,企业对于IT基础设施的要求越来越高,不仅需要快速响应市场变化,还要确保系统的稳定与安全。本文深入探讨了如何通过融合DevOps文化和容器化技术来构建一个高效、稳定且易于管理的云基础设施。通过实际案例分析,阐述了持续集成/持续部署(CI/CD)流程的优化、自动化测试、监控以及日志管理等关键环节的实施策略,旨在为运维专业人员提供一套切实可行的解决方案。
29 3
|
1月前
|
存储 运维 安全
构建高效自动化运维体系:Ansible与Docker的完美结合
【2月更文挑战第31天】 随着云计算和微服务架构的兴起,自动化运维成为保障系统稳定性和提升部署效率的关键手段。本文将详细探讨如何通过Ansible和Docker的结合来构建一个高效、可靠且易于管理的自动化运维体系。首先,介绍自动化运维的必要性及其在现代IT基础设施中的作用;然后,分别阐述Ansible和Docker的技术特点及优势;最后,提供一个基于Ansible和Docker结合使用的实践案例,以及实施过程中遇到的挑战和解决方案。
|
1月前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【2月更文挑战第30天】 在当今快速发展的云计算时代,传统的IT运维模式已难以满足业务的敏捷性和稳定性需求。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理工具构建一个高效、可靠的自动化运维体系。文章首先概述了容器化技术和微服务架构的基本概念,随后详细阐述了基于Docker的应用打包、部署流程,以及Kubernetes在自动化部署、扩展和管理容器化应用中的关键作用。最后,文中通过案例分析,展示了如何在实际场景中利用这些技术优化运维流程,提高系统的整体效率和可靠性。
|
1月前
|
运维 安全 网络安全
构建高效自动化运维体系:Ansible与Docker的完美融合
【2月更文挑战第30天】在当今快速迭代和持续部署的软件发展环境中,自动化运维成为确保效率和稳定性的关键。本文将探讨如何通过结合Ansible和Docker技术,构建一个高效的自动化运维体系。我们将分析Ansible的配置管理功能和Docker容器化的优势,并展示它们如何协同工作以简化部署流程,增强应用的可移植性,并提供一致性的系统环境。此外,文章还将介绍一些最佳实践,帮助读者在真实环境中实现这一整合方案。
|
1月前
|
运维 Kubernetes Devops
构建高效可靠的云基础设施:DevOps与容器化技术融合实践
【2月更文挑战第30天】 在当今快速迭代和竞争激烈的软件开发领域,传统的IT运维模式已难以满足业务发展的需要。本文将探讨如何通过整合DevOps文化和容器化技术,构建一个既高效又可靠的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作流的影响,接着深入讨论了容器化技术的优势和挑战,并提出了一套结合两者的实施方案。最后,通过案例分析展示了该方案在实际环境中的应用效果和潜在益处。
|
8天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
13 0
|
11天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
13天前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第13天】 在当今快速迭代和持续部署的软件开发环境中,传统的IT运维模式已难以满足业务发展的需求。本文聚焦于如何通过融合DevOps理念与容器化技术,构建一个高效、稳定且易于管理的云基础设施。文章将探讨持续集成/持续交付(CI/CD)流程的优化、容器化技术的最佳实践、以及微服务架构下的应用管理,以期为企业提供一种改进运维效率、加速产品上市时间,同时保障系统稳定性的解决方案。
|
28天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
|
29天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
随着企业数字化转型的不断深入,传统的IT运维模式已经难以满足快速迭代和持续交付的需求。本文将探讨如何通过结合DevOps文化与容器化技术,构建一个既高效又稳定的云基础设施。文章首先概述了DevOps的核心理念及其在现代运维中的重要性,然后详细介绍了容器化技术,特别是Docker和Kubernetes在实现微服务架构中的应用。最后,文中通过案例分析展示了这一融合实践如何在真实环境中提升运维效率和系统稳定性。
21 7