配置gitlab环境实现代码管理及Web Hook测试和ldap认证

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

前沿:

        对于代码库感触有点多,用过redmine(差点忘了名字),还有就是gitweb,最后就是gitlab  。 gitlab是我用的很舒服的东西,在2012就接触了,当时开发水平见不得人,主要上传的还是常用安装配置脚本、简单的cs端,及ganglia插件之类的。

在以前的以前的公司,我也负责维护过gitlab,但是那边的很多需求,比如自动化测试,提供git-shell接口啥的,需要懂ruby,算了,玩不转。。so, 就把这个事给推了,让开发自己搞了。 据说部门直接招了一个rubu搞gitlab的二次开发 !   来了新公司,这边的代码库用的实在是不习惯,这个星期自己配置了gitlab用来上传代码和管理。


           申请了一个服务器,居然是ubuntu !  是别的开发剩下的,算了,能用就挺好的。再跟他们扯皮,估计就直接给你一个kvm主机了。


基本的环境,你懂的!


1
sudo apt- get  install -y build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl git-core openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev


配置ruby环境,其实个人建议直接apt-get install ruby 就好了,编译实在是墨迹!


1
2
3
4
5
6
mkdir /tmp/ruby && cd /tmp/ruby
curl --progress http: //ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz | tar xz
cd ruby- 1.9 . 3 -p392
./configure
make
sudo make install


安装配置 bundler

1
sudo gem install bundler


wKiom1MRg2jyujfYAAGzC7uZ0wo148.jpg



# 创建用户


sudo adduser --disabled-login --gecos 'GitLab' git


wKiom1MRhGDSPnfGAAGzs-yvL14226.jpg


# 登录第三步创建的 git 用户,克隆 gitlab-shell


1
2
3
4
5
sudo su git
cd /home/git
git clone https: //github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
cp config.yml.example config.yml


wKiom1MRhKrz7MV0AATQA3NZGeY122.jpg


# 给主机域名.例如 'http://domain.com/',本地局域网安装的话默认localhost也可以本地的ip地址,我这边直接用localhost


vim config.yml


# 开始安装.(这里就等吧~ )

./bin/install



# 软件源安装 mysql 数据库,过程中会让你输入两次 mysql root 用户的密码,牢记!


1
2
3
4
5
6
7
8
9
sudo apt-get install -y mysql-server mysql-client libmysqlclient-dev
mysql -u root -p
CREATE  USER  'gitlab' @ 'localhost'  IDENTIFIED  BY  '123123' ;
# 创建 gitlabhq_production 数据库
mysql>  CREATE  DATABASE  IF  NOT  EXISTS `gitlabhq_production`  DEFAULT  CHARACTER  SET  `utf8`  COLLATE  `utf8_unicode_ci`;
# 将 gitlabhq_production 数据库的增删改查 等权限赋予 gitlab 用户
mysql>  GRANT  SELECT , LOCK TABLES,  INSERT UPDATE DELETE CREATE DROP INDEX ALTER  ON  `gitlabhq_production`.*  TO  'gitlab' @ 'localhost' ;
# 退出 mysql 数据库
mysql> \q


# 尝试用 gitlab 用户连接 gitlabhq_production 数据库,登录成功(注:出现 mysql>)说明数据库配置完成.


sudo -u git -H mysql -u gitlab -p -D gitlabhq_production


wKioL1MRhPPTY-nwAAFiCL3hQ2c159.jpg

(提示这个,是因为你的git用户的git命令没有在sudoers权限授权的原因。)


# gitlab 要安装到 git 用户的 home 目录下.

cd /home/git

# 克隆 gitlab 项目,并切换分支, 配置文件


1
2
3
4
5
6
7
8
9
sudo -u git -H git clone https: //github.com/gitlabhq/gitlabhq.git gitlab
cd /home/git/gitlab
# 切换到 gitlab 的  5.3  分支.
sudo -u git -H git checkout  5 - 3 -stable
cd /home/git/gitlab
# 复制 gitlab 的示例配置文件到指定目录
sudo -u git -H cp config/gitlab.yml.example config/gitlab.yml
# 如果用的不是本地服务器,更改 localhost 为 gitlab 的服务器域名
sudo -u git -H vim config/gitlab.yml


# 确保当前用户对 gitlab 的 log 和 tmp 文件有读写权限.


