Anolis OS 8.8服务器采用docker容器方式搭建gerrit3.8.1服务

采用docker容器方式搭建gerrit3.8.1服务

  • 一、选择管理帐户密码的方式
  • 二、部署gerrit服务
    • 1. 采用docker compose部署单服务的方式部分gerrit
      • (1) docker-compose.yaml文件内容
      • (2) 在docker-compose.yaml文件所在目录调用下面命令先进行初始化操作
    • 2. 在宿主机上部署httpd服务用于管理密码
      • (1) 安装运行httpd服务
      • (2) 配置gerrit相关配置文件
    • 3. 启动gerrit服务
    • 4. 配置和gitlab交互的密钥
    • 5. 配置docker容器dns解析
  • 三、使用gerrit服务
    • 1. 在Gerrit创建一个空项目并同步GitLab数据
    • 2. 配置Grerrit与gitlab的同步
    • 3. 配置gerrit用户权限及拉取代码等相关操作

   当前使用的gerrit服务还是2020年9月份搭建的,借着使用的gitlab升级的东风,顺便把gerrit也做一下升级,本以为过程会比较顺利,实际却是一波三折,下面记录一下相关过程,便于后续参考。

一、选择管理帐户密码的方式

   在Docker Hub中gerrit的官方地址查看了相关说明文档,其推荐使用docker compose的方式运行服务,对应的docker-compose.yml文件样例如下:

version: '3'services:gerrit:image: gerritcodereview/gerritports:- "29418:29418"- "80:8080"depends_on:- ldapvolumes:- /external/gerrit/etc:/var/gerrit/etc- /external/gerrit/git:/var/gerrit/git- /external/gerrit/db:/var/gerrit/db- /external/gerrit/index:/var/gerrit/index- /external/gerrit/cache:/var/gerrit/cacheenvironment:- CANONICAL_WEB_URL=http://localhost# command: initldap:image: osixia/openldapports:- "389:389"- "636:636"environment:- LDAP_ADMIN_PASSWORD=secretvolumes:- /external/gerrit/ldap/var:/var/lib/ldap- /external/gerrit/ldap/etc:/etc/ldap/slapd.dldap-admin:image: osixia/phpldapadminports:- "6443:443"environment:- PHPLDAPADMIN_LDAP_HOSTS=ldap

推荐采用OpenLDAP来管理用户的帐户密码,尝试着按照推荐的方式搭建了服务,在第一步“配置Gerrit的管理员账号”访问形如“https:xxx.xxx.xxx.xxx:6443”地址时页面一直报“重定向次数过多”的错误,定位尝试许久,未能解决问题。于是尝试直接使用官方展示的单gerrit服务容器方案,对应的docker-compose.yml文件样例如下:

version: '1'services:gerrit:image: gerritcodereview/gerrit:3.8.1ports:- "29418:29418"- "80:8080"volumes:- /data/gerrit/etc:/var/gerrit/etc- /data/gerrit/git:/var/gerrit/git- /data/gerrit/db:/var/gerrit/db- /data/gerrit/index:/var/gerrit/index- /data/gerrit/cache:/var/gerrit/cacheenvironment:- CANONICAL_WEB_URL=http://gerrit.example.comcommand: init

通过配置的域名可以访问“http://gerrit.example.com”,出现了登录页面,要求使用OpenID登录或者使用OpenLDAP生成的帐户密码访问,尝试了相应方式,未能成功,考虑到前面搭建的gerrit服务采用的就是在http请求那里进行登录验证的方式,也就不折腾了,直接走已经验证过的路,分别参考了代码审查服务gerrit搭建+httpd反向代理、前面自己写的“CentOS 7 搭建gerrit服务总结”以及看起来像是官方的说明文档,确定了整体思路,接下来就是具体实施了。
   看起来像是官方说明的链接地址访问需要翻墙,这里直接将相关信息罗列如下,有需要可参考:

