同福

Gitlab学习笔记

介绍

介绍

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 的密码

089ff5ed69c83c9c.jpg

登录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”进入设置界面

1.jpg

点击左侧的“SSH Keys”进入SSH Key设置界面

2.jpg

项目管理

建立项目

建立项目

3.jpg填写项目名称和项目描述

2.jpg项目建立成功

5.jpg

用户管理

建立用户

建立用户

2.jpg填写用户名,邮箱等信息

3.jpg建立用户成功

4.jpg

编辑用户

编辑用户信息

1.jpg修改密码

修改用户密码

2.jpg

组管理

建立组

建立组

22.jpg填写组名称

33.jpg组建立成功

44.jpg

添加组成员

添加组成员

1.jpg

添加用户到组

6.jpg

安装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信任

2e5e0f3952c1f12a.jpg

配置SSH Keys

再gitlab上的账号里面添加这个Key即可

166b65644d10fd73.jpg

配置Gitlab-Runner

注册runner

注册runner之前需要先创建gitlab项目,部分参数需要在项目的 CI / CD 里找到

进入gitlab_runner容器,注册runner到gitlab

[root@gitlab_runner /]# gitlab-runner register

如果URL或者token错误,注册会失败

d59e8a64d032f82d.jpg第一步的URL,第二步的token,可以在gitlab的项目下找到

1.jpg

2.jpg3.jpg运行器(executor)根据自己的情况选择即可,一般情况下可以选择 shell

1.jpg注册成功后再次回到这个界面可以看到刚刚注册的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,点击应用按钮