写点什么

Docker 私有化部署 gitlab gitlab-runner

发布于: 2020 年 09 月 07 日
Docker私有化部署gitlab gitlab-runner

引言

需求的现状

现在讨论很多的一个词是CI/CD: CI是持续集成,通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中,开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交;CD是持续部署,持续部署扩展了持续交付.



开发的现状

目前越来越多的服务器部署都是用docker镜像去部署,无论是用docker-compose去部署还是用kubernetes部署,都给我们开发者带来了极大的便利,喜忧参半也带来了一些不便,在我自己开发和部署的日常开发中(很多公司的开发和运维都是一个人),发现了一些需要解决的问题.之前github就退出了github action的方式 支持用户自定义ci文件,但是去调查了一下github的私有化部署,遇到了一些问题,所以就去调查和实践了gitlab + gitlab-runner 的私有化部署方案.

问题

基于CI/CD的现状,开发者在提交代码后还需要去构建镜像,上传镜像到镜像仓库,频繁的修改就需要频繁的构建,两个尖锐的小问题



  • 用户每次写完代码要本地构建,需要本地有docker运行的环境,docker本身是不支持windos的(非专业版本,专业版本有专门的安装包),环境问题在日常开发中经常出现.

  • 本地构建、推送到仓库后本地就残留了镜像文件,因为仓库会保存镜像,本地镜像就会浪费本地的存储空间.



其他问题

有一些其他问题需解决,但是本文并不主要解决这些矛盾,但是在gitlab-ci.yml文件可以配合其他社区方案得以解决



  • 代码需要通过代码检测平台的检测,比如社区的一些优秀解决方案 : SonarQube等

  • push完代码后(或者push之前)代码需要有一些自动化测试



安装

安装需求

1.需要一台linux服务器,本文是一台debian9.6的服务器

2.需要安装docker和docker-compose(docker安装和docker-compose社区有大量的文章,本文不做说明)



开始安装

环境确认



  • 确认本地已经安装好docker和docker-compose,登陆到服务器后输入以下命令确认环境

docker -v



下载镜像



  • 搜索并下载gitlab gitlab-runner的镜像



通过下面的命令搜索镜像

docker search gitlab
docker search gitlab-runner



通过下面的命令将镜像pull到本地

docker pull gitlab/gitlab-ce
docker pull gitlab/gitlab-runner

确认本地拉取镜像成功

docker images

列表中出现对应的镜像说明拉取镜像成功

用docker-compose启动

使用docker-compose启动gitlab 以及 gitlab-runner 其中涉及到文件的映射

gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: '172.17.16.205' //改成你部署的服务器(宿主机)的固定ip地址
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://172.17.16.205'
# Add any other gitlab.rb configuration here, each on its own line
ports:
- '80:80' //映射到本机的80端口 访问地址就是http://172.17.16.205
- '7443:443'
volumes: //映射宿主机的文件目录到运行的镜像里面 保证镜像的重启等不会造成数据的丢失
- '/data/gitlab/config:/etc/gitlab'
- '/data/gitlab/logs:/var/log/gitlab'
- '/data/gitlab/data:/var/opt/gitlab'
gitlab-runner:
image: gitlab/gitlab-runner
restart: unless-stopped
privileged: true
volumes:
- /data/runner/gitlab-runner:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock //宿主机机的docker.sock映射到镜像里面
- /usr/bin/docker:/bin/docker //宿主机的docker可执行映射到镜像里面 后面build的时候会用到

新建并保存好docker-compose.yml文件后 在当前目录运行命令

docker-compose up -d



<br />gitlab 初始化运行的时候需要一定的时间,需要耐心等待,用下面的命令查看正在运行的镜像

docker ps



可以看到 当gitlab的status 变成 healthy的时候说明 gitlab启动完成

开始你的第一个runner

打开你的gitlab服务器地址-->注册账号-->创建仓库 这一系列的步骤就不一一赘述了

注册runner



确定仓库的配置

进入仓库的用户设置-->CI/CD<br />

展开Runner后拉到最下面就能看到你当前仓库是否拥有Runner,如果没有的话我们来进行注册



我们能看到红色部分包括两个配置 一个是服务器地址 一个是本仓库的token,在后面注册的时候会用到

注册

进入到正在运行的gitlab-runner容器,方法如下

docker ps #查看正在运行的gitlab-runner 复制对应的containerId 比如: 04a990db62d1
docker exec -it 04a990db62d1 sh #进入正在运行的gitlab-runner的命令行
gitlab-runner register #开始注册仓库的runner



<br />依次输入服务器地址、token(在前面的图片中能找到) description(描述)可以随意些 tags后面会配合到.gitlab-ci.yml文件<br />Please enter the executor: docker+machine, kubernetes, docker, shell, ssh, virtualbox, docker-ssh+machine, custom, docker-ssh, parallel<br />这一步我摸索了很久,其实就是问docker运行的时候用什么docker源,因为我的宿主机已经安装了docker(并且在docker-compose文件中我映射的bin文件) 所以输入shell 然后我们就注册成功了!

检测

这个时候我们再回到gitlab页面上,就能看到刚才我们最新注册的runner(我之前注册过所以这边显示两个)<br />



至此我们的注册步骤已经结束了 当我们再向仓库push代码的时候 就会根据我们的仓库根目录的gitlba-ci.yml文件运行我们的CI,下面我将贴一下一个最简单的gitlba-ci.yml文件

简单的.gitlab-ci.yml



stages:
- build

services:
- docker:dind
before_script:
- docker info


build_docker_image_and_push_to_harbor:
stage: build
image: docker:stable
script:
- docker build -t gitlabci:0.0.1 .
- docker login --username=xxxx registry.xxxx.com --password $DOCKER_PRIVATE_KEY
- docker push registry.xxxxx.com/czrd/gitlabci:0.0.1




一些坑和一些总结的小问题

本文不赘述.gitlab-ci.yml文件,不是本文的主要说明内容,社区有大量的优秀文档大家可以查阅,但是有一些坑我会在下面列出来



  • .gitlab-ci.yml文件必须在仓库文件的根目录

  • .gitlab-ci.yml文件前面有一个点

  • 关于tags runner默认是必须要用才能运行runner的 请点击



<br />!image.png<br />勾线第三个设置<br />

<br />都配置ok后就可以看到自己项目的CI,持续集成之日可待

<a name="8dmsW"></a>



<a name="Cw8e1"></a>

写在最后

本文主要讲了如何私有化部署以及一些简单的注册、配置, 如果文档有问题,请及时指正,如果还有问题的话可以去社区寻找其他方案,或者📧huang93223@126.com<br />

<br />然后等你push完代码后 可以来杯 ☕️ 等待自动化任务的完成,enjoy!!!<br />

<br />



用户头像

还未添加个人签名 2020.09.02 加入

还未添加个人简介

评论

发布
暂无评论
Docker私有化部署gitlab gitlab-runner