使用 vagrant 从搭建 gitlab server 开始体验整个 gitlab CI/CD 过程
背景知识 1、vagrant:包括网络配置 2、linux 基础
一、gitlab CI/CD简介
GitLab一个开源的git仓库管理平台,方便团队协作开发、管理。在GitLab上可以实现完整的CI(持续集成)、CD(持续发布)流程。而且还提供了免费使用的Plan,以及免费的可以独立部署的社区版本。
社区版本:https://gitlab.com/gitlab-org/gitlab-ce
官方链接:https://docs.gitlab.com/ee/ci/introduction/
CI: 持续集成 CD:持续发布
二、搭建 gitlab 服务
官方链接:https://about.gitlab.com/install/#centos-7
1、实验环境:
Vagrant + Virtualbox + CentOS 7
2、Vagrant 创建 CentOS 7 虚拟环境并启动进入
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 的内存。因此我们修改第一个配置如下:
# 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 的模式,配置如下:
# 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、重启虚拟环境,让配置生效:
vagrant reload
5、进入虚拟环境:
vagrant ssh
6、安装 gitlab server 必需的依赖
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 有需要发送邮件的地方。
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
8、添加 gitlab 包并安装
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
9、安装社区版:
yum install -y gitlab-ee
10、配置 gitlab url
第9步安装完成后,注意一下输出:
输出里交待了 gitlab server 的默认配置文件,同时提示你去配置一个 gitlab url,即访问 gitlab 的 url,修改如下:
# 默认是 https://gitlab.example.com。
# 注意这里必须使用 sudo 权限才能看到文件内容
sudo vim /etc/gitlab/gitlab.rb
external_url 'http://gitlab.demon.com'
11、启动并让配置生效
sudo gitlab-ctl reconfigure
12、宿主机配置 hosts
sudo vim /etc/hosts
添加:
127.0.0.1 gitlab.demon.com
# 注意换成对应的 url
13、测试访问:
前面从 Vagrantfile 做网络配置时,我们给宿主机暴露的是 8080 的端口,因此访问时需要带上端口:
http://localhost:8080
http://gitlab.demon.com:8080
上面两个链接均可访问。成功访问会先让你修改密码,修改完密码会提示你登录,默认登录用户是 root,密码即为你修改后的密码。
至此,gitlab server 搭建完成,我们可以在上面创建我们自己的项目。
gitlab runner 安装
参考链接:https://docs.gitlab.com/runner/install/
这里参考的是官方 Repositories 的安装方式:
1、添加官方的 gitlab repository
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
2、安装最新的 gitlab runner
sudo yum install gitlab-runner
实践
1、创建项目,这个步骤很简单,因此不多说,这里我创建一个项目名为 demo
2、注册 gitlab runner
官方文档:https://docs.gitlab.com/runner/register/index.html
我们进入 project -> settings -> CI/CD -> Runners:
这里提供了注册 runner 需要的 token。
进入 centos 虚拟环境,执行:
sudo gitlab-runner register
按提示输入gitab server 的路径,注意带端口:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://gitlab.demon.com:8080/
输入 token:
Please enter the gitlab-ci token for this runner
xxx
输入描述,可以理解为这个 runner 的名称:
Please enter the gitlab-ci description for this runner
[hostname] my-runner
输入runner 的标签,标签可以理解为 runner 的标识,我们后续可以在配置中通过 tags 来指定我们用哪个 runner,这里可以指定多个 runner,用 , 分隔:
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
指定 runner 的 executor,常用的有 shell 和 docker,这里我们使用 shell。你可以理解它为一种执行方式,shell 即类似我们普通的终端输入命令的方式,而 docker 就是 docker 环境下:
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
.gitlab-ci.yml 语法参考文档:https://docs.gitlab.com/ee/ci/yaml/README.html
这里写一个简单的配置文件:
# 指定有几个阶段
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 分支会执行
- 漏洞科普:对于XSS和CSRF你究竟了解多少
- 巧用Live Template,不仅能提升AS开发效率,还能装逼
- 黑了前男友网站:从找SQL注入到后台权限
- 扩展CakePHP的CacheHelper以使用缓存引擎
- 走进科学:酒店保险箱真的保险么?
- 利用xmlrpc.php对WordPress进行暴力破解攻击
- .Net中如何操作IIS
- Havex:以工控设备为狩猎目标的恶意软件
- 大规模异常滥用检测:基于局部敏感哈希算法——来自Uber Engineering的实践
- 浅谈php安全
- 在统一的分析平台上构建复杂的数据管道
- 隐藏在注册表的恶意软件 – Poweliks
- 数千万WordPress和Drupal站点存在DDoS风险
- 利用基因突变和K均值预测地区种群
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法