gitlab部署_deleted

git服务器部署

Linus开发的git是分布式的代码版本同步工具。 这里的分布式,是指,我们每个客户端,都维护项目的代码仓库。只是一般会把其中一个客户端当作服务器。其他客户端都将自己的版本和这台机子同步。

实际上,只要在Linux机器上,安装git客户端,并可以通过ssh登录到这台机子,那么这台机子完全可以当作git服务器来用的。

这个同步本着开源精神,没有考虑太多的权限问题。

原生git方式部署

参考:搭建Git服务器及本机克隆提交 – 隐语者 – 博客园 (cnblogs.com) 参考:Git详解之四 服务器上的Git – Git中文网-GitLab中文网 (git-scm.com.cn)

比如有一台Centos机器,它。

Centos上:安装ssh服务,允许远程登录

#安装ssh服务
yum install sshd
yum install openssh-server
#启动ssh服务
systemctl start sshd.server
#开机启动
systemctl enable sshd.server
#vim /etc/ssh/sshd_config
#允许root远程登录
#PermitRootLogin yes

Centos上:创建一个git用户,设置密码

useradd git
passwd git

在自己的电脑上:测试是否可以使用密码ssh登录到这台Centos

ssh git@121.5.151.xx
#按提示输入密码,登录成功

还可以使用非对称密钥代替密码,ssh登录到这台Centos。(注意区分密码和密钥!!!!)

在自己的电脑上:创建ssh非对称密钥(打开命令行,windows是powershell)

ssh-keygen
#按默认配置一路向下即可
#会在C:/users/用户名/.ssh/下生成id_rsa和id_rsa.pub,分别是私钥和公钥。

将公钥文件使用ftp/sftp工具复制到Centos上的/home/git/.ssh/下,没有.ssh目录的话需要自己创建。

#在Centos上
cd /home/git/.ssh/
#这个文件用来存放授权登录git用户的公钥信息,每个公钥一行。(由sshd的配置文件/etc/ssh/sshd_config指定)
touch authorized_keys
#将刚刚上传的公钥追加到authorized_keys末尾
/cat id_rsa.pub >> authorized_keys

在自己的电脑上:测试是否可以使用密钥ssh登录到这台Centos

ssh git@121.5.151.xx
#这次登录已经不需要输入密码了,自动登录成功。

使用git用户登录Centos,创建一个git项目

cd /home/git/
mkdir repository/
cd repository/tokendemo.git
#创建一个裸仓库,即没有工作空间,只有版本记录的仓库(相当于只有项目/.git/下的内容)
git init --bare tokendemo.git
cd tokendemo.git
pwd
#/home/git/repository/tokendemo.git

在本地的机子上测试是否可以push 项目Centos这个仓库中

我是直接在idea中push的,如果命令行的话,要么先pull一次,要么push -u

测试通过。

这也说明,如果是局域网,或者有公网ip,你可以明确对方的主机地址,只要对方电脑上有装git,完全可以直接和对方同步项目。

gitlab部署

vps服务器购买

阿里云和腾讯云等都提供学生机,10元/月的样子,配置大概1Core2GMemory的样子,用来日常做测试还是比较方便的。

我购买的时候没有要求证明学生身份。

后面发现学生机的配置撑不住,会卡死。

改用阿里云按量付费云服务器。(我也就试着部署一下,并不会长久使用)

选择镜像。

我使用的是centos7.根据个人喜好及熟悉程度选择。

gitlab部署

gitlab官网https://about.gitlab.com/ gitlab在github上托管位置https://github.com/gitlabhq/gitlabhq Gitlab基础知识介绍 – 三度 – 博客园 (cnblogs.com)

官方建议最好2Core4GMemory,穷且将就吧

社区版下载目录https://packages.gitlab.com/gitlab/gitlab-ce。这里选了centos7对应的是el7,点进详情,有安装步骤的指导。

依赖

/bin/sh
/bin/sh
openssh-server
policycoreutils-python

安装依赖(openssh-server默认已经安装)和gitlab

#wget获取安装包
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm/download.rpm
#具体版本号需要tab键补齐
yum install policycoreutils-python
#安装
rpm -ivh ./gitlab-ce-13.10.2-ce.0.el7.x86_64.rpm

