全docker化gitlab及CI - in_finity的个人空间 - 开源中国_docker exec gitlab gitlab-ctl status-程序员宅基地

https://my.oschina.net/u/2544629/blog/1023455#0-tsina-1-8655-397232819ff9a47a7b7e80a40613cfe1

##Docker安装
curl -fsSL https://get.docker.com/ | sudo sh # 安装最新版的docker
sudo mkdir /etc/docker
echo ‘{“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”]}’ | sudo cat > /etc/docker/daemon.json # 更改为使用中科大的源
sudo systemctl enable docker.service # 设置开机启动
sudo systemctl start docker # 立即启动服务

docker用户组管理

通过将用户加入到docker组,可以省去后期该用户在docker命令时的sudo前缀(docker实现的便利机制)

sudo groupadd docker
sudo usermod -aG docker $(whoami)
exit # 退出从而重新加载用户配置

docker-compose安装

sudo curl -L “https://github.com/docker/compose/releases/download/1.9.0/docker-compose- ( u n a m e − s ) − (uname -s)- (unames)(uname -m)” -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

df -hl # 查看磁盘使用空间
创建HTTPS证书
权威CA机构仅对域名签发证书,这里由于备案尚未通过,临时使用基于IP的自签名证书来处理
sudo mkdir /etc/certs
cd /etc/certs

自签名证书需要有个备选的IP SANS校验信息

sudo sed -i ‘/[ v3_ca ]/a\subjectAltName = IP:121.40.145.xxx’ /etc/pki/tls/openssl.cnf

创建证书

sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt # 其中Common Name输入ip地址:121.40.145.xxx
sudo openssl dhparam -out dhparam.pem 1024 # 生成DHE参数文件增强ssl加密

服务器自身对该证书的信任配

sudo mkdir -p /etc/docker/certs.d/121.40.145.xxx:4567
sudo cp /etc/certs/domain.crt /etc/docker/certs.d/121.40.145.xxx:4567/

客户端下做如下配置

配置客户端docker信任服务端的自签名证书

服务端证书拷贝至客户端docker的根证书信任目录

sudo mkdir -p /etc/docker/certs.d/139.196.5.xxx:4567
sudo scp -P 8022 [email protected]:/etc/certs/domain.crt /etc/docker/certs.d/139.196.5.xxx:4567/

自签名证书网站地址栏被Chrome标记为不安全

我们需要手动将自签名证书导入Chrome的根证书信任列表

本地打开一个shell将服务器上的证书下载到本地

scp -P 8022 [email protected]:/etc/certs/domain.crt .

然后配置Chrome: 设置 》 高级 》 HTTPS/SSL 》 管理证书 》 受信任的根证书颁发机构 》 导入

#####################gitlab######################
version: ‘2’
services:
Gitlab:
image: ‘twang2218/gitlab-ce-zh:8.17.4’ //中文

image: ‘gitlab/gitlab-ce:8.17.4-ce.0’ //英文

container_name: 'gitlab'
hostname: 'repo.sharemeiti.com'
restart: always
ports:
  - '1022:22'
  - '1080:80'
  - '443:443'
  - '4567:4567'
