docker 安装 gitlab,gitlabrunner 实现 CICD 笔记
搭建 gitlab 服务
执行命令:
拉取 gitlab 的 docker 镜像
docker pull gitlab/gitlab-ce
运行 gitlab 服务容器
docker run -d -p 45672:443 -p 45673:45673 -p 45674:22 --restart always --name gitlab -v /install/gitlab/etc:/etc/gitlab -v /install/gitlab/log:/var/log/gitlab -v /install/gitlab/data:/var/opt/gitlab --privileged=true gitlab/gitlab-ce:latest
命令详细解释:
docker run
-d #表示后台运行 (所有 docker 容器基本必须加的参数)
–name gitlab #表示该容器的名称,必须是唯一·的值,不能重复,可以用它他来代替容器 id,更容易记忆,就类似于域名和 IP 的关系,用它可以代替容器 ID 删除,或者停止容器服务
–restart always #能够使我们在重启 docker 时,自动启动相关容器 (所有 docker 容器基本必须加的参数)
-p 45673:45673 #用宿主机的 45673 端口映射容器内部服务的 45673 端口(gitlab 的 http 默认访问端口是 80 但是 80 端口会显示成 clone 的但其实和我们不符合,所以先让容器启动,启动不成功不管,先让容器产生配置文件,改了默认配置的 80 改成 45673 就可以启动成功了),相当于访问 45672 就等于访问 443 端口的服务(gitlab 容器服务默认启动的就是 80 端口,我们访问 web,并且通过 http 方式下载代码的也用的这个服务,下面两个 443 和 22 其实是需要用 ssh 方式下载代码才会用到,所以这次不用管吗,但是必须要映射上)
-p 45672:443 #用宿主机的 45672 端口映射容器内部服务的 443 端口,相当于访问 45672 就等于访问 443 端口的服务(有可能一个容器中有多个服务端口需要映射,所以可以有多个 p,比如 gitlab 里面就有 3 个端口需要映射,容器内部的端口不会和宿主机的端口有冲突,因为容器是独立的)
-p 45674:22 #用宿主机的 45674 端口映射容器内部服务的 22 端口,相当于访问 45672 就等于访问 443 端口的服务(和上面 443 相同)
-v /install/gitlab/etc:/etc/gitlab #挂在容器的配置文件目录到宿主机某个目录(挂在容器目录到宿主机目录,也可以理解为将宿主机的目录映射成容器内部的某个目录,目的在于数据持久化和便于我们修改配置文件,以后将容器删除掉,在启动容器的时候只要也用同样的宿主机目录挂载,只要文件不删除,那么以前的容器使用的过的数据都不会改变的,而且我们在宿主机修改文件可以用 vm 或者 xftp 到本地来修改,但是容器内部修改很麻烦,不支持 vim 这种非自带的命令 ,如果不挂载删除容器在启动一个就没以前的数据了,又得重零配置一遍,:冒号左边是宿主机的目录,右边是容器内部的目录,容器哪些目录需要挂载,只要牵涉到启动容器以后需要改配置和数据存储的都要挂载,还有个要理解的点是,重启 docker 的某个容器服务,实际上就是先要停止当前服务的容器,然后再删除当前服务容器,然后在获取最新的镜像重启服务)
-v /install/gitlab/log:/var/log/gitlab #挂载容器内部的日志目录,方便我们跟踪日志发现问题(描述和上面一样)
-v /install/gitlab/data:/var/opt/gitlab #挂载容器内部的数据目录,我们下次把容器删除了再重启一个,只要挂在还是这个宿主机的目录,那么以前的提交的代码就一样的会保存,和数据库容器一样,我只要不删除数据挂在目录,下次删掉容器在重启一个,数据也还在,就是变相持久化(描述和上面一样)
–privileged=true #权限 ,给容器赋予最高权限 (所有 docker 容器基本必须加的参数,会减少很多不必要的权限错误)
gitlab/gitlab-ce:latest # 指定镜像的版本 格式:仓库地址/镜像项名称:镜像版本号 latest 表示最新的版本号 (所有 docker 容器基本必须加的参数)
注意事项:
clone 的仓库 url 的前面是随机数并非标准 ip:端口的形式的问题修改方式 :
先不不急着验证启动是否成功,因为我们再开始容器映射的时候映射的是容器的 45673 端口,所以我们先去改配置文件中的 80 改成 45673 端口在来验证
因为我们已经把 gitlab 服务所需要的配置文件目录都挂载在了宿主机的/install/gitlab/目录下面,那么只需要对应的去修改 gitlab.rb , gitlab.yml ,
修改方式有多种:
1.可以找到对应目录的文件用xftp下载到本地进行修改再传上去
2.还可以直接在宿主机利用vi命令去修改
3.还可以直接linux的替换命令 sed直接替换(前面两种都需要人为介入修改,自动化程度不高,建议直接用sed,这样可以交给脚本完成)
将 gitlab.rb 中的 external_url ‘GENERATED_EXTERNAL_URL’ 替换成 external_url
‘http://你自己的宿主机 IP:45673’
sed -i “33c external_url ‘http://你自己宿主机的 ip:45673’” /install/gitlab/etc/gitlab.rb
#将/gitlab.yml 中的 13 行整行换成 前面 4 个缩进空格(因为是 yml 文件,必须手动输入空格,不然默认整行替换没有缩进,文件内容格式不对)的后面是 host: 你自己的宿主机 IP
sed -i "13c \ \ \ \ host: 你自己的宿主机IP" /install/gitlab/data/gitlab-rails/etc/gitlab.yml
#修改 gitlab 容器内部 web 界面服务默认端口 80 为 45673,将/gitlab.yml 中的 14 行整行换成 前面 4 个缩进空格(前面 4 个缩进空格(因为是 yml 文件,必须手动输入空格,不然默认整行替换没有缩进,文件内容格式不对))的后面是 port: 45673
sed -i "14c \ \ \ \ port: 45673" /install/gitlab/data/gitlab-rails/etc/gitlab.yml
然后重启 gitlab 服务容器(和第一次启动一样,gitlab 比较大所以需要多等几分钟)
docker restart gitlab
然后用root+初始密码登录==>查看有个默认的Monitoring项目仓库==>看他的clone的地址的IP和端口是否和你浏览器输入的一致(如果是域名就看域名是否一致即可)
验证 gitlab 是否搭建成功
gitlab 容器启动完成以后,至少得等待个 3 分钟左右以上,然后访问 http://你自己的宿主机 IP:45673 ,如果什么都没有,那就再耐心等待几分钟,如果访问出现 502 了,那也就说明服务启动正常的但是还没启动完,还需要再耐心等待 2 分钟左右,再刷新 URL 知道出现下面界面,当然服务器配置很好,也有可能等个 3 分钟就能直接访问到该页面,所以验证 gitlab 是否正常启动的标准就是是否出现登录页面
root 管理员初始密码查看
gitlab 的默认管理账号是 root,但是初始密码需要根据进入 gitlab 的容器以后输入命令查看进入 gitlab 容器的命令行
docker exec -it gitlab bash
查看密码
grep 'Password:' /etc/gitlab/initial_root_password
出现一个 password 的后面就是你的 root 的初始登录密码
退出容器,回到宿主机
exit
以上 3 个步骤还有个更简单的执行方式,就是下面,把 bsh 换成要执行的命令,就直接在宿主机就可以查看了,不需要进入在退出容器(这种操作同样也可以在其他容器使用,凡是需要进入容器执行命令在退出容器的操作,都可以用这种方式代替)
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
修改 root 账号的初始面的方法
进入 gitlab 以后,先及时修改 root 账号的密码,然后重新登录
右上角头像=>Edit Profile=>左侧菜单栏 Password=>依次输入旧密码,新密码,确认新密码=>Save Password=>重新登录即可
搭建 gitlab-runner 服务
执行命令:
拉取 gitlab-runner 的 docker 镜像
docker pull gitlab/gitlab-runner
运行 gitlab-runner 的容器服务
docker run -d --name gitlab-runner --restart always --privileged=true -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /install/gitlab-runner/config:/etc/gitlab-runner -v /etc/sysconfig/docker:/etc/sysconfig/docker -v /usr/bin/docker-current:/usr/bin/docker-current gitlab/gitlab-runner:latest
修改挂载在宿主机的配置文件,依次执行下面三条命令
sed -i 's!"/cache"!"/cache","/var/run/docker.sock:/var/run/docker.sock","/usr/local/repos/gradle:/usr/local/repos/gradle","/etc/sysconfig/docker:/etc/sysconfig/docker","/usr/bin/docker-current:/usr/bin/docker-current","/usr/bin/docker:/usr/bin/docker"!g' /install/gitlab-runner/config/config.toml
sed -i 's,privileged = false,privileged = true,g' /install/gitlab-runner/config/config.toml
重启 gitlab-runner 容器,让最新配置生效
docker restart gitlab-runner
注册 gitlab-runner 执行器到 gitlab
获取 gitlab 仓库 CICD 的 token 以及注册 URL
新建一个仓库点进去==>左侧菜单Settings==>CICD==>Runners==>复制Register the runner with this URL下面的url==>复制And this registration token
注册 gitlab-runner 容器到 gitlab
执行命令:
docker exec -it gitlab-runner gitlab-runner register
然后按照上面命令给出的提示依次输入,每次输入完成回车到下一项:
注册URL(上一步获取的)==>注册token(上一步获取的)==>run-desc(命名可以随意)==>run tags(命名可以随意,可以编写ci配置文件会用上) ==>run main(命名可以随意)==>docker(必选docker构建容器)==>alpine:latest(必输docker的版本)
检验执行器是否注册成功:
回到之前查看token的那个gitlab页面,刷新一下 在token下面会有一个 Available specific runners ,并且前面的图标是绿色的代表注册成功
搭建私有化 registry 镜像仓库服务
私有化镜像仓库和 docker 安装的时候自带的镜像库的区别:
私有化镜像仓库可以给网络相同的任一服务器上面的docker服务提供镜像下载服务,而docker自带的镜像库就是只能给当前服务器上面的docker服务提供镜像依赖
执行命令:
拉取 registry 镜像
docker pull registry:latest
运行 registry 容器服务
docker run -d -v /install/registry:/var/lib/registry -e REGISTRY_STORAGE_DELETE_ENABLED="true" -p 5000:5000 --restart=always --name docker-registry registry:latest
命令行 curl 验证是否搭建成功
curl -X GET http://localhost:5000/v2/_catalog
出现{“repositories”:[]},空数组就说明安装成功了,只是现在还没有上传镜像所以还是空数组