Contents
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下可以看到运行的具体情况。
发表回复