Gitlab-Runner自动构建服务器搭建1

这里讲到的gitlab仓库指的是https://gitlab.com/,自建gitlab仓库也基本相同。

项目的构建打包过程相对比较消耗系统性能,所以gitlab将这部分任务都交给了gitlab-runner来做,因为gitlab-runner可以部署到不同的机器上。这样在构建的时候就不会影响gitlab服务器的性能。而gitlab ci仅用来管理项目的构建状态等轻量工作。

gitlab仓库提供了两种Runner自动构建的方案:一种是Specific Runners,另一种是Shared Runners。 在项目的settings/ci_cd页面中展开Runners可以看到两个功能区,分别用来设置不同类型的Runners。

Specific Runners——使用指定的构建服务器进行自动构建任务,通常用于自建Runner服务器。

Shared Runners——使用gitlab官方提供的共享服务器进行自动构建任务。

这里以自建gitlab-runner服务器为例;

基于Docker构建自定义Gitlab-Runner镜像

这里使用的系统是Ubuntu 14.04.5 LTS 。

准备服务器环境

首先登录服务器,确定服务器已经安装docker及docker compose。

执行以下命令查看docker与docker-compose版本信息:

docker -v
Docker version 18.06.3-ce, build d7080c1 docker-compose -v
docker-compose version 1.26.2, build eefe0d31

创建docker-compose.yml文件

创建目录/usr/local/docker/runner,切换当前目录到runner;在当前目录中创建config文件夹和docker-compose.yml文件;config文件夹将会被配置为存储gitlab-runner配置的文件夹。

使用vim创建docker-compose.yml文件:

version: "3.3"
services:
gitlab-runner:
build: environment
container_name: gitlab-runner-compose
restart: always
volumes:
- ./config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock

environment指定了构建镜像的dockerfile文件地址,系统会到指定的文件夹中找到Dockerfile(默认名)文件。

volumes配置了gitlab-runner容器配置文件在宿主机上的存储位置。绑定容器的docker.sock目录到宿主机的对应目录,这样容器在运行时就可以使用宿主机的docker service执行docker命令。

创建Dockerfile文件

官方提供的gitlab-runner镜像只是一个纯净的基础环境,我们需要将项目的依赖环境集成到基础镜像中,下面我们就通过Dockerfile将项目依赖集成到gitlab-runner镜像。

在当前目录创建environment文件夹用于存放依赖文件,切换到/usr/local/docker/runner/environment目录下;

执行vim Dockerfile创建文件:

FROM gitlab/gitlab-runner
MAINTAINER Andy andywanggogogo@gmail.com #安装docker-ce===================
RUN apt-get update -y && apt-get clean
RUN apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
apt-get update -y && \
apt-get install -y docker-ce
#================================
#切换镜像目录,安装项目依赖node======
WORKDIR /usr/local/node
RUN wget https://nodejs.org/dist/v12.18.2/node-v12.18.2-linux-x64.tar.xz && \
tar xf node-v12.18.2-linux-x64.tar.xz && \
rm -rf node-v12.18.2-linux-x64.tar.xz && \
mv node-v12.18.2-linux-x64 node-v12.18.2 && \
ln -s /usr/local/node/node-v12.18.2/bin/node /usr/bin/node && \
ln -s /usr/local/node/node-v12.18.2/bin/npm /usr/bin/npm
#=================================
WORKDIR /

在Dockerfile文件中做了三件事:

1)引用gitlab/gitlab-runner作为基础镜像;

2)使用RUN命令安装docker,安装命令参考docker官方Install on Ubuntu

3)下载node并解压,使用ln -s命令配置软连接,方便全局访问node和npm。

注意:这里安装的docker只是存在于镜像中的一个docker客户端,用于和宿主机docker service通信。

构建、运行自定义的gitlab-runner镜像

切换到上级目录/usr/local/docker/runner,执行docker-compose up -d命令,系统会按照docker-compose.yml文件的配置执行镜像构建和运行任务,执行docker-compose ps命令可以查看刚刚启动的容器。

到此我们的自定义gitlab-runner镜像就构建完成了,这个镜像构建成功后可以复用给其他的nodejs项目。下一章我们将项目仓库注册到我们的gitlab-runner服务中,编写.gitlab-ci.yml文件来管理自动构建任务,实现项目的本地推送自动触发构建任务功能。

 

