背景知识
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:持续发布
二、使用 vagrant 搭建 gitlab 服务
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 后,需要宿主机可以访问,因为还需要对网络进行配置。(vagrant 网络配置官方文档:https://www.vagrantup.com/docs/networking/basic_usage.html), 这里采用 forwarded_port 的模式,配置如下:
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 安装
这里参考的是官方 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
我们进入 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 分支会执行