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. 2n皇后问题-------递归 暴力求解题与分布讨论题

    问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行.同一列或同一 ...

  2. C#递归的简单实例

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  3. .NetCore 登录(密码盐+随机数)

    一.理论部分 1.为什么要给密码加盐 我们在数据库中存入的密码一般不会是明文,都要通加MD5加密后存入,但是有些简单的密码加密后存入数据库也不安全,所有我们采用密码+盐再进行MD5加密存入数据库中. ...

  4. 启动扫描闪退,因为忘了在manifest里申请手机镜头使用许可了。

    启动扫描闪退,因为忘了在manifest里申请手机镜头使用许可了.

  5. Django学习路10_创建一个新的数据库,指定列名并修改表名

    在 models.py 中添加 from django.db import models # Create your models here. class Person(models.Model): ...

  6. pandas_处理异常值缺失值重复值数据差分

    # 处理异常值缺失值重复值数据差分 import pandas as pd import numpy as np import copy # 设置列对齐 pd.set_option("dis ...

  7. SELECT within SELECT Tutorial -- SQLZOO

    SELECT within SELECT Tutorial 注意:where语句中对表示条件的需要用单引号, 下面的译文使用的是有道翻译如有不正确,请直接投诉有道 01.List each count ...

  8. Python time sleep()方法

    描述 Python time sleep() 函数推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间.高佣联盟 www.cgewang.com 语法 sleep()方法语法: time. ...

  9. PHP mysqli_rollback() 函数

    关闭自动提交,做一些查询,提交查询,然后回滚当前事务: <?php 高佣联盟 www.cgewang.com // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con ...

  10. Skill 中的通用输出格式规范

    https://www.cnblogs.com/yeungchie/ Skill中的通用输出格式规范 Common Output Format Specifications Format Specif ...