1
2
3
4
5
6
7
8
9
10
11
12
sudo chown -R git log/
sudo chown -R git tmp/
sudo chmod -R u+rwX  log/
sudo chmod -R u+rwX  tmp/
sudo -u git -H mkdir /home/git/gitlab-satellites
sudo -u git -H mkdir tmp/pids/
sudo -u git -H mkdir tmp/sockets/
sudo chmod -R u+rwX  tmp/pids/
sudo chmod -R u+rwX  tmp/sockets/
sudo -u git -H mkdir  public /uploads
sudo chmod -R u+rwX   public /uploads
sudo -u git -H cp config/puma.rb.example config/puma.rb


# 找到其中有一行 # workers 2,去掉前面的 # 并将 2 改为 3.

sudo -u git -H vim config/puma.rb



# 配置 gitlab 的全局设置.

sudo -u git -H git config --global user.name "GitLab"

sudo -u git -H git config --global user.email "gitlab@localhost"


# 复制示例Mysql配置文件到指定目录

sudo -u git cp config/database.yml.mysql config/database.yml


# 修改里面的 root 为 gitlab, 密码为创建的 gitlab mysql 用户密码

sudo vim config/database.yml

cd /home/git/gitlab

sudo gem install charlock_holmes --version '0.6.9.4'

sudo -u git -H bundle install --deployment --without development test postgres

sudo -u git -H bundle exec rake gitlab:setup RAILS_ENV=production


wKiom1MRhsWjL4BrAAMIILOgKWI641.jpg


# 下载 gitlab 的 开始/停止 脚本,并且加入当前用户的可执行权限.

sudo cp lib/support/init.d/gitlab /etc/init.d/gitlab

sudo chmod +x /etc/init.d/gitlab

# 添加 gitlab 的开机启动

sudo update-rc.d gitlab defaults 21


# 检查 gitlab 的状态和环境配置是否正确.

sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

# 启动 gitlab

sudo service gitlab start

# 或者

sudo /etc/init.d/gitlab restart


好了,这样gitlab的配置都算ok啦~  咱们现在搞搞gitlab最主要的页面部分了!


安装配置nginx,你懂的~

(因为我这边的nginx有点复杂参杂着lua和uwsgi,所以折腾的时候费了不少时,其实很简单的问题,让我折腾复杂了。。。呵呵)

1
2
3
apt- get  install nginx
sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab


nginx.conf的server块的配置 !

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
   listen  80 ;        # e.g., listen  192.168 . 1.1 : 80 ; In most cases *: 80  is  a good idea
   server_name ceshi.xiaorui.cc;     # e.g., server_name source.example.com;
   server_tokens off;     # don't show the version number, a security best practice
   root /home/git/gitlab/ public ;
   # individual nginx logs  for  this  gitlab vhost
   access_log  / var /log/nginx/gitlab_access.log;
   error_log   / var /log/nginx/gitlab_error.log;
   location / {
     # serve  static  files from defined root folder;.
     # @gitlab  is  a named location  for  the upstream fallback, see below
     try_files $uri $uri/index.html $uri.html @gitlab;
   }
   if  a file, which  is  not found  in  the root folder  is  requested,
   # then the proxy pass the request to the upsteam (gitlab unicorn)
   location @gitlab {
     proxy_read_timeout  300 ; # https: //github.com/gitlabhq/gitlabhq/issues/694
     proxy_connect_timeout  300 ; # https: //github.com/gitlabhq/gitlabhq/issues/694
     proxy_redirect     off;
     proxy_set_header   X-Forwarded-Proto $scheme;
     proxy_set_header   Host              $http_host;
     proxy_set_header   X-Real-IP         $remote_addr;
     proxy_pass http: //gitlab;
   }
}


好了,咱们就可以登录了!

默认的帐号和密码是


1
2
admin@local.host
5iveL!fe



wKiom1MRiLjjiV20AAFNlFSMcgw908.jpg


这是我刚才上传的代码,代码的样式主题还是很时尚的。

wKioL1MRw4qjf3DUAAMmqTredzQ542.jpg


代码的高亮显示效果,还不错哈~

wKiom1MRiUriPmZbAAMcZSyZLJg008.jpg


gitlab针对ldap的认证,很容易就可以实现,毕竟帐号管理自己做太麻烦啦,联合windows ad的话,就好办多啦。


vim /home/git/gitlab/config/gitlab.yml


1
2
3
4
5
6
7
8
9
10
## LDAP settings
ldap:
   enabled:  true
   host:  '10.58.1.33'
   base:  '_ruifengyun'
   port:  636
   uid:  'sAMAccountName'
   method:  'ssl'  "ssl"  or  "plain"
   bind_dn:  ''
   password:  'xxx'


我这边gitlab的邮件提醒不好用,咱们可以直接用smtp的方式!


