介绍
介绍
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。
安装Gitlab
镜像
拉取镜像
docker pull gitlab/gitlab-ce
容器
启动容器
docker run -tid \ --name gitlab \ -h gitlab \ --net eth2 \ --ip 10.16.1.163 \ --publish 9091:9091 \ --restart always \ --memory 4g \ --memory-swap -1 \ gitlab/gitlab-ce:latest
配置
修改端口
默认端口是80,当然不能给它用了
建议分配9090以上的端口,要不各种和其他服务端口冲突
[root@tongfunet]# vi /etc/gitlab/gitlab.rb nginx['listen_port'] = 9091
重启服务
gitlab-ctl reconfigure gitlab-ctl restart
开始使用
启动Gitlab
打开浏览器,输入网址 http://localhost:9091/
修改默认密码
首先我们要设置一下 root 的密码
登录Gitlab
使用 root 和刚刚设置的密码进行登录
注意是 root 不是 admin
生成SSH Key
建立SSH Key,用来向其他主机推送文件
[root@tongfunet]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:Fxz0olc9GnBd+3m7chymOJxHskX7W/yj8HypH6l5Wnk root@gitlab The key's randomart image is: +---[RSA 2048]----+ | .+ .. ..| | . = .. .| | + + o. | | . + + .o| | S o o ..o| | o . + +=| | ..B =*E| | *+++O*| | oOX++| +----[SHA256]-----+
查看SSH公钥
[root@tongfunet]# cat /root/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EABBBDAQABAAABAQDEAVZPD5j57jzmLY9Q8Iu7b4Q7c4r5BXudCW/Qcr1h/MNf9fp3FltatAnf1jXiBM0gCixdtKH/5cW8cilVfrRGg4kny6EyfEAtRKc5g5mI3rGrYCniZZuVjSZi1pI31LjiVN2ZhzZuI9roDAuSS9vnGUqYV9pkFUVbgyXGxk1k/TLWNyf4IoaxM5mr7Gg1HEKirlnMqGmhr86GayXrPJRNSeqE1O+Xg3twdoEGe3M9aV83vgLM0XOq1WKKbzLutdAHqqx9ZDO0jQd57SfCp0wiPW0hICTc+pk2tgLj1SyL36iXFtYPRS7Pz3hlaKgg4nbJ4DfJT054Cmw764DvNAID root@gitlab
点击“Settings”进入设置界面
点击左侧的“SSH Keys”进入SSH Key设置界面
项目管理
建立项目
建立项目
填写项目名称和项目描述
项目建立成功
用户管理
建立用户
建立用户
填写用户名,邮箱等信息
建立用户成功
编辑用户
编辑用户信息
修改密码
修改用户密码
组管理
建立组
建立组
填写组名称
组建立成功
添加组成员
添加组成员
添加用户到组
安装Gitlab-Runner
有两种方式安装 gitlab-runner
一种是通过docker镜像安装,优点是简单,缺点是可维护性差
另一种是通过RPM安装,优点是可维护性高,缺点是安装过程相对繁琐一些
我们更加推荐使用RPM安装,以后还可以自己安装其他脚本,更加灵活地构建项目
通过镜像安装
镜像
拉取gitlab-runner镜像
docker pull docker.io/gitlab/gitlab-runner
容器
启动gitlab-runner容器
docker run -tid \ --name gitlab_runner \ -h gitlab_runner \ --net eth2 \ --ip 10.16.1.165 \ --restart always \ --memory 512m \ --memory-swap -1 \ gitlab/gitlab-runner:latest
通过RPM安装
容器
通过最小镜像启动一个gitlab-runner容器
docker run -tid \ --name gitlab_runner \ -h gitlab_runner \ --net eth2 \ --ip 10.16.1.165 \ --restart always \ --memory 512m \ --memory-swap -1 \ docker.io/centos:latest \ /usr/sbin/init
安装gitlab-runner
准备
yum -y install wget
下载
从 https://packages.gitlab.com/runner/gitlab-runner 选择合适的版本
wget --content-disposition https://packages.gitlab.com/runner/gitlab-runner/packages/el/7/gitlab-runner-12.1.0-1.x86_64.rpm/download.rpm
安装
rpm -ivh gitlab-runner-12.1.0-1.x86_64.rpm --nodeps
安装Git客户端
准备
yum -y install gcc gcc-c++ make yum -y install zlib-devel gettext-devel curl-devel autoconf
下载
从 https://mirrors.edge.kernel.org/pub/software/scm/git/ 选择合适的版本
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.21.0.tar.gz
安装
tar -xzvf git-2.21.0.tar.gz cd git-2.21.0 ./configure make make install
设置SSH Keys
通过RPM安装gitlab-runner环境,需要自己设置SSH Keys(不知道为什么,镜像方式就不用)
生成SSH Keys
[root@gitlab_runner gitlab_runner]# su gitlab-runner [gitlab-runner@gitlab_runner gitlab_runner]$ ssh-keygen -t rsa
查看SSH Keys
[gitlab-runner@gitlab_runner gitlab_runner]$ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAABAQACAAABAQDEpw2UJ7wyR1sHVfcLQjhL9aeqshAM68dO04dp50x1yRsEG3sn7tn0VLGCW8JqwKLWXGTiQw+9ah5kOGH1F8A9eFA2I55xBPLSiUCJksfAYm9q45FRF0JRPIOeFDk6Z51kRHW3YaUtPXZ+uY23gcAk9qokJe9YcVaGMlAUWci/AgmIlqZ73SDtJfJvK6tFDnyCWZ4OLNsoxMxXcqIUasW7CneJL3+QNFswqTgyXx4rF0K4WpFUkgwkD579xkpO2HsQS3VXl/DY+YSQX/8O7ZbkDZakjn3pJidRGltEgmGe8xtHPrXXWW64n3UjRUw1Ja/+luUU/2vurU1WqqwLPylz gitlab-runner@gitlab_runner
其实这里就是建立runner到gitlab通道的单方向SSH信任
配置SSH Keys
再gitlab上的账号里面添加这个Key即可
配置Gitlab-Runner
注册runner
注册runner之前需要先创建gitlab项目,部分参数需要在项目的 CI / CD 里找到
进入gitlab_runner容器,注册runner到gitlab
[root@gitlab_runner /]# gitlab-runner register
如果URL或者token错误,注册会失败
第一步的URL,第二步的token,可以在gitlab的项目下找到
运行器(executor)根据自己的情况选择即可,一般情况下可以选择 shell
注册成功后再次回到这个界面可以看到刚刚注册的runner已经激活了
查看runner
通过下面的命令查看runner列表
gitlab-runner list
注销runner
选择一个要注销的runner,使用下面的命令注销
gitlab-runner unregister --name test
或者用url和token注销
gitlab-runner unregister --url htt://gitlab/ --token xxxxxx
CI / CD
使用CI / CD来部署项目,跟我来吧!
第一步:在项目根目录建立配置文件 .gitlab-ci.yml,示例内容如下:
stages: - test my_dev_deploy: stage: test tags: - build only: - master script: - sh my_dev_deploy.sh
第二步:在项目目录下(也可以去runner服务器)建立自动部署脚本:
#!/bin/sh # 根据自己的情况编写 ...
最后:通过git开发,提交后,合并到master的时候会自动出发部署任务
因为gitlab项目的master分支是不能直接push的,只能通过合并的方式。
当master发生合并事件后就会自动出发runner去部署程序了
我们可以设置脚本自动部署到测试环境,丢给测试人员进行测试
测试通过后反馈给管理员,由管理员手动执行打标记操作
管理员最后再将此次的新版本手动推送到相应的生产环境上
迁移数据
迁移数据
如果我们想更改gitlab的仓库存放路径可以安装如下步骤操作
停止gitlab服务
gitlab-ctl stop
复制仓库父目录到新路径(当然你也可以移动这个目录)
rsync -av /var/opt/gitlab/git-data/ /gitlab/
修改配置文件(添加或修改如下参数)
[root@tongfunet]# vi /etc/gitlab/gitlab.rb git_data_dirs({ "default" => { "path" => "/gitlab" } })
重新配置gitlab服务
gitlab-ctl reconfigure
启动gitlab服务
gitlab-ctl start
注意:一定不要使用符号链接!!!
迁移仓库
从Git迁移到Gitlab
建立好了Gitlab,我们希望把我们的代码从Git转到Gitlab,但是又不想丢失之前的日志,怎么办?
可以参考下面的操作进行仓库迁移
从Git克隆带日志的版本
git clone --bare git@git.xxx.com:root/my-repository.git
进入带日志的版本目录
cd my-repository.git
镜像方式推送带日志的版本到Gitlab
git push --mirror git@gitlab.xxx.com:root/my-repository.git
现在就可以再Gitlab上进行克隆等操作了!
FAQ
Gitlab-runner
Pipelines总是pending
原因:
这个情况基本就是runner和gitlab之间的通讯出了问题了
或者就是gitlab-ci.yml脚本有问题了
或者就是gitlab-ci.yml的jobs执行不了
解决:
curl看看url是否通?
gitlab-ci.yml保存时候有没有报错?
jobs的executor是否可用?
unable to access 'http://gitlab-ci-token:xxxxxx@ip/xxx/xxx.git'
原因:
这个情况基本就是gitlab没有使用80端口的缘故
解决:
如果gitlab用的是nginx发布的,注册runner的时候就需要设置clone_url
clone_url就设置gitlab的external_url就可以了(带端口的)
bash: line 77: ci/xxx.sh: Permission denied
原因:
脚本没有执行权限
解决:
授权可执行权限
示例:
script: - chmod +x ci/xxx.sh - ci/xxx.sh
在前面增加sh解析器
示例:
script: - sh ci/xxx.sh
repository 'http://gitlab/root/test.git/' not found
原因:
我们的客户端记住了一套用户名和密码,但是这套用户名密码没有权限克隆当前仓库
解决:
在地址上附加用户名和密码
示例:
http://user:pwd@gitlab/root/test.git
让TortoiseGit每次都需要输入密码的方法
随便找一个文件夹,右键-> Settings -> Git -> Credential
右侧的 Credential 选择 None,点击应用按钮