environment:
  GITLAB_OMNIBUS_CONFIG: |
    # Add any other gitlab.rb configuration here, each on its own line
    external_url 'https://139.196.5.206'
    gitlab_rails['gitlab_shell_ssh_port'] = 22
    nginx['redirect_http_to_https'] = true
    nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparam.pem"
    nginx['ssl_certificate'] = "/etc/gitlab/ssl/domain.crt"
    nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/domain.key"
    # nginx['custom_gitlab_server_config'] = "location ^~ /.well-known {\n alias /var/opt/gitlab/letsencrypt/.well-known;\n}\n"
    high_availability['mountpoint'] = ["/etc/gitlab", "/var/log/gitlab", "/var/opt/gitlab"]  # 严格限定gitlab服务启动前,指定文件系统挂载完毕

    #Registry配置
    registry_external_url "https://139.196.5.206:4567"  # ContainerRegistry的外部访问地址
    registry_nginx['ssl_certificate'] = "/etc/gitlab/ssl/domain.crt"
    registry_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/domain.key"
    gitlab_rails['registry_host'] = "139.196.5.206"
    gitlab_rails['registry_port'] = "4567"
    gitlab_rails['registry_api_url'] = "http://localhost:5000" #docker官方5000
    gitlab_rails['gitlab_default_projects_features_builds'] = false #默认关闭CI
    gitlab_rails['gitlab_default_projects_features_container_registry'] = false #关闭Registry 
    #邮件配置
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.126.com"
    gitlab_rails['smtp_port'] = 25
    gitlab_rails['smtp_user_name'] = "[email protected]"
    gitlab_rails['smtp_password'] = "wyj15881894988"
    gitlab_rails['smtp_authentication'] = "login"
    gitlab_rails['smtp_enable_starttls_auto']= true
    gitlab_rails['gitlab_email_from']= '[email protected]'
    gitlab_rails['gitlab_email_reply_to']= '[email protected]'
volumes:
  - /docker/gitlab/config:/etc/gitlab
  - /docker/gitlab/logs:/var/log/gitlab
  - /docker/gitlab/data:/var/opt/gitlab
  - /docker/gitlab/certs:/etc/gitlab/ssl

############################################

Gitlab调优
gitlab对内存资源的消耗比较厉害
其中尤以 sidekiq队列 及 unicorn服务 两个组件对内存消耗最多
可以再容器启动时对相关参数进行微调:
unicorn[‘worker_processes’] = 1
unicorn[‘worker_memory_limit_min’] = “300 * 1 << 20”
unicorn[‘worker_memory_limit_max’] = “400 * 1 << 20”
unicorn[‘worker_timeout’] = 15
sidekiq[‘concurrency’] = 10
sidekiq_cluster[‘enable’] = false
sidekiq_cluster[‘ha’] = false
redis[‘maxclients’] = “100”
nginx[‘worker_processes’] = 2
nginx[‘worker_connections’] = 512
nginx[‘keepalive_timeout’] = 300
nginx[‘cache_max_size’] = ‘200m’
mattermost[‘enable’] = false
mattermost_nginx[‘enable’] = false
gitlab_pages[‘enable’] = false
pages_nginx[‘enable’] = false
postgresql[‘shared_buffers’] = “256MB”
postgresql[‘max_connections’] = 30
postgresql[‘work_mem’] = “8MB”
postgresql[‘maintenance_work_mem’] = “16MB”
postgresql[‘effective_cache_size’] = “1MB”
postgresql[‘checkpoint_timeout’] = “5min”
postgresql[‘checkpoint_warning’] = “30s”

配置调整后需要重载一下
docker exec gitlab gitlab-ctl reconfigure
docker-compose down
docker-compose up -d

regitry 必须用root才能push 并且项目里配置该项目路径 和打开注册表
##日常维护命令

Gitlab维护

docker exec gitlab gitlab-ctl status # gitlab各组件服务状态
docker exec gitlab gitlab-ctl start/restart/stop [组件名] # gitlab所有组件的统一控制(其中Unicorn组件重启完成前GitLab会报502)
docker exec gitlab gitlab-ctl tail [/var/log/gitlab下的某子目录] # 实时查看日志

docker exec gitlab update-permissions # 修复gitlab版本升级后出现的权限问题
docker exec gitlab gitlab-ctl reconfigure # 重载配置
docker exec -t gitlab gitlab-rake gitlab:backup:create # 创建备份

ContainerRegistry维护

docker exec gitlab gitlab-ctl registry-garbage-collect # 垃圾回收,清理废弃layer(registry停机)

账号密码若存在特殊字符则需要url编码

https://username:password@host:port/group/project.git
##RUNNER

###Gitlab Ci由三部分构成

