Gitlab 的安装与配置

Gitlab 与 Jenkins

大型项目开发可以使用 Gitlab + Jenkins 的方式,前者作为代码仓负责代码的管理,后者是一个自动化的持续集成环境,可以完成各种自动化构建、测试、部署的任务。两者结合起来就能实现开发者提交代码到 Gitlab, Jenkins以一定频率自动运行测试的工作,提升团队效率。

  • Gitlab 是基于 Ruby On Ralis 的一个开源版本管理系统,实现一个自托管的 Git 项目仓库。
  • Jenkins 是一个开源的持续集成系统,方便开发者利用图形化界面进行项目部署发布等固定操作,通常也会和 Gitlab 配合起来,在 git push 完成后触发设定好的操作,例如将代码部署到某个开发环境中。Jenkins 本身是用 Java 开发的,需要 jdk 的环境。

通过 GitlabJenkins 这两个常用的开源项目,便可搭建自己的代码管理工具和自动化部署平台。

值得注意的是,当前较新版本的 gitlab 自身已经完全能够胜任 CI/CD 功能。
gitlab/ci 集成在 gitlab 里,配合上 gitlab-runner 就可以跑CI了。
有兴趣的可以尝试下由 gitlab 完成整个代码的开发,测试,部署,发布的流程。

Gitlab

gitlab安装 可以参考这篇,版本不是那么新,有些许差异。

# 可以找到最新的版本
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu/pool/xenial/main/g/gitlab-ce/gitlab-ce_11.10.0-ce.0_amd64.deb
# 安装
dpkg -i gitlab-ce_11.10.0-ce.0_amd64.deb

打开 /etc/gitlab/gitlab.rb 文件进行基础设置,所有的核心设置均在这个文件中。
打开浏览器输入服务的IP地址即可访问,注意如果服务器上之前有 web 服务器在运行的话要关闭,比如 Apache

$ sudo /etc/init.d/apache2 start
$ sudo /etc/init.d/apache2 restart
$ sudo /etc/init.d/apache2 stop

采用简易的方法进行域名解析,最好用DNS服务器。

  • 打开 c:\Windows\System32\drivers\etc\hosts,增加新的一条记录。内容是 gitlab服务器的 IP 地址以及域名。
  • 在Internet属性配置面板里选择局域网设置->代理服务器->高级->对 gitlab 服务器的域名添加一条例外,即对该域名不使用 proxy 代理服务器进行处理。刷新windows的DNS解析,ipconfig /flushdns
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
...
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

# 增加一条记录指明 gitlab 服务器 IP 地址与域名的对应关系,一个IP可以对应多个域名
gitlab 服务管理命令
# 启动所有 gitlab 组件:
gitlab-ctl start
# 停止所有 gitlab 组件:
gitlab-ctl stop
# 停止所有 gitlab postgresql 组件:
gitlab-ctl stop postgresql
# 停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
# 重启所有 gitlab 组件:
gitlab-ctl restart
# 重启所有 gitlab gitlab-workhorse 组件:
gitlab-ctl restart  gitlab-workhorse
# 查看服务状态
gitlab-ctl status
# 生成配置并启动服务
gitlab-ctl reconfigure
gitlab 安装细节
主配置文件: /etc/gitlab/gitlab.rb
GitLab 文档根目录: /opt/gitlab
默认存储库位置: /var/opt/gitlab/git-data/repositories
GitLab Nginx 配置文件路径:  /var/opt/gitlab/nginx/conf/gitlab-http.conf
Postgresql 数据目录: /var/opt/gitlab/postgresql/data

gitlab 存储位置 帮助链接。
默认存放在:/var/opt/gitlab/git-data/repositories
一般我们会更改到另外独立的目录进行存储,例如 /data/git-data。

mkdir -pv /data/git-data 
chown -R git:git /data/git-data #修改创建目录的属主和属组为git用户 
sudo vim /etc/gitlab/gitlab.rb
# 启用git_data_dirs参数,并修改path到需求的目录。
git_data_dirs({
   "default" => {
     "path" => "/var/opt/gitlab/git-data" #"/mnt/nfs-01/git-data"
    },
})
Once you set the multiple storage paths,
you can choose where new projects will be stored via the Application Settings in the Admin area.

Note that Omnibus stores the repositories in a repositories subdirectory of the git-data directory.
gitlab邮箱配置