cd /home/git/gitlab/

vi config/environments/production.rb


在# config.action_mailer.delivery_method = :sendmail下加入


1
2
3
4
5
6
7
8
9
10
11
12
config.action_mailer.delivery_method  =  :smtp
config.action_mailer.perform_deliveries  =  true
config.action_mailer.raise_delivery_errors  =  true
config.action_mailer.smtp_settings  =  {
  :address               = "smtp.gmail.com" ,
  :port                  = 587 ,
  :domain                = 'gmail.com' ,
  :user_name             = 'ruifengyun@gmail.com' ,
  :password              = 'password' ,
  :authentication        = >  :plain,
  :enable_starttls_auto  = > true
}


编辑config/gitlab.yml


vi config/gitlab.yml


对应修改一下配置


1
2
3
email:
   from: ruifengyun@gmail.com
   protocol: http


wKioL1MRkw6xy3FBAAGbbXynebQ451.jpg

官方给了例子,POST过来的是一个json串,咱们在服务器端接收后,就可以做自己喜欢的事情了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
   "before" "95790bf891e76fee5e1747ab589903a6a1f80f22" ,
   "after" "da1560886d4f094c3e6c9ef40349f7d38b5d27d7" ,
   "ref" "refs/heads/master" ,
   "user_id" 4 ,
   "user_name" "John Smith" ,
   "repository" : {
     "name" "Diaspora" ,
     "url" "git@localhost:diaspora.git" ,
     "description" "" ,
     "homepage" "http://localhost/diaspora" ,
   },
   "commits" : [
     {
       "id" "b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327" ,
       "message" "Update Catalan translation to e38cb41." ,
       "timestamp" "2011-12-12T14:27:31+02:00" ,
       "url" "http://localhost/diaspora/commits/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327" ,
       "author" : {
         "name" "Jordi Mallach" ,
         "email" "jordi@softcatala.org" ,
       }
     },
     // ...
     {
       "id" "da1560886d4f094c3e6c9ef40349f7d38b5d27d7" ,
       "message" "fixed readme" ,
       "timestamp" "2012-01-03T23:36:29+02:00" ,
       "url" "http://localhost/diaspora/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7" ,
       "author" : {
         "name" "GitLab dev user" ,
         "email" "gitlabdev@dv6700.(none)" ,
       },
     },
   ],
   "total_commits_count" 4 ,
};


PHP端的一个接收实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$mirrordir = '/srv/http/gitlabhooktest/gitmirror' ;
$gitdir = $mirrordir . "/.git" ;
$json file_get_contents ( 'php://input' );
# error_log ( $json );
$jsarr =json_decode( $json ,true);
# error_log (print_r( $jsarr ,true));
$branch = $jsarr [ "ref" ];
if ( $branch == 'refs/heads/master' ){
  $cmd = "git --work-tree=$mirrordir --git-dir=$gitdir pull" ;
  # error_log ( $cmd );
  exec ( $cmd );
}


我用python实现post的一个接口:

1
2
3
4
5
6
app.route( '/apiinfo' , methods = [ 'POST' ])
def fortx():
     print request.data
     print request.form.keys()
     print request.form.values
     return  "..."


原文:http://rfyiamcool.blog.51cto.com/1030776/1365521


   我现在正在用gitlab的web hook的功能,类似与消息钩子,url回调的东西,你上传了代码这边可以把信息post到你指定的api上。

我们可以用gitlab 的 web hook功能做一个自动化测试,指定一台测试服务器跑测试,测试ok后,再回个邮件或者是真实的merge代码等等。


好了,就说道这里了,gitlab 搭建有点复杂,尤其是git clone gitlab的时候,经常会断,可以加个ssh代理后,再搞吧 ~



用ubuntu 安装配置gitlab遇到的问题总结小叙下:

push和pull的时候遇到的问题

Username for 'http://10.58.101.248:9000': root

Password for 'http://root@10.58.101.248:9000':

Counting objects: 230, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (223/223), done.

error: RPC failed; result=22, HTTP code = 411

fatal: The remote end hung up unexpectedly

Writing objects: 100% (229/229), 3.43 MiB | 0 bytes/s, done.

Total 229 (delta 32), reused 0 (delta 0)

fatal: The remote end hung up unexpectedly

Everything up-to-date


需要在git端和nginx端配置nginx client_max_body_size的大小,不然在上传文件的时候会报错。


GitLab 的代码仓库支持 SSH 和 HTTPS 两种访问方式:


先说用SSH 访问,需要 ssh-keygen 生成密钥,把公钥(id_rsa.pub)添加到 GitLab 里面去。

