docker+gitlab+gitlab-runner部署
环境
服务端:centos7
客户端:window
在centos7上部署docker+gitlab+gitlab-runner,win10利用ssh连接,开发人员只需提交代码,就可以进行项目文件上传,打包镜像,发布运行测试
一、centos7上安装docker和docker-compose
安装docker:
1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
$ uname -r
2、使用 root 权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update
3、卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker docker-common docker-selinux docker-engine
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6、可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker-ce --showduplicates | sort -r

7、安装docker
$ sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0
$ sudo yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce

8、启动并加入开机启动
$ sudo systemctl start docker
$ sudo systemctl enable docker
9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version

10、建议更换docker的镜像源:
.修改或创建daemon.json文件:vi /etc/docker/daemon.json
将以下配置写入到文件中,保存并退出(不会操作的百度下vi命令吧):
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
.重启docker:systemctl restart docker
安装docker-compose:
参考官网:https://docs.docker.com/compose/install/#install-compose
1、Run this command to download the latest version of Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2、Apply executable permissions to the binary:
sudo chmod +x /usr/local/bin/docker-compose
二、拉取gitlab中文版镜像
地址:https://hub.docker.com/r/twang2218/gitlab-ce-zh
1、利用xshell+xftp在centos7中创建存储日志、配置、数据的文件夹
文件夹结构如下:
gitlab
-config
-logs
-data
docker-compose.yml
2、利用docker-compose.yml启动
version: ''
services:
gitlab:
image: 'twang2218/gitlab-ce-zh:11.1.4'
restart: unless-stopped
hostname: 'gitlab.domain.com'
container_name: gitlab
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.domain.com/'
registry_external_url 'https://gitlab.domain.com'
gitlab_rails['gitlab_shell_ssh_port'] =
gitlab_rails['time_zone'] = 'Asia/Shanghai'
# gitlab_rails['smtp_enable'] = true
# gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
# gitlab_rails['smtp_port'] =
# gitlab_rails['smtp_user_name'] = "xxxx@xx.com"
# gitlab_rails['smtp_password'] = "password"
# gitlab_rails['smtp_authentication'] = "login"
# gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = true
# gitlab_rails['gitlab_email_from'] = 'xxxx@xx.com'
ports:
- '80:80'
- '443:443'
- '1022:22'
volumes:
- ./data:/var/opt/gitlab
- ./config:/etc/gitlab
- ./logs:/var/log/gitlab
如果你的服务器有域名,将上面的 gitlab.domain.com 替换为实际域名。
实验时,也可以直接修改 /etc/hosts 方便测试。比如:
127.0.0.1 gitlab.example.com
3、cd到gitlab目录下执行docker-compose up -d启动,稍作等待。。
4、启动完毕后打开浏览器访问gitlab.domain.com

5、SSH 连接GitLab
首先我们需要得到一个SSH Key,输入
cat ~/.ssh/id_rsa.pub
如果出现 ssh-rsa打头的字符,说明本地已经有了SSH Key那我们可以直接拿来用,如果没有则需要我们自己创建一个SSH Key。

6、创建SSH Key
输入以下命令创建一个SSH Key。
ssh-keygen -t rsa -C "your.email@example.com" -b 4096
完成之后可以再输入 上面的cat命令 或者pbcopy直接复制生成的ssh key。
pbcopy < ~/.ssh/id_rsa.pub
在GitLab中账号-》设置中找到 SSH Keys中添加这个Key即可。