HTTP Basic Authentication
When using HTTP authentication, Gerrit assumes that the servlet container or the frontend web server has performed all user authentication prior to handing the request off to Gerrit.As a result of this assumption, Gerrit can assume that any and all requests have already been authenticated. The "Sign In" and "Sign Out" links are therefore not displayed in the web UI.To enable this form of authentication:git config --file $site_path/etc/gerrit.config auth.type HTTPgit config --file $site_path/etc/gerrit.config --unset auth.httpHeadergit config --file $site_path/etc/gerrit.config auth.emailFormat '{0}@example.com'
The auth.type must always be HTTP, indicating the user identity will be obtained from the HTTP authorization data.The auth.httpHeader must always be unset. If set to any value (including Authorization) then Gerrit won’t correctly honor the standard Authorization HTTP header.The auth.emailFormat field ('optional') sets the preferred email address during first login. Gerrit will replace {0} with the username, as obtained from the Authorization header. A format such as shown in the example would be typical, to add the domain name of the organization.If Apache HTTPd is being used as the primary web server and the Apache server will be handling user authentication, a configuration such as the following is recommended to ensure Apache performs the authentication at the proper time:<Location "/login/">AuthType BasicAuthName "Gerrit Code Review"Require valid-user...</Location>

二、部署gerrit服务

1. 采用docker compose部署单服务的方式部分gerrit

(1) docker-compose.yaml文件内容

实际采用的docker-compose.yaml文件样例如下:

version: '1'services:gerrit:image: gerritcodereview/gerrit:3.8.1restart: alwaysports:- "29418:29418"- "8080:8080"volumes:- /data/gerrit/etc:/var/gerrit/etc- /data/gerrit/git:/var/gerrit/git- /data/gerrit/db:/var/gerrit/db- /data/gerrit/index:/var/gerrit/index- /data/gerrit/cache:/var/gerrit/cacheenvironment:- CANONICAL_WEB_URL=http://gerrit.example.comcommand: init

新建文件内容可采用下面命令的形式简化操作:

cat > /root/docker/gerrit/docker-compose.yml << EOF
version: '1'services:gerrit:image: gerritcodereview/gerrit:3.8.1restart: always...省略了文件内容,实际使用时按真实的来...command: init
EOF

(2) 在docker-compose.yaml文件所在目录调用下面命令先进行初始化操作

docker compose up gerrit

2. 在宿主机上部署httpd服务用于管理密码

(1) 安装运行httpd服务

考虑到运行的gerrit服务容器中内部没有httpd服务,因此在宿主机上安装httpd服务并启动,同时也设置为自启动,在root帐户下需要执行的相关命令如下:

yum -y install httpd
systemctl start httpd
systemctl enable httpd

(2) 配置gerrit相关配置文件

创建存放帐户密码的空文件:

touch /etc/httpd/conf.d/passwd

生成用于gerrit跳转的httpd配置文件

cat > /etc/httpd/conf.d/gerrit.conf << EOF
<VirtualHost gerrit.example.com:80>ServerName gerrit.example.comProxyRequests OffProxyVia OffProxyPreserveHost OnAllowEncodedSlashes On<Proxy *>Order deny,allowAllow from all</Proxy><Location /login/>AuthType BasicAuthName "Gerrit Code Review"Require valid-userAuthBasicProvider fileAuthUserFile /etc/httpd/conf.d/passwd</Location>ProxyPass / http://127.0.0.1:8080/ 
</VirtualHost>
EOF

增加用户(使用"-c"参数会创建文件,只是新增用户不需要该操作):

htpasswd -cb /etc/httpd/passwd admin 123456
htpasswd -b /etc/httpd/conf.d/passwd admin YourPassword
htpasswd -b /etc/httpd/conf.d/passwd zhangs YourPassword

更新配置文件gerrit.config(gerrit服务容器中对应地址为“/var/gerrit/etc/gerrit.config”,更新操作可直接在宿主机上相应文件操作即可)
样例如下:

[gerrit]basePath = gitcanonicalWebUrl = http://gerrit.example.comserverId = f08520dc-9ea5-48b2-b49f-66d4fd2aad80
[container]javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance"user = gerritjavaHome = /usr/lib/jvm/java-11-openjdk-11.0.19.0.7-4.el9.alma.x86_64javaOptions = -Djava.security.egd=file:/dev/./urandomjavaOptions = --add-opens java.base/java.net=ALL-UNNAMEDjavaOptions = --add-opens java.base/java.lang.invoke=ALL-UNNAMED
[index]type = lucene
[auth]type = HTTP
[receive]enableSignedPush = true
[sendemail]enable = truesmtpServer = smtp.mxhichina.comsmtpServerPort = 465smtpEncryption = SSLsmtpUser = gerrit@example.comsslVerify = falsefrom = CodeReview<gerrit@example.com>
[sshd]listenAddress = *:29418
[httpd]listenUrl = http://*:8080/
[cache]directory = cache

更新发送邮箱密码
调整容器中文件“/var/gerrit/etc/secure.config”中sendemail部分的smtpPass配置,可修改发送邮箱的密码。样例如下:

[auth]registerEmailPrivateKey = albUUgKWNFRcCMVhsLkVg87lQddBcmcMkm4=
[sendemail]smtpPass = your@passwordhere

配置完毕之后执行下面命令重启httpd服务:

systemctl restart httpd

3. 启动gerrit服务

将docker-compose.yaml文件中的“command: init”注释掉,更新文件中的version值为“2”,文件内容样例如下:

version: '2'services:gerrit:image: gerritcodereview/gerrit:3.8.1restart: alwaysports:- "29418:29418"- "8080:8080"volumes:- /data/gerrit/etc:/var/gerrit/etc- /data/gerrit/git:/var/gerrit/git- /data/gerrit/db:/var/gerrit/db- /data/gerrit/index:/var/gerrit/index- /data/gerrit/cache:/var/gerrit/cacheenvironment:- CANONICAL_WEB_URL=http://gerrit.example.com# command: init

再调用下面命令启动gerrit服务:

docker compose up -d

4. 配置和gitlab交互的密钥

在容器中目录“/var/gerrit/etc/”下已经生成好了密钥对,可选择“ssh_host_ed25519_key.pub”配置到对应的gitlab帐户上,便于后续拉取代码。
使用下面命令进容器:

sudo docker exec -it -u root gerrit-gerrit-1 bash

在容器里面执行下面命令将ssh key放到指定位置:

cp /var/gerrit/etc/ssh_host_ed25519_key /var/gerrit/.ssh/id_ed25519

修改所有者信息:

chown gerrit:gerrit /var/gerrit/.ssh/id_ed25519

5. 配置docker容器dns解析

如果需要用到指定的域名解析,可在宿主机上进行配置,修改daemon.json文件(保持其他内容不变,更新dns信息配置),查看内容命令如下:

cat /etc/docker/daemon.json
{"dns": ["172.18.0.52", "172.18.0.70", "183.XX.XX.XX"]
}

更新完配置后,调用下面命令重启docker:

systemctl daemon-reload
systemctl restart docker

要验证域名解析是否生效,可在容器中执行类似下面的命令验证:

ping gitlab.example.com

三、使用gerrit服务

1. 在Gerrit创建一个空项目并同步GitLab数据

假设在gitlab上有一个项目testrepo,则进到gerrit网页在仓库那里相应创建一个testrepo项目。
使用下面命令进容器:

sudo docker exec -it -u gerrit gerrit-gerrit-1 bash

进入到目录“/var/gerrit/git”下,执行下面命令删除自动创建的目录:

cd /var/gerrit/git
rm -rf testrepo.git/

使用下面命令克隆gitlab代码:
git clone --bare git@gitlab.example.com:test/testrepo.git ./testrepo.git