但是有些人去pull和push的时候,会经常遇到提示 git@ip 的密码,gitlab@110.58.101.248's password:

这个时候很有可能是你的配置文件的权限有问题,或者是你的ssh配置文件,禁止了密码登陆,PasswordAuthentication no改为yes。


还有一个可能出现的问题先前的配置引起的。   --disabled-login不运行passwd设置密码,用户只有设置了密码才能使用他的账号。所以就出问题了,表现如题所述。


解决的方法是:  

sudo adduser --disabled-password --gecos 'GitLab' git

--disabled-password同--disabled-login,但可以登录(如使用SSH RSA keys),但不能使用密码认证。


HTTPS 访问,每次连接服务器都要输入用户名(注册邮箱)和密码。可以作为在公用电脑上的临时访问方式。


如何配置https安全的访问,其实很简单,先生成证书,然后改改nginx.conf配置文件就欧了。 建议大家用https的方式,来访问gitlab。

1
2
3
4
5
server {
   listen  443 ;
   ssl                  on;
   ssl_certificate      /etc/nginx/sites-available/server.crt;
   ssl_certificate_key  /etc/nginx/sites-available/server.key;


因为咱们的证书是自生成的,git不认所以需要在git的环境里面配置不要检测https的证书。


1
export GIT_SSL_NO_VERIFY= 1







 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1365521,如需转载请自行联系原作者


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
30天前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
21天前
|
运维 关系型数据库 MySQL
os-copilot安装_配置_功能测试全集
我是一位中级运维工程师,我平时工作会涉及到 各类服务器的 数据库 与 java环境配置 操作。 我顺利使用了OS Copilot的 -t -f | 功能,我的疑惑是不能在自动操作过程中直接给与脚本运行权限,必须需要自己运行一下 chmod 这个既然有了最高的权限,为什么就不能直接给与运行权限呢。 我认为 -t 功能有用,能解决后台运行基础命令操作。 我认为 -f 功能有用,可以通过task文件中撰写连续任务操作。 我认为 | 对文件理解上有很直接的解读,可以在理解新程序上有很大帮助。
162 86
|
20天前
|
人工智能 Ubuntu Linux
os-copilot使用之全面配置与使用测试
作为一名个人开发者,我主要从事云服务器架设工作。近期,我成功使用了OS Copilot的 `-t -f |` 功能,解决了执行语句、连续提问及快速理解文件的问题。我发现这些功能非常实用,特别是在使用Workbench时能快速调用AI助手。此外,建议将AI功能与xShell工具联动,进一步提升效率。文中详细记录了购买服务器、远程连接、安装配置OS Copilot以及具体命令测试的过程,展示了如何通过快捷键和命令行操作实现高效开发。
124 67
|
22天前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
25 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
2月前
|
域名解析 弹性计算 监控
slb测试基本配置检查
slb测试基本配置检查
115 60
|
2月前
|
监控 负载均衡 容灾
slb测试配置
slb测试配置
47 5
|
23天前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
23天前
|
存储 测试技术 数据库
接口测试工具攻略:轻松掌握测试技巧
在互联网快速发展的今天,软件系统的复杂性不断增加,接口测试工具成为确保系统稳定性的关键。它如同“翻译官”,模拟请求、解析响应、验证结果、测试性能并支持自动化测试,确保不同系统间信息传递的准确性和完整性。通过Apifox等工具,设计和执行测试用例更加便捷高效。接口测试是保障系统稳定运行的第一道防线。
|
23天前
|
Web App开发 JSON 测试技术
API测试工具集合:让接口测试更简单高效
在当今软件开发领域,接口测试工具如Postman、Apifox、Swagger等成为确保API正确性、性能和可靠性的关键。Postman全球闻名但高级功能需付费,Apifox则集成了API文档、调试、Mock与自动化测试,简化工作流并提高团队协作效率,特别适合国内用户。Swagger自动生成文档,YApi开源但功能逐渐落后,Insomnia界面简洁却缺乏团队协作支持,Paw仅限Mac系统。综合来看,Apifox是国内用户的理想选择,提供中文界面和免费高效的功能。
|
2月前
|
监控 JavaScript 测试技术
postman接口测试工具详解
Postman是一个功能强大且易于使用的API测试工具。通过详细的介绍和实际示例,本文展示了Postman在API测试中的各种应用。无论是简单的请求发送,还是复杂的自动化测试和持续集成,Postman都提供了丰富的功能来满足用户的需求。希望本文能帮助您更好地理解和使用Postman,提高API测试的效率和质量。
125 11