首页
视频
资源
登录
原
精
Gitlab 基本实操
5657
人阅读
2020/8/27 9:52
总访问:
2537279
评论:
0
收藏:
1
手机
分类:
git
![Gitlab](https://img.tnblog.net/arcimg/hb/92d512aee2af495fafe464a822fdea10.png "Gitlab") >#Gitlab 基本实操 [TOC] Gitlab简括 ------------ >Gitlab 本身是一个代码托管的工具。 >特点如下: - 免费、开源 - 功能强大 - 分布式 - Git flow - Git CI 安装参考 ------------ https://docs.gitlab.com/omnibus/docker/ >请提前为 `$GITLAB_HOME` 环境变量提供路径 ```bash docker run --detach \ --hostname localhost \ --publish 8929:8929 --publish 2222:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest ``` 或 ```bash sudo docker run --detach \ --hostname 127.0.0.1 \ --publish 8929:8929 --publish 2222:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest ``` >进入容器内部 ```bash sudo docker exec -it gitlab /bin/bash ``` >`/etc/gitlab/gitlab.rb`用您的编辑器打开并设置`external_url`: ```bash # For HTTP external_url "http://gitlab.example.com:8929" or # For HTTPS (notice the https) external_url "https://gitlab.example.com:8929" ``` >设置`gitlab_shell_ssh_port`: ```bash gitlab_rails['gitlab_shell_ssh_port'] = 2222 ``` >最后,重新配置GitLab: ```bash gitlab-ctl reconfigure ``` >注意运行内存8个g,如果需要对资源进行限制,可以参考这篇文章:https://www.cnblogs.com/zhuochong/p/9728383.html >### gitlab 安装目录 | 目录 | 描述 | | ------------ | ------------ | | `/etc/gitlab` | 配置文件目录 | | `/run/gitlab` | 运行pid目录 | | `/opt/gitlab` | 安装目录 | | `/var/opt/gitlab` | 数据目录 | | `/var/log/gitlab` | 日志目录 | >### gitlab 命令 ```bash # gitlab-ctl #客户端命令行操作行 # gitlab-ctl reconfigure #重新加载配置 # gitlab-ctl stop #停止gitlab # gitlab-ctl start #启动gitlab # gitlab-ctl restart #重启gitlab # gitlab-ctl status #查看组件运行状态 # gitlab-ctl tail nginx #查看某个组件的日志 ``` ![](https://img.tnblog.net/arcimg/hb/f1901a2dd2a3417b8c1f65dbcad1d9c8.png) GitLab的基本操作 ------------ >### 创建用户 ![](https://img.tnblog.net/arcimg/hb/12944b85683e4dd593b413b5b89323e6.png) tn>在这里可以创建项目、用户以及组,我们先来创建用户 ![](https://img.tnblog.net/arcimg/hb/3c3f1cb44fb240ea88639100749a2717.png) ![](https://img.tnblog.net/arcimg/hb/c49526f30fab4524b11f023d8d41f722.png) tn>接下来修改密码 ![](https://img.tnblog.net/arcimg/hb/59cb42f7f95442d29c0ee096ac6371fa.png) tn>以后还要修改可以在Dashboard下面找到该用户。 ![](https://img.tnblog.net/arcimg/hb/5b38551c060c4bd38d8d292a26b9b992.png) >### 关闭注册页面 ![](https://img.tnblog.net/arcimg/hb/8122cc02490440b8b60897c105f799f8.png) tn>我们发现在登录的时候有注册页面,导致任何人都可以注册,所以我们可以关闭掉注册页面。 ![](https://img.tnblog.net/arcimg/hb/37e497b6d6e446438b47546fefb9f919.png) ![](https://img.tnblog.net/arcimg/hb/d3a3f7d02d7e496e9a5c30f5334eba78.png) tn>再次访问就没有注册页面了 ![](https://img.tnblog.net/arcimg/hb/7c871bb7eed846f18b93ace7a2d999ce.png) >### 创建项目组 ![](https://img.tnblog.net/arcimg/hb/30f9b48627d647cdb92c20f0b6279ab8.png) ![](https://img.tnblog.net/arcimg/hb/49adb759b19445d5b2c16174ab0f5376.png) ![](https://img.tnblog.net/arcimg/hb/edec6974da40427186abf78d1680486f.png) >### 创建项目 ![](https://img.tnblog.net/arcimg/hb/9d0f5a0121604d88a665bd2f16d62e1b.png) ![](https://img.tnblog.net/arcimg/hb/3b9ff50da4144343a0c477189dfaedb1.png) GitFlow的三种流程 ------------ >###最早期分支流程 ![早期](https://img.tnblog.net/arcimg/hb/574b73e8fe9c45a3a48ed6d48cf1510a.png "早期") tn>就只在两个人开发的情况下,就三条分支: Master 、 Lei 、 Jesse ;负责对不同的需求进行开发,当 Jesse 提交代码到 Master 分支上时,Lei 需要对每一次 Master 的更新进行拉取一次然后再提交代码。 <br/> >问题有如下两点: - 当 Jesse 代码有问题时,需要等待 Jesse 在本地修改完成后,Lei 才可以再次拉取与提交代码,会造成 Master 分支拥堵。 - 测试直接影响 Master 分支对线上项目有一定影响 <br/> >###第二种分支流程 ![第二种分支流程](https://img.tnblog.net/arcimg/hb/43ffeca024964045a55f7ecfb545e41b.png) tn>当 Lei 与 Jesse 开发不同功能时,从分支上看到 Lei 先完成分支上的内容并提交到 Release 分支上,Jesse 完成对不同功能的需求开发,只需要从 Release 分支拉取到本地再次提交代码即可。假如这个时候刚好就是要上线的1.0版本,我们可以对这1.0版本进行测试如果有bug,再次让开发人员进行修改与提交。测试好1.0版本后将更新代码到 Master 主分支并且发布1.0版本的产品。如果在这当中 Master 分支出现问题,将会同步到 HotFix 分支,由开发人员修复后更新到 Master 分支与 Release 分支上 <br/> >问题: - 这种开发模式只适合一个开发团队,不适合多个团队同时开发 >###第三种分支流程 ![](https://img.tnblog.net/arcimg/hb/53412da40ad44ac8bd3d3138d10ef508.png) tn>当我们有两个或多个团队时,且分别开发不同的功能,我们可以分为两个 feature 分支两个团队进行开发,当开发完成后更新到 Dev 分支上,最后提交到 Release 分支上进行测试,测试成功后发布到 Master 分支上。当发布后,有团队做完不同的功能将会更新到 Dev 分支上。如果中途在 Release 分支上测试失败,可以在 Dev 分支或feature分支上进行修改并在 Release 分支上再次测试。 GitLab CI ------------ ![GitLab CI](https://img.tnblog.net/arcimg/hb/bd63b6ea151c4c44a3d4a60d4fbb2132.png "GitLab CI") tn>上面画了一个简易的图,画的不好,so sorry! Runner是GitLab CI的重要组件之一,它可以部署在独立的服务器上,不影响GitLab服务器。首先我们对Runner经过不同的生成方式(shell,Docker,SSH,Kubernetes)去生成从GitLab Server拉取下来的代码,然后把其中生成的以不同方式进行存储,这里我们采用Docker镜像仓库的形式进行存储。最后在不同的环境下进行测试。 >GitLab CI 支持多平台(Windows、OSX、Unix) 多语言(Java、Php、Ruby等),这其中自然也包括C#。它还有以下几个特性: - 分布式运行:多服务器、并行 - 可以运行在本地、Docker容器、SSH Remote等 - 支持批处理:windows、Power Shell (这让我们用msbuild 编译上一代的.net程序有了可能) >在使用也就是执行阶段,GitLab Runner 给我们提供了以下7种执行方式。官方称之为 executors。 - Shell - Docker - Docker Machine - Parallels - VirtualBox - SSH - Kubernetes >在注册Runner阶段,我们就需要选择executor,我们今天将选择使用本地Shell这种大家最熟悉的方式来执行作业Job。 GitLab Runner注册和安装 ------------ >###下载安装包 ```bash wget -O /usr/local/bin/gitlab-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-linux-amd64 ``` >赋予执行权限 ```bash chmod +x /usr/local/bin/gitlab-runner ``` >###注册Runner <br/> >1.输入以下命令启动注册 ```bash gitlab-runner register ``` >2.在GitLab Server上找到相关信息(从首页的Gitlab config中去设置) ![相关信息](https://img.tnblog.net/arcimg/hb/3fc84505dff44d469961a0279ffd8eed.png "相关信息") >3.注册相关信息 ![](https://img.tnblog.net/arcimg/hb/cca87fd10713451f998e64e2334dadc7.png) >4.查看CI ![](https://img.tnblog.net/arcimg/hb/c3e7f881700e4e9a8d0e7564f0b343d3.png) >###添加SSH Keys <br/> >1.从本地路径找到`C:\Users\{用户名}}\.ssh\id_rsa.pub`显示SSH的key <br/> >2.添加 SSH-Key ![添加SSH-Key](https://img.tnblog.net/arcimg/hb/585c51d9a0664bd28fc93cd18136a204.png "添加SSH-Key") >###创建项目 <br/> >1.创建项目地址 ![](https://img.tnblog.net/arcimg/hb/b4c0ebbb63eb427490dffcd75ee48426.png) >2.编写`.gitlab-ci.yml` ```bash rtest: script: - cd User.API - docker-compose up -d --build --force-recreate - docker rmi $(docker images | grep "none" | awk '{print $3}') ``` tn>Gitlab CI 官方配置文件参数说明(中文) 快速入门 https://docs.gitlab.com.cn/ce/ci/quick_start/README.html 配置文档讲解 https://docs.gitlab.com.cn/ce/ci/yaml/ >3.按照项目提示的方式提交代码 ```bash git init git remote add origin ssh://git@127.0.0.1:2222/root/beta2.git git add . git commit -m "Initial commit" git push -u origin master ``` tn>上传完代码后CI会自动跑起来 <br/> >###解决Docker非服务启动问题 ![](https://img.tnblog.net/arcimg/hb/1898e9a28d804e6f98ed5ea361da512a.png) >解决方案(1) tn>1、启动docker服务 ```bash service docker start ``` tn>2、生成自启动服务 ```bash systemctl enable docker.service ``` tn>3、查看服务状态,Active状态为:active(running) ```bash systemctl status docker.service ``` >解决方案(2) tn>添加`gitlab-runner`用户到`docker` ```bash sudo usermod -aG docker gitlab-runner ``` tn>到这里测试环境部署算是完成了,接下来该把生成的镜像进行上传到私有仓库中去。并搭建正式环境。 ![](https://img.tnblog.net/arcimg/hb/e1403dc868e94261a8f4131889e1daa2.png) 私有仓库的搭建 ------------ >###Docker registry介绍 tn>用于存储和分发Docker映像的Docker Registry 2.0实现。 >如果要执行以下操作,则应使用registry介绍: - 严格控制图像的存储位置 - 完全拥有您的图像分发管道 - 将图像存储和分发紧密集成到您的内部开发工作流程中 <br/> >###运用Docker registry <br/> ```bash docker run -d -p 311:5000 --name registry registry:2 ``` ![](https://img.tnblog.net/arcimg/hb/14c2d4e93e514fd59c016c92d075e6f0.png) tn>我们可以通过 `http://{IP}:311/v2/` 访问当前仓库的镜像有哪些 ![](https://img.tnblog.net/arcimg/hb/cb7fd5468b9647eea8f63b2377f956a9.png) tn>这里我们通过如下命令对`alpine`打一个本地的包进行测试 ```bash docker tag alpine localhost:311/alpine:local docker images ``` ![](https://img.tnblog.net/arcimg/hb/32f88f26b2ee48398ea5f49a69546c95.png) tn>最后进行推送 ```bash docker push localhost:311/alpine:local ``` ![](https://img.tnblog.net/arcimg/hb/2fe98f02937d47ba838c779699a833c7.png) tn>通过 `http://localhost:311/v2/alpine/tags/list` 进行查看 `alpine` 本地镜像的 `Tag` ,以及`http://localhost:311/v2/_catalog`。更多请参考:https://docs.docker.com/registry/spec/api/#listing-image-tags ![](https://img.tnblog.net/arcimg/hb/adec8361d21a4fd3b5cb231e55d2792a.png) >###运用Docker registry UI(docker-registry-frontend) tn>在我们进行操作Api的时候是很不方便的,所以我们可以通过(docker-registry-frontend)来进行管理进行可视化管理。 ```bash docker run -d --name registry-web --link registry:registry -e ENV_DOCKER_REGISTRY_HOST=registry -e ENV_DOCKER_REGISTRY_PORT=5000 -p 312:80 konradkleine/docker-registry-frontend:v2 ``` tn>其中 `ENV_DOCKER_REGISTRY_HOST` 环境变量表示**仓库域名或地址** `ENV_DOCKER_REGISTRY_PORT` 环境变量表示**仓库的端口** 执行完命令后访问 `127.0.0.1:312` ![](https://img.tnblog.net/arcimg/hb/431a8a07ce4949409dad5843b19b0700.png) ![](https://img.tnblog.net/arcimg/hb/cf40f357b0b54f3484d7e93d032a40b4.png) ![](https://img.tnblog.net/arcimg/hb/01d03bdbbd4c4354b4082e23b8bb0a8b.png) tn>现在我们可以看到刚刚我们提交上去的`alpine`镜像。但我们会发现有一个缺点,就是在我们进行访问的时候并没有进行权限验证。 >###Docker registry本地基本身份验证 <br/> >实现访问限制的最简单方法是通过基本身份验证(这与其他Web服务器的基本身份验证机制非常相似)。本示例使用本机基本身份验证htpasswd来存储机密。 tn>警告:不能将身份验证与将凭据作为明文发送的身份验证方案一起使用。您必须先 配置TLS,身份验证才能正常工作。 >1.创建一个密码文件,为用户提供一个条目`testuser`,密码为 `testpassword`: ```bash mkdir auth yum -y install httpd htpasswd -Bbn testuser testpassword > auth/htpasswd ``` 或 ```bash docker run \ --entrypoint htpasswd \ registry:2 -Bbn testuser testpassword > auth/htpasswd ``` >2.如果使用的是第二种方式注意停止registry。 ```bash docker container stop registry ``` >3.使用基本身份验证启动注册表。 ```bash docker run -d \ --restart=always \ --name registry \ -v `pwd`/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ -v `pwd`/cert:/certs \ -v /root/docker/registry:/var/lib/registry\ -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/xxxx.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/xxxx.key \ -p 443:443 \ registry:2 ``` tn>随后当再次提交到 **你的域名时** 会进行身份验证。 未完待续.....
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}
尘叶心繁
这一世以无限游戏为使命!
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.net后台框架
166篇
linux
17篇
linux中cve
1篇
windows中cve
0篇
资源分享
10篇
Win32
3篇
前端
28篇
传说中的c
4篇
Xamarin
9篇
docker
15篇
容器编排
101篇
grpc
4篇
Go
15篇
yaml模板
1篇
理论
2篇
更多
Sqlserver
4篇
云产品
39篇
git
3篇
Unity
1篇
考证
2篇
RabbitMq
23篇
Harbor
1篇
Ansible
8篇
Jenkins
17篇
Vue
1篇
Ids4
18篇
istio
1篇
架构
2篇
网络
7篇
windbg
4篇
AI
18篇
threejs
2篇
人物
1篇
嵌入式
2篇
python
13篇
HuggingFace
8篇
pytorch
9篇
opencv
6篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术