当前位置:   article > 正文

Gitlab: 私有化部署

Gitlab: 私有化部署

目录

1. 说明

2. 服务器

3. 安装 

4. 配置实践

4.1 人员与项目

4.2 部署准备

4.2.1 访问变量及用户账号设置

4.2.2 Runner设置

4.2.3 要点

5. 容器镜像(Container Registry)

5.1 准备

5.2 配置 

 5.3 测试

6. 应用项目 CI/CD

7. 参考


1. 说明

    Gitlab是一个强大且免费的代码管理/部署工具,能统一集成代码仓库,CI/CD的工作。开始时我以为只能在官网上使用,后来才知道能私有化部署,确实了不起。

原理图:

2. 服务器

    gitlab资源要求比较高,建议8核16G,目前我的虚拟机是分配了5核12G,要是工作负荷上来,还要划拨资源。

ServerIP配置备注
host001.dev.ia192.168.0.1305核/12G/200G硬盘Gitlab服务器 / Gitlab Runner工作站 / 开发服务器1
host002.dev.ia192.168.0.1312核/4G/200G硬盘开发服务器2

在各自的 /etc/hosts 做上述设定

3. 安装 

docker-composer方式,指定外部访问url为 http://host001.dev.ia:18181

gitlab.yml

  1. version: "3.5"
  2. services:
  3. web:
  4. image: 'gitlab/gitlab-ce:latest'
  5. container_name: gitlab
  6. restart: always
  7. hostname: 'gitlab.dev.ia'
  8. environment:
  9. GITLAB_OMNIBUS_CONFIG: |
  10. external_url 'http://host001.dev.ia:18181'
  11. # Add any other gitlab.rb configuration here, each on its own line
  12. ports:
  13. - '18181:18181'
  14. - '2222:22'
  15. - '5050:5050'
  16. volumes:
  17. - '/data0/Server/Settings/gitlab:/etc/gitlab'
  18. - '/data0/Server/Logs/gitlab:/var/log/gitlab'
  19. - '/data0/Server/Db/gitlab:/var/opt/gitlab'
  20. shm_size: '256m'

安装后进去容器设置管理员(root)密码

  1. gitlab-rails console -e production
  2. irb> user = User.where(id: 1).first
  3. irb> user.password = 'xxx'
  4. irb> user.password_confirmation = 'xxx'
  5. irb> user.save!

4. 配置实践

4.1 人员与项目

进入管理后台,建立两个开发组,3名用户成员 (Regular Member权限,配置ssh公钥),两个团队项目, 每个项目分别建    dev / staging / live 分支,检查 pull & push是否正常

GroupMemberProjectBranch
Dev1ben, developer1Team1 Prj1dev / staging / live
Dev2ben, developer2Team2 Prj1dev / staging / live

添加系统用户,用于镜像推送等内部操作 

如图:

4.2 部署准备
4.2.1 访问变量及用户账号设置

- 在gitlab服务器,因为docker化安装的,需映射ssh访问端口 22 => 2222

- 用工具生成deployer密钥,然后用管理员账号登录gitlab后台: 

-- 配置deployer私钥变量

    Admin Area => Settings => CI/CD => Variables, 定义 SSH_PRIVATE_KEY,用deployer的私钥填充,将在.gitlab-ci.ym里使用。(注:去掉默认的Protect variable勾选,不然部署时会出现“Error loading key "(stdin)": error in libcrypto”问题)

-- 配置仓库访问公钥, 可选择添加:公共的部署公钥或项目部署公钥(2选1)

A 公共公钥:Admin Area => Deploy Keys,然后在项目Deploy keys中enable之

B 项目公钥:切换到项目 Settings => Repository => Deploy keys,添加deployer的Privately keys并且enable,使得deployer用户可访问代码仓库

- 在部署服务器建deployer账号,分配密钥,目录访问权限,脚本:

  1. adduser deployer
  2. setfacl -R -m u:deployer:rwx /www/wwwroot
  3. # 为解决安全及读写权限问题,把deployer设置为主组www,加入到docker组,www用户则加到deployer组
  4. usermod -g www deployer
  5. usermod -aG docker deployer
  6. usermod -aG deployer www
  7. # 建立密钥文件, 通过vi把该用户的密钥加上
  8. mkdir -p /home/deployer/.ssh && touch /home/deployer/.ssh/authorized_keys && touch /home/deployer/.ssh/id_rsa && touch /home/deployer/.ssh/config
  9. chmod 700 /home/deployer/.ssh && chmod 600 /home/deployer/.ssh/id_rsa && chown deployer:deployer -Rf /home/deployer/.ssh