Gitlab-CI/CD 1的更多相关文章

  1. [转]GitLab Continuous Integration (GitLab CI/CD)

    本文转自:https://docs.gitlab.com/ee/ci/README.html GitLab Continuous Integration (GitLab CI/CD) The bene ...

  2. 使用 Gitlab CI/CD 实现自动化发布站点到 IIS

    说明 这里先介绍下两个东西 CI/CD.GitLab Runner,当然在此之前你需要对 git 有所了解,关于 git 这里不做说明,可以自行百度. 首先介绍 CI/CD :随着我们开发方式的转变, ...

  3. 前端初探 Gitlab CI/CD

    前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就是其中一项,那么什么是 C ...

  4. .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker

    之前写过使用Jenkins实现自动化部署,最近正好没事研究了下GitLab的自动化部署,顺便记录一下. 使用GitLab部署我们需要准备两件事,第一个起码你得有个GitLab,自己搭建或者使用官方的都 ...

  5. GitLab CI/CD持续集成设置

    GitLab CI/CD持续设置 官方文档地址(https://docs.gitlab.com/ee/ci/README.html) GitLab CI.CD功能非常完善,只需要简单几步,就可以完成项 ...

  6. Gitlab CI/CD

    Gitlab CI/CD 前言 纵观人类历史的发展以及三次工业革命,你会发现利用机器来替代部分人力劳动,将重复的工作自动化从而解放生产力都是发展的必然趋势,在软件工程领域也不例外,其中 CI/CD 就 ...

  7. GitLab CI/CD的官译【原】

    CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...

  8. .NetCore 配合 Gitlab CI&CD 实践 - 开篇

    引言 这是一个系列的文章,讲述的是一个中小型开发团队如何从零开始使用搭建基建 GitLab 代码托管平台,以及使用 GitLab Runner 实现 CI/CD 的故事.本系列通过部署一个完整的 .n ...

  9. .NetCore 配合 Gitlab CI&CD 实践 - 单体项目

    前言 上一篇博文 .NetCore 配合 Gitlab CI&CD 实践 - 开篇,主要简单的介绍了一下 GitLab CI 的持续集成以及持续部署,这篇将通过 GitLab CI 发布一个 ...

  10. GitLab CI/CD 配置

    GitLab CI/CD 配置 概念 持续集成的相关概念,可以看这篇文章 持续集成是什么? - 阮一峰的网络日志 操作示例 创建测试项目 sample-web,然后打开项目的 Runners 配置 找 ...

随机推荐

  1. DJANGO-天天生鲜项目从0到1-003-用户模块-登录

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  2. Ansible部署zabbix-agent

    playbook目录 zabbix/ ├── hosts ##定义的主机列表 ├── install_zabbix_agent.yml ##安装入口文件 └── roles ├── install_z ...

  3. Dom运用2

    1.登录系统 <!--输入框创建--> 账号:<input class="ipt" type="text"><br> 密码: ...

  4. 路径总和(leetcode 113)

    题目描述如下所示: 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径.(https://leetcode-cn.com/problems/path-sum-ii/) ...

  5. macOS 遇到 svnadmin无法使用的情况

    首先,我在网上查了很多资料,大多数开发者都是表明了mac内置svn,然后直接使用svnadmin来创建仓库,但是我用命令行敲入svnadmin却显示找不到svnadmin.最开始,有个资料说用whic ...

  6. Python break语句

    Python break语句:当运行到 break 语句时,终止包含 break 的循环语句. 注:无论判断条件是否达到 False 或 序列是否遍历完都会停止执行循环语句和该 break 下的所有语 ...

  7. Python访问元组

    Python访问元组: 使用索引下标进行访问元组: # 通过索引下标进行访问 tuple_1 = ('a','b','c','d','e','f','g') # 输出元组中的第一个值 print(tu ...

  8. PHP str_ireplace() 函数

    实例 把字符串 "Hello world!" 中的字符 "WORLD"(不区分大小写)替换成 "Peter": <?php高佣联盟 w ...

  9. PDO::inTransaction

    PDO::inTransaction — 检查是否在一个事务内(PHP 5 >= 5.3.3, Bundled pdo_pgsql) 说明 语法 bool PDO::inTransaction ...

  10. Java注解与反射

    概要 本文主要是总结Java注解与反射的相关知识,加深自己对Java类动态语言的理解,同时为日后学习Spring打下基础. 注解: 什么是注解 Annotation的作用 不是程序本身,但是可以对程序 ...