Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >使用 vagrant 从搭建 gitlab server 开始体验整个 gitlab CI/CD 过程

使用 vagrant 从搭建 gitlab server 开始体验整个 gitlab CI/CD 过程

作者头像
用户7685359
发布于 2020-08-22 09:58:46
发布于 2020-08-22 09:58:46
1K00
代码可运行
举报
文章被收录于专栏:FluentStudyFluentStudy
运行总次数:0
代码可运行

背景知识 1、vagrant:包括网络配置 2、linux 基础

一、gitlab CI/CD简介

GitLab一个开源的git仓库管理平台,方便团队协作开发、管理。在GitLab上可以实现完整的CI(持续集成)、CD(持续发布)流程。而且还提供了免费使用的Plan,以及免费的可以独立部署的社区版本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
社区版本:https://gitlab.com/gitlab-org/gitlab-ce
官方链接:https://docs.gitlab.com/ee/ci/introduction/

CI: 持续集成 CD:持续发布

二、搭建 gitlab 服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
官方链接:https://about.gitlab.com/install/#centos-7

1、实验环境:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vagrant + Virtualbox + CentOS 7

2、Vagrant 创建 CentOS 7 虚拟环境并启动进入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant init centos/7
vagrant up
vagrant ssh

3、修改虚拟环境配置

首先,在官方文档第一段很清楚的说明:

https://about.gitlab.com/install/#centos-7: We strongly recommend downloading the Omnibus package installation since it is quicker to install, easier to upgrade, and it contains features to enhance reliability not found in other methods. We also strongly recommend at least 4GB of free RAM to run GitLab.

最后一句,强烈推荐至少 4G 的内存。因此我们修改第一个配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# vagrant 内存配置官方文档:https://www.vagrantup.com/docs/virtualbox/configuration.html

vim Vagrantfile
全局搜索:vb.memory
将配置修改如下:
config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    # vb.gui = false

    # Customize the amount of memory on the VM:
    vb.memory = 5120
    vb.cpus = 2
  end

另外,虚拟环境在安装好 gitlab server 后,需要宿主机可以访问,因为还需要对网络进行配置。这里采用 forwarded_port 的模式,配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# vagrant 网络配置官方文档:https://www.vagrantup.com/docs/networking/basic_usage.html
vim Vagrantfile
全局搜索:config.vm.network
将其中 config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
这句注释解掉,保存退出即可

4、重启虚拟环境,让配置生效:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant reload

5、进入虚拟环境:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vagrant ssh

6、安装 gitlab server 必需的依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum install -y curl policycoreutils-python openssh-server
sudo systemctl enable sshd
sudo systemctl start sshd
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld

7、安装 Postfix,邮件服务。gitlab 有需要发送邮件的地方。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix

8、添加 gitlab 包并安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

9、安装社区版:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y gitlab-ee

10、配置 gitlab url

第9步安装完成后,注意一下输出:

输出里交待了 gitlab server 的默认配置文件,同时提示你去配置一个 gitlab url,即访问 gitlab 的 url,修改如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 默认是 https://gitlab.example.com。
# 注意这里必须使用 sudo 权限才能看到文件内容
sudo vim /etc/gitlab/gitlab.rb
external_url 'http://gitlab.demon.com'

11、启动并让配置生效

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo gitlab-ctl reconfigure

12、宿主机配置 hosts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo vim /etc/hosts
添加:
127.0.0.1 gitlab.demon.com
# 注意换成对应的 url

13、测试访问:

前面从 Vagrantfile 做网络配置时,我们给宿主机暴露的是 8080 的端口,因此访问时需要带上端口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://localhost:8080
http://gitlab.demon.com:8080

上面两个链接均可访问。成功访问会先让你修改密码,修改完密码会提示你登录,默认登录用户是 root,密码即为你修改后的密码。

至此,gitlab server 搭建完成,我们可以在上面创建我们自己的项目。

gitlab runner 安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
参考链接:https://docs.gitlab.com/runner/install/

这里参考的是官方 Repositories 的安装方式:

1、添加官方的 gitlab repository

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

2、安装最新的 gitlab runner

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum install gitlab-runner

实践

1、创建项目,这个步骤很简单,因此不多说,这里我创建一个项目名为 demo

2、注册 gitlab runner

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
官方文档:https://docs.gitlab.com/runner/register/index.html

我们进入 project -> settings -> CI/CD -> Runners:

这里提供了注册 runner 需要的 token。

进入 centos 虚拟环境,执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo gitlab-runner register

按提示输入gitab server 的路径,注意带端口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://gitlab.demon.com:8080/