gitlab-web版本库管理系统
gitlab-ci-server持续集成组件(已集成到gitlab-web)
gitlab-ci-runner持续集成运行机(默认执行build、test、deploy三阶段的job) ###Gitlab CI中build job主要工作流
Ci Runner运行机 启动Ci Executor执行器
如有 before_script 则向 executor 发送该预处理脚本
在executor 中检出项目代码,切换至触发build的代码分支
执行build job中声明的script
检查构建的 exit status,若有非0返回码则build失败
销毁当前构建环境
###Ci-Runner 共享方式分类有如下2种

shared共享型runner
specific专享型runner Executor类型分类有如下6种
Shell: 配置最简,直接以gitlab-runner账号在runner中检出项目代码build
docker:在build container中检出项目代码build, 和runner同级,都驻留在宿主机中
Docker Machine and Docker Machine SSH (auto-scaling)
Parallels
VirtualBox
SSH
Kubernetes
##############################
version: ‘2’

services:
Ci-Runner:
image: gitlab/gitlab-runner:alpine-v1.11.1
container_name: ci_runner
restart: always
volumes:
- /docker/gitlab-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
###############################
注册Runner至Ci-Server

runner中可注册多个executor执行器给Ci-Server
具体注册信息保存在容器内 /etc/gitlab-runner/config/config.toml
##############toml#################
concurrent = 1
check_interval = 0

[[runners]]
environment = [“DOCKER_AUTH_CONFIG={“auths”:{“139.196.5.206:4567”:{“auth”:“cm9vdDp3eWoxNTg4MTg5NDk4OA==”}}}”]
name = “test”
url = “https://139.196.5.206:443
token = “5fd4b7a8f6dda1e96858a8ade94e5e”
executor = “docker”
[runners.docker]
tls_verify = false
image = “docker:latest”
privileged = false
disable_cache = false
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock"]
[runners.cache]
##################################
自签名证书信任

如果Ci-Server使用了自签名证书,需要让runner信任Ci-Server的证书

sudo mkdir -p /srv/gitlab-runner/config/certs/
sudo scp -P 8022 [email protected]:/etc/certs/domain.crt /srv/gitlab-runner/config/certs/121.40.xxx.yyy.crt
###Runner-Executor注册

docker exec -it ci_runner gitlab-runner register
#注册步骤

  1. 填入gitlab-web的url地址,这里填 https://121.40.xxx.yyy:8443
  2. 填入gitlab-web admin中提供的 Registration token
  3. 填入runner介绍,这里填 executor1 in production
  4. 填入runner的tags标签,这里 留空直接回车
  5. 填入默认executor类型,这里填 docker
  6. 填入镜像名称,这里填 docker:latest(具体构建时使用的executor镜像类型可在.gitlab-ci.yml中通过image指令调整)
  7. 操作完成后,在gitlab-web的runner管理中,将显示当前创建的runner

若要删除runner

gitlab-ci-multi-runner unregister --url gitlab地址(带http和端口号) --token runner令牌
###Runner访问Private Registry的授权配置

runner宿主机上做一次登录操作 docker login https://121.40.xxx.yyy:4567 --username root --password my_password
拷贝文件~/.docker/config.json中的授权信息
在文件/srv/gitlab-runner/config/config.toml中runners节区下添加环境变量 environment = [“DOCKER_AUTH_CONFIG={“auths”:{“registory服务地址”:{“auth”:“令牌”}}}”]
在config.toml中volumes变量中增加挂载 “/var/run/docker.sock:/var/run/docker.sock”
docker-compose重启
###Runner中SSH访问部署环境

ssh-keygen生成秘钥对,并手动ssh登录一次部署环境
部署环境上以root账号docker login一次我们的Container Registry
Project->CI/CD Pipelines->Secret Variables 添加变量
id_rsa变量为 id_rsa文件内容
known_hosts变量为known_hosts文件内容
.gitlab-ci.yml配置中增加ssh私钥导入处理before_script:
mkdir ~/.ssh && cd ~/.ssh
echo -e “KaTeX parse error: Expected 'EOF', got '&' at position 18: …_rsa" > id_rsa &̲& chmod 600 id_…known_host” > known_hosts && chmod 644 known_hosts
cd -

