1. 故事背景

为了管理方便,只在一台机器上安装Gitlab-runner,同时注册多个Executor。目前我用的是shelldocker

我需要部署的语言环境有phpnodejsdockerjava ,需要的软件清单如下:

  • nvm
  • nodejs
  • nodejs依赖库
  • docker
  • php-fpm
  • composer
  • jdk
  • maven

2. 提前准备

  • 本次试验是在CentOS 7.4 64位系统

3. 软件安装

3.1 nvm & node & 依赖库

以下操作请使用gitlab-runner用户进行

安装nvm

官方参考传送门

安装

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

手动生效环境变量

source ~/.bashrc

查找你想装的版本

nvm list-remote

安装nodejs

nvm install v8.9.4

安装依赖库

npm i -g cnpm apidoc

3.2 docker

以下操作我使用了root用户进行

官方参考传送门

删除旧版本的docker(新的名字是docker-ce),不管有没有,直接执行

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

安装依赖

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

加stable yum源

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装docker-ce

sudo yum install -y docker-ce

启动docker

sudo systemctl start docker

3.3 php & composer

以下操作我使用了root用户进行

安装php

安装epel-release

sudo yum -y install epel-release

先卸载php

sudo yum -y remove php* php7*

由于linux的yum源不存在php7.x,所以我们要更改yum源

sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm   
sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 

yum安装php72w和各种拓展,选自己需要的即可 (扩展理论上不装也可以,composer只依赖php)

yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-fpm php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-xml

安装composer

官方参考传送门

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer

替换国内镜像,官方参考传送门

composer config -g repo.packagist composer https://packagist.phpcomposer.com

3.4 jdk & maven

// TODO

4. 软件设置

4.1 gitlab-runner登录docker私有镜像仓库

如果你需要push镜像到私有仓库(如阿里云镜像), 以下操作请使用gitlab-runner用户进行

# 登录
docker login --username={your-username} {your-docker-repo-url}

# 例子
docker login --username=afanticar registry-vpc.cn-hangzhou.aliyuncs.com

注意!正常情况下,gitlab-runner是不可以操作docker的!

一般会出现类似情况

Got permission denied while trying to connect to the Docker daemon socket

这是没权限的意思,只需要把用户gitlab-runner加入docker组即可

sudo usermod -a -G docker gitlab-runner

如果提示你没有docker这个组,那说明你安装的老版本的docker,我的办法是更新新版本

5. 题外话

5.1 docker安装错了测试版

第一次更新docker版本的时候,看官方文档不认真,把以下这个可选项也执行了

sudo yum-config-manager --enable docker-ce-edge 
sudo yum-config-manager --enable docker-ce-test 

这个开启后,其实会安装到测试版的docker,但我更新的是生产环境,当然不能用测试版。 我是在安装完成后,发现他的名字居然含beta字样,这让我很不心安,于是打算重新安装稳定版。

于是执行

# 卸载 
yum remove -y docker-ce

# 关闭测试源 
sudo yum-config-manager --disable docker-ce-edge 
sudo yum-config-manager --disable docker-ce-test 

# 重新安装
yum install -y docker-ce

但是…却发生以下的报错截选

Transaction check error: 
    file /usr/bin/docker from install of docker-ce-18.06.1.ce-3.el7.x86_64 conflicts with file from package docker-ce-cli-0:18.09.0.ce-1.1.beta1.el7.x86_64
    ……….

这个根本不懂,google一条结果都没有…删掉部分继续google,折腾好久没效果。 然后无意中看到别人删除yum库的时候,会指定具体的版本,于是乎,我做了以下有效的操作。

# 卸载 
yum remove docker-ce-cli-0:18.09.0.ce-1.1.beta1.el7.x86_64 

# 重新安装
yum install -y docker-ce

记得启动

sudo systemctl start docker

就这样成功了,记录一下经历,虽然意义不大。