输入 token:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Please enter the gitlab-ci token for this runner
xxx

输入描述,可以理解为这个 runner 的名称:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Please enter the gitlab-ci description for this runner
[hostname] my-runner

输入runner 的标签,标签可以理解为 runner 的标识,我们后续可以在配置中通过 tags 来指定我们用哪个 runner,这里可以指定多个 runner,用 , 分隔:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag

指定 runner 的 executor,常用的有 shell 和 docker,这里我们使用 shell。你可以理解它为一种执行方式,shell 即类似我们普通的终端输入命令的方式,而 docker 就是 docker 环境下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell

这里我们再进入之前project -> settings -> CI/CD -> Runners,就能看到我们已经有一个 active 的 runner 了:

3、编写 .gitlab-ci.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.gitlab-ci.yml 语法参考文档:https://docs.gitlab.com/ee/ci/yaml/README.html

这里写一个简单的配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 指定有几个阶段
stages:
    # 给阶段取名
    - test
    - build

# 阶段一
job1:
    # 对应 test 阶段
    stage: test
    # 这个阶段需要执行的脚本
    script:
        - pwd
        - ls
        - echo "I am job1"
        - echo "I am in test stage"
    # 指定用的 runner
    tags:
        - demo

job2:
    stage: build
    script:
        - echo "I am job2"
        - echo "I am in build stage"
    tags:
        - demo

4、push 后查看 pipeline