将公钥添加至部署环境的ssh authorized_keys中
若build job中有git操作,则需将公钥添加至项目deploy key
Poject Settings -> Project Visibility -> Repository -> Pipelines 启用 Only team members
Poject Settings -> Runners 启用 Allow shared Runners
###自动化测试配置

phpcs配置
phpmd配置
phpunit配置
###持续集成工作流定义.gitlab-ci.yml 项目根目录的 .gitlab-ci.yml 文件可详细定义CI的 pipeline 构建流程

项目每次push或merge时,gitlab-ci会检测是否存在 .gitlab-ci.yml 文件,若存在则将派发ci-runner执行build job
pipeline分多个stage,每个stage包括多个build job
若runner足够数量,则stage下的不同build job是并行的(但每个runner中的executor是串行的)
runner完成job后会创建一个build
构建任务的结果状态可通过badge徽章(/namespace/project/badges/branch/build.svg)来动态显示,徽章可直观的嵌入README文档
IOS持续集成方案 工具集:Gitlab-CI + fastlanes & pgyer + testflight

docker 强制删除none镜像 docker rmi -f

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42381323/article/details/87892189

智能推荐

前端基础第四天_前端swsf-程序员宅基地

文章浏览阅读186次。经过几天的html的学习,已经有点开始慢慢的进入一个程序员的世界从今天开始,我们就开始一起学习css的内容一起来看看今天的重点吧,一,css的初体验css的相关设置放在style里,style放在title下,是一个双标签1.css的相关属性color:设置字体的颜色font-size:设置字体的大小background:设置字体的背景width:设置字体的宽度height:设..._前端swsf

win0如何查看计算机工作组,win10家庭版如何查看工作组计算机-程序员宅基地

文章浏览阅读5.4k次。win10家庭版如何查看工作组计算机卡饭网本站整理2019-09-16关于这个问题,小编整理了如下的五种解决方法,但是也要仔细看一下注意事项哦!方法一:桌面,右键点我的电脑—>属性—>计算机名,点“更改”按钮,就可以更改电脑的工作组名。然后去连接了打印机的电脑,打开资源管理器,把打印机共享。最后,到另一台电脑上添加网络打印机,一般按提示做就能共享了。具体的操作如下:1、设置工作组名,进..._windows10查看计算机工作组

录音自动上传到服务器,怎么实现手机录音之后,将录音的音频文件上传到服务器上...-程序员宅基地

文章浏览阅读1k次。你先得确定服务器用什么协议啊,HTTP,webservice,socket等等,如果用http一般两种方式,一个是java自带的urlhttpconnection,还有就是阿帕奇的httpclient。代码片段// 使用POST方法提交数据,必须大写conn.setRequestMethod(POST);// 需要输出流conn.setDoOutput(true);// 需要输入流conn.set..._app 录音权限 推送服务器存储

小程序点击事件插入激励视频广告实例(小白应该也能懂)_网站接入激励视频广告-程序员宅基地

文章浏览阅读8.8k次,点赞4次,收藏40次。鼓捣了一段时间,终于算是明白了,现在想想确实很简单,毕竟只是函数与函数调用的问题。首先设置需要定义广告函数,在网上看到的很多都在把他直接加在了onload函数里面,但是对于小白来言,处理不好与其他之间事件的关系,导致出错。所以我直接定义了一个广告加载函数。在js页面里//加载激励广告 adGet: function () { if (qq.createRewardedVideo..._网站接入激励视频广告

QT知识点——QT中qmake的详解-程序员宅基地

