为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Python

背景知识
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 分支会执行
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消