5、其他说明

  • runner 是按照 stages 按顺序执行的,如果其中一个失败,后面的都不会执行
  • 默认每个 job 都是自动执行的,如果需要手动,可以通过 when: manual
  • 还可以指定 only: master 只有 master 分支会执行
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FluentStudy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
详解JavaScript跨域问题
什么是跨域? 概念:只要协议、域名、端口有任何一个不同,都被当作是不同的域。 URL 说明 是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http://www.a.com/script/b.js 同一域名下不同文件夹 允许 http://www.a.com:8000/a.js htt
前朝楚水
2018/04/03
1.1K0
跨域详解 【原创】
跨域详解 Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: github.com/csxiaoyaojianxian Email: sunjianfeng@csxiaoyao.com QQ: 1724338257 目录导航 跨域详解 1. 概念 2. 跨域资源共享(CORS) 3. jsonp跨域 3.1 概念 3.2 实现 3.3 jQuery封装操作 3.4 JSONP优缺点 CORS 与 J
CS逍遥剑仙
2018/04/28
1.4K0
Web前端学习笔记之前端跨域知识总结
相信每一个前端er对于跨域这两个字都不会陌生,在实际项目中应用也是比较多的。但跨域方法的多种多样实在让人目不暇接。老规矩,碰到这种情况,就只能自己总结一篇博客,作为记录。
Jetpropelledsnake21
2018/08/10
1.1K0
web跨域解决方案
阅读目录 什么是跨域 常用的几种跨域处理方法: 跨域的原理解析及实现方法 总结 摘要:跨域问题,无论是面试还是平时的工作中,都会遇到,本文总结处理跨域问题的几种方法以及其原理,也让自己搞懂这方面的知识,走起。 什么是跨域     在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容。   JavaScript这个安全策
hbbliyong
2018/03/06
2.8K0
web跨域解决方案
ajax实现跨域_js跨域请求的三种方法
跨域大家都知道,不同地址,不同端口,不同级别,不同协议都会构成跨域。例如:about.haorooms.com和www.haorooms.com都会构成跨域。总结起来只要协议、域名、端口有任何一个不同,都被当作是不同的域。下面举例,每两个一组。
全栈程序员站长
2022/09/23
2.9K0
js跨域解决方案
在页面渲染时需要动态获取iframe子页面的高度,然后重新设置iframe高度,达到自适应的目的,但是由于iframe子页面中也涉及到访问其他系统的页面,这就使得页面渲染时无法获取子页面高度,这里涉及到跨域访问子页面问题。
一笠风雨任生平
2019/08/02
4.1K0
什么是跨域?如何解决跨域问题?
什么是跨域? 浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 域名:  主域名不同 http://www.baidu.com/index.html –>http://www.sina.com/test.js  子域名不同 http://www.666.baidu.com/index.html –>http://www.555.baidu.com/test.js  域名和域名ip http://www.baidu.com/index.html –>http://180.149.132.47/test.js 端口:  http://www.baidu.com:8080/index.html–> http://www.baidu.com:8081/test.js 协议:  http://www.baidu.com:8080/index.html–> https://www.baidu.com:8080/test.js 备注:  1、端口和协议的不同,只能通过后台来解决  2、localhost和127.0.0.1虽然都指向本机,但也属于跨域
全栈程序员站长
2022/07/01
7390
什么是跨域?如何解决跨域问题?
js中几种实用的跨域方法原理详解
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据。只要协议、域名、端口有任何一个不同,都被
似水的流年
2018/01/18
2.2K0
js中几种实用的跨域方法原理详解
浏览器同源策略及跨域的解决方法
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说 Web 是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
laixiangran
2018/07/25
1.6K0
浏览器同源策略及跨域的解决方法
跨域请求方案 终极版
现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。
互扯程序
2018/07/30
3.8K0
优秀博客文章 | javascript跨域方法总结
最近面试问的挺多的一个问题,就是JavaScript的跨域问题。在这里,对跨域的一些方法做个总结。由于浏览器的同源策略,不同域名、不同端口、不同协议都会构成跨域;但在实际的业务中,很多场景需要进行跨域传递信息,这样就催生出多种跨域方法。
用户1467662
2019/04/19
5550
优秀博客文章 | javascript跨域方法总结
JS跨域请求解决方案
同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS.CSFR等攻击。所谓同源是指”协议+域名+端口”三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
码客说
2019/10/22
5.2K0
AJAX 与跨域通信(二):跨域解决方案
本篇讲解常见的几种跨域方案:JSONP、CORS、图像Ping、document.domain、window.name。
Chor
2019/11/11
1.3K0
AJAX 与跨域通信(二):跨域解决方案
什么是跨域以及几种简单解决方案
同源策略就是用来限制从一个源加载的文档或脚本与来自另一个源的资源进行交互。那怎样判断是否是同源呢?
lyb-geek
2022/03/10
5430
你真的了解跨域吗
相信每个前端对于跨域这两个字都不会陌生,在实际项目中应用也很多,但跨域方法的多种多样让人目不暇接,前段时间公司同事出现了跨域问题,又一时找不到问题所在,所以在此总结下跨域知识,一篇由浅入深的万字Web基操文
isboyjc
2022/03/28
2.4K0
你真的了解跨域吗
什么是跨域及怎么解决跨域问题?[通俗易懂]
这篇博文解释的挺清楚,我直接引用 什么是跨域?怎么解决跨域问题?_L瑜-CSDN博客_跨域是什么意思
全栈程序员站长
2022/08/11
12.9K0
什么是跨域及怎么解决跨域问题?[通俗易懂]
跨域资源共享的各种方式(持续更新)
在客户端编程语言中,如JavaScript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义。同源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问和操作另外一个域的绝大部分属性和方法。那么什么叫相同域,什么叫不同的域呢?当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.example.org),那么我们就可以认为它们是相同的域。比如http://www.example.org/index.html和http://www.example.org/sub/index.html是同域,而http://www.example.org, https://www.example.org, http://www.example.org:8080, http://sub.example.org中的任何两个都将构成跨域。同源策略还应该对一些特殊情况做处理,比如限制file协议下脚本的访问权限。本地的HTML文件在浏览器中是通过file协议打开的,如果脚本能通过file协议访问到硬盘上其它任意文件,就会出现安全隐患,目前IE8还有这样的隐患。
sunsky
2020/08/20
5630
前端 | 解决跨域问题方案
场景1:你的项目myweb,myweb的前端有一个接口是去访问一个非myweb的服务器。非myweb服务器是第三方服务器,你不能去对第三方服务器做改动。
Java小技巧
2022/10/27
7760
这次全了,8种超详细Web跨域解决方案!
导语 | 在日常开发过程中,我们通常都会遇到ajax跨域请求或者前端跨域通信的开发场景。无论是前端同学还是后端同学都需要具备解决跨域问题的能力。本文总结梳理了常见的跨域场景、跨域解决方案及其优缺点,希望可以作为大家解决跨域问题的参考。 一、什么是跨域 当a.qq.com域名下的页面或脚本试图去请求b.qq.com域名下的资源时,就是典型的跨域行为。跨域的定义从受限范围可以分为两种,广义跨域和狭义跨域。 (一)广义跨域 广义跨域通常包含以下三种行为: 资源跳转:a链接、重定向。 资源嵌入:<li
腾讯云开发者
2021/10/11
5K0
【前端】【转】JS跨域问题总结
CORS(Cross-Origin Resource Sharing)跨域资源共享,定义了必须在访问跨域资源时,浏览器与服务器应该如何沟通。CORS背后的基本思想就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是失败。
zhaokang555
2023/10/17
2570
推荐阅读
相关推荐
详解JavaScript跨域问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验