2. 配置Grerrit与gitlab的同步

可在下面网址查看看插件状态:
http://gerrit.example.com/admin/plugins
使用下面命令生成replication.config文件(对应容器目录为“/var/gerrit/etc/”):

cd /var/gerrit/etc/
cat > replication.config << EOF
[remote "testrepo"]
projects = testrepo
url = git@gitlab.example.com:test/testrepo.git
push = +refs/heads/*:refs/heads/*
push = +refs/tags/*:refs/tags/*
push = +refs/changes/*:refs/changes/*
threads = 3
EOF

更新完replication.config文件后,在宿主机上docker-compose.yaml目录下使用下面的命令重启容器:

docker compose restart

3. 配置gerrit用户权限及拉取代码等相关操作

用户权限的配置等相关使用请直接参考gerrit使用小结,在此就不赘述了。

参考链接:
docker-gerrit github网页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-备忘录模式在Java中使用示例-象棋悔棋

场景 备忘录模式 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤&#xff0c;当新的状态无效 或者存在问题时&#xff0c;可以使用暂时存储起来的备忘录将状态复原&#xff0c;当前很多软件都提供了撤销(Undo)操作&#xff0…

【Linux多线程】详解线程控制、线程分离

线程互斥与同步 &#x1f478; 理解线程&#x1f934;pthead_t&#x1f977;关于线程&#x1f9b8;‍♀️线程控制POSIX线程库线程ID及进程地址空间布局 &#x1f9b8;线程分离__thread关键字&#x1f9b8;‍♂️pthread_detach函数&#x1f9b9;‍♀️pthread_exit函数&#x…

Bean的作用域和生命周期

1. Bean的作用域 Bean作用域定义了对象实例在应用程序中的生命周期和访问范围&#xff0c;⽐如 singleton 单例作⽤域&#xff0c;就 表示 Bean 在整个 Spring 中只有⼀份&#xff0c;它是全局共享的&#xff0c;那么当其他⼈修改了这个值之后&#xff0c;那么另⼀ 个⼈读取到…

【LeetCode】102.二叉树的层序遍历

题目 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例 2&#xff1a; …

【小梦C嘎嘎——启航篇】类和对象(上篇)

【小梦C嘎嘎——启航篇】类和对象&#xff08;上篇&#xff09;&#x1f60e; 前言&#x1f64c;什么是面向过程&#xff1f;什么是面向对象&#xff1f;什么是类和对象类中的访问权限属性类的大小计算this 指针构造函数析构函数 总结撒花&#x1f49e; &#x1f60e;博客昵称&…

oracle日志分析器的使用

logmgr如何导出sql语句 我们可以使用logminer分析其它instance&#xff08;版本可不一致&#xff09;的重做日志文件&#xff0c;但是必须遵循以下要求&#xff1a; 1. LogMiner日志分析工具仅能够分析Oracle 8以后的产品 2. LogMiner必须使用被分析数据库实例产生…

Linux系统Redis的单机安装步骤

Linux系统Redis的单机安装步骤 本文以redis5版本为例&#xff0c;其他版本几乎一样&#xff1b; 操作系统为CentOS7&#xff1b; 下载需要的reids 下载地址&#xff1a;http://download.redis.io/releases/ 选择一个需要安装部署的版本&#xff0c;本文下载的redis-5.0.14 wget…

HTML <pre> 标签

定义和用法 pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。 <pre> 标签的一个常见应用就是用来表示计算机的源代码。 可以导致段落断开的标签(例如标题、"><p> 和 标签"><a…

Node.js介绍;浏览器和Node.j架构区别;Node的安装与管理;JS代码执行方式;Node的输入与输出;全局对象;

目录 1_Node.js介绍1.1_概念1.2_浏览器和Node.j架构区别1.3_Node.js应用场景 2_Node的安装与管理2.1_安装2.2_Node的版本工具2.3_版本管理工具&#xff1a;n 3_JavaScript代码执行4_Node的输入与输出4.1_REPL4.2_Node程序传递参数4.3_Node的输出 5_全局对象5.1_常见的全局对象5…

Blender - 小记

Blender 文章目录 Blender关于 Blender安装 关于 Blender Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing. …

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-1:任务)

学习之路主要为FreeRTOS操作系统在STM32F103&#xff08;STM32F103C8T6&#xff09;上的运用&#xff0c;采用的是标准库编程的方式&#xff0c;使用的IDE为KEIL5。 注意&#xff01;&#xff01;&#xff01;本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

VBA操作WORD(七)设置每一级大纲式样

Sub 设置每一级样式格式()With ActiveDocument.Styles(wdStyleHeading1).Font.Color wdColorBlack.Bold False 标题不再加粗.Size 22 二号.Name "方正小标宋简体"End WithWith ActiveDocument.Styles(wdStyleHeading2).Font.Color wdColorBlack.Bold False 黑体…

大数据实时链路备战 —— 数据双流高保真压测 | 京东云技术团队

一、大数据双流建设 1.1 数据双流 大数据时代&#xff0c;越来越多的业务依赖实时数据用于决策&#xff0c;比如促销调整&#xff0c;点击率预估、广告分佣等。为了保障业务的顺利开展&#xff0c;也为了保证整体大数据链路的高可用性&#xff0c;越来越多的0级系统建设双流&…

java之juc

juc是java.util.current的简写&#xff0c;意思是并发编程。 锁是什么&#xff1f;如何判断锁的是谁&#xff1f; 生产者和消费者问题 synchronized版本 package com.demo.juc.pc;/*** 线程之间的通信问题&#xff0c;生产者和消费者问题&#xff01;* 线程交替执行** a b …

ubuntu初始化/修改root密码

1.登录ubuntu后&#xff0c;使用sudo passwd root命令&#xff0c;进行root密码的初始化/修改&#xff0c;注&#xff1a;这里需要保证两次输入的密码都是同一个&#xff0c;才可成功 ubuntugt-ubuntu22-04-cmd-v1-0-32gb-100m:~/ocr$ sudo passwd root New password: Retype…

Docker 安全 Docker HTTPS请求过程与配置

Docker 容器安全注意点 尽量别做的事 尽量不用 --privileged 运行容器&#xff08;授权容器root用户拥有宿主机的root权限&#xff09; 尽量不用 --network host 运行容器&#xff08;使用 host 网络模式共享宿主机的网络命名空间&#xff09; 尽量不在容器中运行 ssh 服务 尽…

文件按关键字分组-切割-染色-写入excel

1. 背景 针对下面的文件data.csv&#xff0c;首先根据fid进行排序&#xff0c;然后分组&#xff0c;使相同fid的记录放到同一个excel文件中&#xff0c;并对每列重复的数据元素染上红色。 fid,user_id -1000078398032092029,230410010036537520 -1000078398032092029,23042301…

Gitlab 备份与恢复

备份 1、备份数据&#xff08;手动备份&#xff09; gitlab-rake gitlab:backup:create2、备份数据&#xff08;定时任务备份&#xff09; [rootlocalhost ]# crontab -l 00 1 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create 说明&#xff1a;每天凌晨1点备份数据…

什么是 HTTP 长轮询?

什么是 HTTP 长轮询&#xff1f; Web 应用程序最初是围绕客户端/服务器模型开发的&#xff0c;其中 Web 客户端始终是事务的发起者&#xff0c;向服务器请求数据。因此&#xff0c;没有任何机制可以让服务器在没有客户端先发出请求的情况下独立地向客户端发送或推送数据。 为…

Docker 全栈体系(八)

Docker 体系&#xff08;高级篇&#xff09; 六、Docker轻量级可视化工具Portainer 1. 是什么 Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 2. 安装 官网 https://www.portain…