安装好后,会有提示,进入/etc/gitlab/gitlab.rb修改external_url

vim /etc/gitlab/gitlab.rb

#修改为自己的域名或ip:port
#external_url 'http://121.5.151.29:8888'
external_url 'http://120.55.88.138/'

应用配置,启动gitlab:

gitlab-ctl reconfigure
gitlab-ctl restart

这个时候已经可以从公网访问到自己的gitlab私人服务器了。

从浏览器输入http://120.55.88.138/首次进入gitlab的web页面会要求设置root管理员的密码。

试着添加用户。发现新用户无法收到注册确认邮件。有这么几个原因: gitlab默认使用服务器上自带的mail服务。25端口是默认邮件端口,而阿里云vps和QQ服务器默认都关闭了这个端口。现在普遍都在用ssl加密的邮件服务了,使用465端口。 gitlab可以配置使用smtp服务来发送邮件。

gitlab官网文档:SMTP settings | GitLab

我这里连接163邮箱使用smtp方式发送邮件。163邮箱开启smtp这里不多作介绍,下面主要说明一下gitlab中smtp代发邮件的配置。

还是进入gitlab的主配置文件vim /etc/gitlab/gitlab.rb

#修改对应的配置项(163个人邮箱的配置)
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "1830684xxxx@163.com"
gitlab_rails['smtp_password'] = "PNNWTHYPOQRNxxxx"
gitlab_rails['smtp_domain'] = "smtp.163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_tls'] = true

gitlab_rails['gitlab_email_from'] = '1830684xxxx@163.com'
gitlab_rails['gitlab_email_display_name'] = 'Gitlab Admin'
gitlab_rails['gitlab_email_reply_to'] = '1830684xxxx@163.com'

#如果是163企业邮箱,smtp服务器地址会有一点不同,可参考:
#gitlab官网:https://docs.gitlab.com/omnibus/settings/smtp.html
#或者网上别人的配置:https://blog.csdn.net/zhanfeng00/article/details/91363781
#其他邮件服务器的配置类似,网上搜一下即可

应用配置,启动gitlab:

gitlab-ctl reconfigure
gitlab-ctl restart

按照官网的说明,可以先在命令行测试一下smtp是否配置成功。

#命令行输入
gitlab-rails console

#在gitlab-rails命令行环境下,继续输入测试
Notify.test_email('destination_email@address.com', 'Message Subject', 'Message Body').deliver_now

如果没有报错提醒,那就没问题了。

浏览器访问http://120.55.88.138/,管理员登录,这个时候重新添加用户,已经可以收到用户确认的短信了。

退出管理员,使用这个用户登录,添加ssh公钥,使用git 测试,已经可以pull/push了。

至此gitlab私服部署已经成功了。

如果有其他需求,比如,更改使用的端口什么的,并没有去实现,有需求可以参考官网和网上搜索。

docker部署gitlab

安装docker

参考官网文档安装docker。各平台会有所不同。

拉取并运行gitlab镜像