7、SSH 连接 1022 端口
正常情况下你已经可以通过git命令来连接我们部署的gitlab,但这里不一样的是我们把容器的 22端口映射到了 host的 1022上,我们需要指定端口来进连接。
ssh -p 1022 git@gitlab.domain.com
同时还需要更改GitLab的配置文件中的 ssh端口(如果上面配置过就不用了),否则GitLab中为我们生成的项目连接地址会连接不上。/gitlab/config/gitlab.rb
gitlab_rails['gitlab_shell_ssh_port'] = 1022
更改完ssh端口之后重启gitlab容器,之后我们的项目 ssh连接址会变为:
ssh://git@gitlab.domain.com:1022/test/projectname.git
到这里我们已经完成了GitLab的部署。
三、拉取gitlab-runner镜像
地址:https://hub.docker.com/r/gitlab/gitlab-runner
1、利用xshell+xftp在centos7中创建存储日志、配置、数据的文件夹
文件夹结构如下:
gitlab-runner
-config
docker-compose.yml
2、利用docker-compose.yml启动
version: ''
services:
runner:
image: 'gitlab/gitlab-runner:v11.4.2'
container_name: gitlab-runner
restart: always
networks:
- gitlab_default
volumes:
- ./config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
networks:
gitlab_default:
external: true
其中gitlab_default为上面gitlab的网络
注意:gitlab-runner的版本要和gitlab尽量对应不然会出现连不上gitlab
3、cd到gitlab目录下执行docker-compose up -d启动
四、配置gitlab-runner连上gitlab
1、注册gitlab-runner
docker exec -it gitlab-runner gitlab-runner register
2. 我们会输入 http://gitlab.domain.com或http://ip:port 也就是我们安装在本地的GitLab
3. Please enter the gitlab-ci token for this runner 要求输入 gitlab-ci token
在项目的 管理区域->runners中可以找到(这里注册的是share类型runner)

4. 输入描述,如:test
5. 输入tag(留空也可以,之后可以进行编辑 )
6. 选择当遇到没有打标签的提交时是否会执行,我们选 true
7. 是否锁定此runner 到当前项目, 我们选 false
8. 选一个执行者 executor
这一步比较重要 (ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell)
我们选docker
9. 选择默认使用的镜像: docker:stable
在注册完之后,我们可以在GitLab获取gitlab-ci token 的页面看到我们刚刚注册的这个 runner