- 为了ssh能正确访问git仓库(端口映射),需编辑 /home/deployer/.ssh/config

  1. Host host001.dev.ia
  2. User git
  3. Hostname host001.dev.ia
  4. Port 2222
  5. Preferredauthentications publickey
  6. IdentityFile ~/.ssh/id_rsa
  7. TCPKeepAlive yes
  8. AddKeysToAgent yes

 完成后用deployer登录目标机器,测试是否能连接gitlab, 克隆仓库

  1. ssh -T git@host001.dev.ia
  2. git clone git@host001.dev.ia:dev1/team1-prj2.git
4.2.2 Runner设置

Runner 所处位置图: 通过Runner工作组,根据脚本进行构建与分发

用root账号登陆,在管理面板(Admin Area)=> CI/CD => Runners页上建Runner,它实际上是个运行代理器,让工作机的关联进来,通过定义tag来调配对应的运行器完成任务,这里我定义了一个php的runner

gitlab在项目管理中提供了Pipeline editor工具,可以在不同分支定义一个.gitlab-ci.yml文件,记叙CI/CD步骤与详细内容,当用户提交并推送代码时触发过程

工作机安装gitlab-runner客户端, 脚本 gitlab-runner-install.sh

  1. #!/bin/bash
  2. # Download the binary for your system
  3. sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
  4. # Give it permission to execute
  5. sudo chmod +x /usr/local/bin/gitlab-runner
  6. # Create a GitLab Runner user
  7. sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
  8. # Install and run as a service
  9. sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
  10. sudo gitlab-runner start

注册runner

  1. gitlab-runner register --url http://host001.dev.ia:18181 --token glrt-HfgiG84kn28NvU69stkh
  2. - 选择shell类型
  3. gitlab-runner run
  4. # 其他相关命令
  5. gitlab-runner list
  6. gitlab-runner unregister --all-runners
  7. gitlab-runner unregister --url http://host001.dev.ia:18181 --token glrt-ABh3NZLwxomjSk6szHbz
4.2.3 要点

- 在gitlab文档中,是没有提及给gitlab-runner账号配deployer私钥的,当用giltlab-runner账号在终端进行手动测试时,需把deployer的id_rsa拷贝过去 gitlab-runner/.ssh目录下。

- 当docker login出现"503 Service Unavailable"情况时,先查下当前的docker有没用代理。

5. 容器镜像(Container Registry)

Gitlab还提供了一项容器镜像管理的功能,允许用户把项目构建成的镜像文件push到它的数据库中,统一管理,摸索良久分享之:

5.1 准备

- 因为本地部署测试,并不需要证书等烦人的东西,所以需把registry域名登记到/etc/docker/daemon.json非安全条项,不然docker login会出现不能登录的问题

  1. # cat /etc/docker/daemon.json
  2. {"insecure-registries":["http://host001.dev.ia:18181","http://host001.dev.ia:5050"]}
  3. # 添加docker启动项
  4. # vi /etc/default/docker
  5. DOCKER_OPTS="--config-file=/etc/docker/daemon.json"
  6. # systemctl restart docker
5.2 配置 

- 编辑 /data0/Server/Settings/gitlab/gitlab.rb,配置如下:

  1. registry_external_url 'http://host001.dev.ia:5050'
  2. ### Settings used by GitLab application
  3. gitlab_rails['registry_enabled'] = true
  4. gitlab_rails['registry_host'] = "host001.dev.ia"
  5. gitlab_rails['registry_port'] = "5050"
  6. gitlab_rails['registry_path'] = "/var/opt/gitlab/gitlab-rails/shared/registry"
  7. registry_nginx['listen_https'] = false

同时修改compose.yml, 开放5050为registry的访问端口,然后重新建立容器,项目的Deploy-Container Registry面板如图:

5.3 测试
  1. # 测试连接
  2. nc -zv host001.dev.ia 5050
  3. curl -v http://host001.dev.ia:5050/v2/_catalog
  4. # 测试登录
  5. docker login http://host001.dev.ia:5050 -u ben -p wawawa
  6. WARNING! Using --password via the CLI is insecure. Use --password-stdin.
  7. Login Succeeded
  8. # 构建镜像
  9. docker build -t host001.dev.ia:5050/dev1/team1-prj1 .
  10. ...
  11. # push上去
  12. docker push host001.dev.ia:5050/dev1/team1-prj1
  13. ...

 然后再访问 Container Registry, 如图:

至此基本可用了。 

6. 应用项目 CI/CD

请关注后续序列文章

7. 参考

Use SSH keys to communicate with GitLab | GitLab

.gitlab-ci.yml 配置 · PHP/Python/前端/Linux 等等 学习笔记 · 看云

gitlab runner tag - 简书

https://dev.to/techworld_with_nana/gitlab-cicd-for-beginners-free-course-2mee

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/192967
推荐阅读
相关标签
  

闽ICP备14008679号