因为我是在windows下安装的docker,powershell中多行命令的换行符是反引号,而linux下应该改为反斜杠。\(env:GITLAB\_HOME也是powershell下使用自己定义的环境变量的语法,linux下直接使用\)GITLAB_HOME.

 docker run `
 --detach `
 --hostname 121.5.151.29:11080 `
 --publish 11443:443  --publish 11080:11080 --publish 11022:22 `
 --name gitlab `
 --restart always `
 --volume $env:GITLAB_HOME/config:/etc/gitlab `
 --volume $env:GITLAB_HOME/logs:/var/log/gitlab `
 --volume $env:GITLAB_HOME/data:/var/opt/gitlab `
 gitlab/gitlab-ce:13.10.2-ce.0

这里detach指示docker中运行的应用退到后台执行,hostname非必填,publish指定docker中的应用暴露出的端口并与宿主机端口绑定,volume指定docker中的文件夹与宿主机的文件夹进行绑定。

后面选定拉取并运行gitlab社区版镜像,并指定固定版本13.10.2-ce.0。使用固定版本的好处是防止版本升级带来的兼容性问题。

gitlab默认的web端口是80端口,需要首次启动后,进入本机与gitlab的映射文件夹$env:GITLAB_HOME/config修改gitlab.rb配置文件。

# 设置外部url,在clone项目或者CI时与Runners交互时会用到。
# 如果使用默认的80端口,可以不加端口部分
# external_url 'GENERATED_EXTERNAL_URL'
external_url 'http://121.5.151.29:11080'

#配置smtp发邮件(默认的邮件服务,默认的25端口邮件服务,许多邮件服务器都已经拒绝接受这个端口的邮件了)
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "18306849443@163.com"
gitlab_rails['smtp_password'] = "PNNWTHYPOQRNRHGQ"
gitlab_rails['smtp_domain'] = "smtp.163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '18306849443@163.com'
gitlab_rails['gitlab_email_display_name'] = 'Gitlab Admin'
gitlab_rails['gitlab_email_reply_to'] = '18306849443@163.com'

#配置web界面clone按钮下显示的ssh端口(注意sshd中的配置文件中仍是22端口,docker端口映射中也仍是用内部22端口)
# gitlab_rails['gitlab_shell_ssh_port'] = 22
gitlab_rails['gitlab_shell_ssh_port'] = 11022

gitlab的CI与CD

gitlab会自动识别项目根目录下的.gitlab-ci.yml文件,根据这个文件的配置,在gitlab的runner中执行配置文件中指定的shell脚本、docker镜像等。

gitlab的runner

参考官方文档:启动与使用runner:https://docs.gitlab.com/ee/ci/runners/README.html

gitlab会检测项目根目录下的配置文件,根据配置,将项目丢到runner中执行一些动作(比如可以编译、运行、测试等等)。

这里就以一个所有项目都可用的share runner为例,在自己的pc上安装一个runner,并绑定到自己的gitlab私服中。

注册runner

先下载对应平台的runner,我是windows:https://docs.gitlab.com/runner/install/windows.html

参考官方文档,注册runner到自己的私服: https://docs.gitlab.com/runner/register/index.html

将下载好的runner,放到比如说D:/gitlab-runner/下,

我是在windows PC上的powershell命令行执行下面命令,runner就注册到gitlab管理平台了。

gitlab-runner register `
  --non-interactive `
  --url "http://121.5.151.29:11080/" `
  --registration-token "yhxE17__rHGA73iwjUzq" `
  --executor "shell" `
  --docker-image alpine:latest `
  --description "win-powershell-runner" `
  --tag-list "shell,pc,win" `
  --run-untagged="true" `
  --locked="false" `
  --access-level="not_protected"

其中url和registration-token需要自己的情况赋值。在gitlab的web页面,root账户登录-》点击扳手图标(管理)-》Overview-》Runners-》根据提示复制右侧的url和token。

还不怎么会用docker,这里excutor选择了shell,其他类型的excutor参见官方文档

执行完上面的命令,会发现当前目录中多了个toml配置文件

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "win-powershell-runner"
  url = "http://121.5.151.29:11080/"
  token = "LUJtyfBnBHjZX12pBMHC"
  executor = "shell"
  shell = "powershell"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

我在上面的配置文件中加了shell = "powershell"一行。

runner安装为服务

参考官方文档:安装runner: https://docs.gitlab.com/runner/install/index.html https://docs.gitlab.com/runner/install/windows.html

./gitlab-runner install
./gitlab-runner start

测试CI

向项目根目录添加.gitlab-ci.yml文件,测试

build-job:
  stage: build
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"

test-job1:
  stage: test
  script:
    - echo "This job tests something"

test-job2:
  stage: test
  script:
    - echo "This job tests something, but takes more time than test-job1."
    - echo "After the echo commands complete, it runs the sleep command for 20 seconds"
    - echo "which simulates a test that runs 20 seconds longer than test-job1"
    - sleep 5

deploy-prod:
  stage: deploy
  script:
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."

默认情况下,项目push会触发向上的各个job的执行。由于刚刚配置了一个shell类型的share-runner,默认就会在pc上的shell环境中执行。

在web管理页面的CI/CD-》Pipelines下可以看到运行的具体情况。


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注