文章浏览阅读2.4k次。文章原文:https://blog.csdn.net/mybelief321/article/details/9208775#返回知识列表:1.首先,感性的认识是,qmake可以利用源文件(包括头文件h,实现文件cpp,qt的ui文件等等)生成各种不同类型的工程,工程需要的Makefile文件,可执行的与不可执行的,这取决于所用的模板(包括app、lib、subdirs、vcapp、vclib)。2.创建pro文件,添加各种源文件,还可以设定平台相关的不同源文件,设置各种规则,利用qmake命令_qt中qmake的详解

如何放大matlab结果局部图_magnify压缩包-程序员宅基地

文章浏览阅读1.6w次,点赞33次,收藏174次。如何放大matlab结果局部图最近发现这个功能对于论文写作可以说是非常有帮助了,于是记录下来方便各位师兄或者师弟使用,也为了防止自己忘记。生成如下所示的结果 非常美观和加分首先记得下载magnify文件具体的magnify压缩包文件也已经上传,下载并解压缩即可。记得和使用的.m文件放在同一目录下,然后在生成结果图后,下方输入命令magnify并回车运行此时,在结果图中点击鼠标右键,即可放大右键所在区域图像。此时按住右键不放,ctrl键和+号可以继续放大局部图像,效果如下所示_magnify压缩包

随便推点

Python解决凯撒密码问题_python凯撒密码加密解密出现的问题-程序员宅基地

文章浏览阅读572次。凯撒密码(Python)恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z‪‬‪‬‪‬‪‬_python凯撒密码加密解密出现的问题

斯坦福大学开放课程——编程方法 作业1-2_program karel to drop a beeper in the centre squar-程序员宅基地

文章浏览阅读1.5k次。Problem 2 Karel has been hired to repair the damage done to the Quad in the 1989 earthquake. In particular, Karel is to repair a set of arches where some of the stones (represented by beepers, of course) are missing from the columns supporting the arches,_program karel to drop a beeper in the centre square of the grid, and the

偏微分方程的正问题和逆问题(inverse problem)_偏微分方程反问题-程序员宅基地

文章浏览阅读6.9k次,点赞9次,收藏47次。正问题和逆问题_偏微分方程反问题

CentOS 7 网络配置无法ping通网关、内网及外网_centos7 配置网卡无法到网关-程序员宅基地

文章浏览阅读2.7k次。CentOS 7 网络配置无法ping通网关、内网及外网今天为了安装docker,特意安装了vm虚拟机(本人系统为win10 家庭版,并且docker对windows并不如linux友好)。但是在网络配置的时候遇到不少问题。先前自己的配置跟其他博客写的都一样。该配置的都已经配置了,但是就是ping不通外网,最后才发现连网关都ping不通,十分的懊恼。最后决定从头到尾重新配置一遍。结果问题就出来了..._centos7 配置网卡无法到网关

页面每刷新一次就更换一张背景图片_jsp怎么实现刷新一个背景更换一次-程序员宅基地

文章浏览阅读3.9k次,点赞2次,收藏8次。<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>页面每刷新一次,加载不同的背景图片</title> <style> #changebg{width: 964px;height: 460px;margin: 0 auto;} </style></head><body><div id="ch_jsp怎么实现刷新一个背景更换一次

如何使用 COMSOL 进行电热分析?_comsol中铜的相对介电常数-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏13次。研究电磁仿真的工程师或研究人员,可能感兴趣的第一个多物理场耦合就是电磁(EM)热。无论是需要热量,还是要避免因电磁损耗而产生的热量,电气设备的性能几乎总受温度影响。在本篇博文中,我们将讨论如何使用 COMSOL Multiphysics软件中电磁接口的内置研究类型在低频和高频范围内进行电热分析。电磁损耗的热源计算电磁损耗的热源有多种类型。我们可以使用 COMSOL Multiphysics 软件的内置功能计算所有的电磁热源(准静态或高频状态)。软件中预定义的接口包括焦耳热,感应加热,微波加热和.._comsol中铜的相对介电常数

推荐文章

热门文章

相关标签