这里没有使用 postfix,采用 SMTP 的方式配置邮件服务器来发送。如果邮件服务器不支持SSL/TLS加密的话采用下面这种关掉相应的TLS选项的方式进行配置,更多请参考 gitlab邮件配置

### Email Settings
 gitlab_rails['gitlab_email_enabled'] = true
 gitlab_rails['gitlab_email_from'] = 'system.notice@qq.com'
 gitlab_rails['gitlab_email_display_name'] = 'gitlab.notice'
 gitlab_rails['gitlab_email_reply_to'] = 'system.notice@qq.com'
 gitlab_rails['gitlab_email_subject_suffix'] = 'gitlab'

### GitLab email server settings
###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
###! **Use smtp instead of sendmail/postfix.**

 gitlab_rails['smtp_enable'] = true
 gitlab_rails['smtp_address'] = "smtp.qq.com"
 gitlab_rails['smtp_port'] = 25
 gitlab_rails['smtp_user_name'] = "system.notice@qq.com"
 gitlab_rails['smtp_password'] = "xxxxx"
 gitlab_rails['smtp_domain'] = "qq.com"
 gitlab_rails['smtp_authentication'] = "login"
 gitlab_rails['smtp_enable_starttls_auto'] = false
 gitlab_rails['smtp_tls'] = false
 gitlab_rails['smtp_openssl_verify_mode'] = 'none'
邮件测试
gitlab-ctl reconfigure

gitlab-rails console
irb(main):002:0>Notify.test_email('destination_email@address.com', 'Message Subject', 'Message Body').deliver_now

注意点:

  • 配置 gitlab_rails['smtp_openssl_verify_mode'] = 'none' 可以解决ssl certificate 验证不通过问题。
  • gitlab_email_from 以及 smtp_address 两栏根据服务器的支持情况,可以选择配置成不一样的,如果出现550 5.7.1 Client does not have permissions to send as this sender 的错误的话就配成一样就可以了。
配置 HTTPS 访问

生成自签名的 .key .crt,生成方法请参考

把上述.key以及.crt放置到 /etc/gitlab/ssl目录下。
修改gitlab.rbexternal_urlhttps,修改。之后重启 gitlab 即可。

nginx['enable'] = true
nginx['redirect_http_to_https'] = true
nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.verify.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.verify.com.key"

在比较新的Chrome浏览器上,有如下的注意点,生成的证书要带SAN。

错误:“主题备用名称缺失”或 NET::ERR_CERT_COMMON_NAME_INVALID 或“您的连接不是私密连接”
在传输层安全性 (TLS) 连接期间,Chrome 浏览器会进行检查以确保网站连接使用的是有效、受信任的服务器证书。

Chrome 58 及以上版本只会使用 subjectAlternativeName 扩展程序(而不是 commonName)来匹配域名和网站证书。
主题备用名称可以是域名,也可以是 IP 地址。如果证书没有正确的 subjectAlternativeName 扩展程序,
系统就会向用户发送 NET::ERR_CERT_COMMON_NAME_INVALID 错误消息,告知他们连接并非处于私密状态。
如果证书缺少 subjectAlternativeName 扩展程序,系统就会在 Chrome DevTools 的“安全”面板中显示警告,
告知用户主题备用名称缺失。

如有必要,您可以针对 Chrome 65 以下版本设置 EnableCommonNameFallbackForLocalAnchors 政策。
这样一来,Chrome 就会在缺少 subjectAlternativeName 扩展程序的情况下使用证书的 commonName 来匹配主机名。

Chrome 里点击 Settings->Advanced->Privacy and security->Manage certificates。把证书导入到受信任的根证书颁发机构。也可以打开运行,运行命令certmgr.msc,展开树以转到 受信任的根证书颁发机构 | 证书。右键“所有任务”,导入证书。

创建一个project的后续操作

要获得访问gitlab的权限,需要在gitlab的账户里添加SSH key。
key的生成方法见下。如果不是用IP地址直接访问的,注意添加 hosts 条目进行域名解析。

ssh-keygen -t rsa -b 4096 -C your_email
cat ./ssh/id_rsa.pub
Command line instructions
You can also upload existing files from your computer using the instructions below.