同时可以在gitlab-runner/config下可以看到生成一个config.toml的文件,文件内容如下:
concurrent =
check_interval = [[runners]]
name = "test"
url = "http://192.168.1.157/"
token = "69c0ff735a76c0bb3cce977a361661"#这个token是gitlab-runner根据第三步骤的token生成的
executor = "docker"
[runners.docker]
extra_hosts = ["gitlab.domain.com:192.168.1.157"] #如果在执行上面步骤中碰到连接不上gitlab,是因为gitlab-runner在docker内部解析不了gitlab.domain.com,通过添加配置这个可以解决问题
tls_verify = false
image = "docker:stable" #这里之所以这样是因为基于这个镜像它包含了docker等工具,可以在gitlab-runner执行的.gitlab-ci.yml中有docker指令时而无需再安装docker 参考地址:https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
privileged = false #使用docker-in-docker时通常为true
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
shm_size =
[runners.cache]
或者直接先配置好,gitlab-runner运行时会自动加载该配置文件
参考地址:https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
五、提交项目代码完成CI/CD
1、在项目根目录下添加.gitlab-ci.yml,提交项目代码后会自动运行该文件打包项目
image: docker:stable image:
name: docker/compose:1.23. # update tag to whatever version you want to use. 这个是因为我下面脚本用到docker-compose
entrypoint: ["/bin/sh", "-c"] before_script:
- docker version
- docker-compose version build:
script: #下面脚本根据自己情况写
- COMPOSE_HTTP_TIMEOUT= docker-compose -f docker-compose-efk.yml up -d #这是因为我的项目已经用docker-compose编排好了
- COMPOSE_HTTP_TIMEOUT= docker-compose up -d --build --force-recreate
2、在win10上通过git提交代码
cd到项目根目录,如果有安装git的话可以直接在根目录下打开git bash 执行,如果没有安装打开powershell也行
git init #如果还没有初始化
git add . #把项目都添加进去
git commit -m "init" 提交到git
git remote add origin git@gitlab.domain.com:/root/test.git #注意端口为1022 这个是上面运行gitlab是指定的,执行一次就行了
git push -u origin master #推送到服务器gitlab上
docker+gitlab+gitlab-runner部署的更多相关文章
- 基于 Docker 和 GitLab 的前端自动化部署实践笔记
基于 Docker 和 GitLab 的前端自动化部署 实践笔记 随着接触的项目越来越多,在部署测试流程上重复耗时工作也越来越多,所以对前端工作的CI/CD实现愈发迫在眉睫. 前端开发由于三大框架的崛 ...
- GitLab Runner部署(kubernetes环境)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- docker安装gitlab并部署CICD
摘要 本文主要实现了在docker下安装gitlab,将gitlab绑定在宿主机的180端口,将gitlab的clone的URL添加指定端口号:部署了CI/CD,并公布了测试项目. 安装docker[ ...
- Docker安装GitLab与Runner(网关),常规设置,自动化用到k8s+token
[转]图文详解k8s自动化持续集成之GitLab CI/CD Windows里面使用Debian命令行工具完成 和Docker网络相关的命令 查看某一个容器的网络 docker inspect 容器I ...
- Docker搭建自己的Gitlab CI Runner
转载自:https://cloud.tencent.com/developer/article/1010595 1.Gitlab CI介绍 CI:持续集成,我们通常使用CI来做一些自动化工作,比如程序 ...
- 利用docker compose启动gitlab及runner
添加docker compose配置文件 新建文件docker-compose.yml,输入如下内容: gitlab: image: 'gitlab/gitlab-ce:latest' contain ...
- Gitlab CI 自动部署 asp.net core web api 到Docker容器
为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...
- docker搭建gitlab,设置邮件提醒,并运行runner
接着http://www.cnblogs.com/wsy1030/p/8431837.html 在另一台机子运行gitlab: docker run --name='gitlab' -d -p 222 ...
- 内网部署Docker版本Gitlab
Gitlab部署: 1. 还原备份文件后记得拷贝gitlab-secrets.json,不然会遇到500错误 2. 下载Docker以及依赖项rpm包 3. 在外网机器下载镜像 a. 拉取——Dock ...
- SpringCloud+Docker+Jenkins+GitLab+Maven实现自动化构建与部署实战
1.前言与初衷 本文章会涉及Docker常见命令基础知识点结合不同场景实操一起使用. 本文章会涉及结合工作过程中部署不同环境服务器的项目案例场景为初心进行实际细讲. 本文章主要讲述Docker.Jen ...
随机推荐
- 关于Rabbitmq的routingkey的作用
对于消息发布者而言它只负责把消息发布出去,甚至它也不知道消息是发到哪个queue,消息通过exchange到达queue,exchange的职责非常简单,就是一边接收发布者的消息一边把这些消息推到qu ...
- ignoreDependencyType(Class class)方法使用
该方法字面意思是忽略依赖类,注释给出的解释是在自动装配时忽略指定类型的依赖注入. 经过我在网上查的资料,发现自动装配有两种方式: 一种是在xml配置文件中的<beans>标签中配置一个属性 ...
- 解决Flask局域网内访问不了的问题
在服务器上使用http://127.0.0.1:5000可以访问,但是在局域网内通过服务器IP地址访问不了,解决办法为:设置Flask为任何地址均可以访问,post设置为‘0.0.0.0’, if _ ...
- 学习笔记之X分钟速成Python3
X分钟速成Python3 https://mp.weixin.qq.com/s/QT5sR0nUKgJYsYgrj2SleA https://learnxinyminutes.com/docs/zh- ...
- python之路——20
学习内容 1.序列化——数据类型转向字符串数据类型 反序列化——字符串转向数据类型2.序列化模块 json模块 通用序列化格式 弊端:只有少部分数据类型可通过json转化 pickle模块 所有的py ...
- 3、redis使用场景
现代高并发复杂系统面临的挑战 现代系统随着功能的复杂化,各种各样需求层出不穷,面对愈加复杂话的业务系统.越来越庞大的用户群体,以及用户对体验的要求越来越高,性能就变得更加重要. 抛开代码逻辑.服务器性 ...
- 软件推荐----截图软件Snagit
截图软件,比较推荐使用Snagit,功能上所有截图软件有的他都有.Snagit编辑器有一个[库]功能,可以按日期以及应用程序对截图进行分类整理,最赞的是你可以把整个库备份导出,在新的电脑上进行导入,所 ...
- ie浏览器许多图片放在一起会有间隙
解决方法一(推荐):设置图片父元素font-size:0. 解决方法二:设置图片为float:并且图片设为块级元素.
- .net core2 api
[Produces("application/json")][Consumes("application/json")][Consumes("appl ...
- hive 一次更新多个分区的数据
类似订单数据之类的表,因为有状态要更新,比如订单状态,物流状态之类的, 这样就需要同步很久之前的数据,目前我的订单表是更新前面100天的数据. hive中操作是先删除前面100个分区的数据,然后重新动 ...