Git global setup
git config --global user.name "xxx"
git config --global user.email "xxx"
Create a new repository
git clone git@xxx.git
cd xxx
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
Push an existing folder
cd existing_folder
git init
git remote add origin git@gitlab.verify.com:hongmengOS/hm-verify-kernel.git
git add .
git commit -m "Initial commit"
git push -u origin master
Push an existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin git@gitlab.verify.com:hongmengOS/hm-verify-kernel.git
git push -u origin --all
git push -u origin --tags

gitlab 配置

为了和 Jenkins 能够实现互联,需要对 gitlab 进行一定的配置。

上传公钥, 个人以及Jenkins 拉取代码使用

下载上传代码如果使用 SSH 协议的话需要上传用户的公钥。本质是使用 SSH 登录到 gitlab。
点击用户头像,settings里点击 SSH Keys,上传访问的公钥。
通常开发服务器以及CI服务器是分开的,所以需要两个密钥对,个人开发服务器以及 Jenkins 所在服务器的密钥对生成这里就不介绍了。
在这里插入图片描述

创建 webhook 来触发 Jenkins

在 project 页面点击 Settings-> Integrations

URL 填写规则是 http://USERID:APITOKEN@JENKINS_URL/project/YOUR_JOB

可参考 https://github.com/jenkinsci/gitlab-plugin 进行 gitlab 端的配置。
这部分相当于上面链接里介绍的 GitLab-to-Jenkins authentication。因为是 gitlab 来触发 jenkins 完成构建。为了防止恶意用户触发构建,需要对 gitlab 进行凭据管理。方法是由 jenkins 提供一个 Secret Token

注意,URL使用 ip:port 的方式比较好,不要使用域名,不然可能会报错 XXX hostname XXX
注意,使用 Token 以后,原来那个用户就没办法使用用户名密码的方式登录到 Jenkins了

Configuring global authentication
  1. Create a user in Jenkins which has, at a minimum, Job/Build permissions
  2. Log in as that user (this is required even if you are a Jenkins admin user), then click on the user’s name in the top right corner of the page
  3. Click ‘Configure,’ then ‘Show API Token…’, and note/copy the User ID and API Token
  4. In GitLab, when you create webhooks to trigger Jenkins jobs, use this format for the URL and do not enter anything for ‘Secret Token’: http://USERID:APITOKEN@JENKINS_URL/project/YOUR_JOB
  5. After you add the webhook, click the ‘Test’ button, and it should succeed
Configuring per-project authentication

If you want to create separate authentication credentials for each Jenkins job:

  1. In the configuration of your Jenkins job, in the GitLab configuration section, click ‘Advanced’
  2. Click the ‘Generate’ button under the ‘Secret Token’ field
  3. Copy the resulting token, and save the job configuration
  4. In GitLab, create a webhook for your project, enter the trigger URL (e.g. http://JENKINS_URL/project/YOUR_JOB) and paste the token in the Secret Token field
  5. After you add the webhook, click the ‘Test’ button, and it should succeed
Disabling authentication

If you want to disable this authentication (not recommended):

  1. In Jenkins, go to Manage Jenkins -> Configure System
  2. Scroll down to the section labeled ‘GitLab’
  3. Uncheck “Enable authentication for ‘/project’ end-point” - you will now be able to trigger Jenkins jobs from GitLab without needing authentication

URL的格式上面已经介绍了,根据需要是否填写每个JOB的 Secret Token。Triggers选择触发 webhook 的事件,Jenkins 那边也可以配置成响应某些事件。

在这里插入图片描述

获取 gitlab API token 用于 Jenkins 返回状态给 gitlab

Gitlab API token 在 gitlab 里用户头像,注意这个用户至少应该是项目的 'Developer’以上权限的拥有者。
点击 setting,在这里创建一个 access token,然后给 Jenkins 使用。注意这里的 token 关闭或者刷新这个页面就没了,所以抓紧拷贝。这里相当于gitlab-plugin介绍 里的 Jenkins-to-GitLab authentication 一节。

最好是创建一个 gitlab 公共账号,这样 Jenkins 返回状态显示的就是这个公共账号了。
不然就会像下图一样使用了某个不太合适的用户回复 Jenkins 信息。
在这里插入图片描述
具体的操作页面如下
在这里插入图片描述
生成得到的 Personal Access Tokens
在这里插入图片描述

Maven安装包地址

sudo ln -s /opt/apache-maven-3.3.9/ /opt/maven

export M2_HOME=/opt/maven
export M2=$M2_HOME/bin
export PATH=$M2:$PATH

mvn -version
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值