前提条件
提供一个aws用户至少需要EC2(AmazonEC2FullAccess)用于动态增删构建机
启动一个ec2(t3.small)赋予该实例 EC2的权限。
安装依赖
docker
# ubuntu
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
# 或
apt-cache madison docker-ce
sudo apt-get install docker-ce=18.06.3~ce~3-0~ubuntu
# 验证
docker version
docker-machine
# linux
base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo install /tmp/docker-machine /usr/local/bin/docker-machine
# 验证
docker-machine version
gitlab-runner
# For Debian/Ubuntu/Mint
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
# For Debian/Ubuntu/Mint
sudo apt-get install gitlab-runner
# for DEB based systems
apt-cache madison gitlab-runner
sudo apt-get install gitlab-runner=12.4.0
# 注册跑步者
sudo gitlab-runner register
oncurrent = 3
check_interval = 0
[ ]
session_timeout = 1800
[ ]]
name = "aws"
url = "https://gitlab.wjx.com/"
token = "5d5f038bd816d34c8ad72c79e1dcd"
executor = "docker+machine"
limit = 3
[ ]
image = "docker:stable"
privileged = true
disable_cache = false
[ ]
[ ]
[ ]
[ ]
IdleCount = 1
IdleTime = 1800
MaxBuilds = 100
MachineDriver = "amazonec2"
MachineName = "gitlab-docker-machine-%s"
OffPeakPeriods = [
"* * 6-9,0-5 * * mon-fri *",
"* * * * * sat,sun *"
]
OffPeakTimezone = "Asia/Shanghai"
OffPeakIdleCount = 0
OffPeakIdleTime = 1800
MachineOptions = [
"amazonec2-endpoint=ec2.cn-northwest-1.amazonaws.com.cn",
"amazonec2-access-key=您的amazonec2-access-key",
"amazonec2-secret-key=您的amazonec2-secret-key",
"amazonec2-region=cn-northwest-1",
"amazonec2-zone=cn-northwest-1a",
"amazonec2-vpc-id=vpc-你的vpcid",
"amazonec2-subnet-id=subnet-你的subnetid",
"amazonec2-use-private-address=true",
"amazonec2-tags=runner-manager-name,gitlab-aws-autoscaler,gitlab,true,gitlab-runner-autoscale,true",
"amazonec2-security-group=gitlab-default",
"amazonec2-instance-type=m5.large",
"amazonec2-request-spot-instance=true",
"amazonec2-spot-price=0.678",
"engine-registry-mirror=http://10.0.0.25:6000",
]
MaxBuilds 单个构建机的最大构建数,达到则销毁该构建机。
工作时间设定
IdleCount (工作时间至少保留多少台构建机处于空闲,但构建机总数始终不大于limit)
IdleTime (工作时间的构建机多久没有接收到任务被销毁)
非工作时间设定
OffPeakPeriods (非工作时间范围)
OffPeakTimezone (非工作时间按照什么时区)
OffPeakIdleCount (非工作时间至少保留多少台构建机处于空闲,但构建机总数始终不大于limit)
OffPeakIdleTime (非工作时间的构建机多久没有接收到任务被销毁)
MachineOptions:
amazonec2-endpoint
北京:ec2.cn-north-1.amazonaws.com.cn
宁夏:ec2.cn-northwest-1.amazonaws.com.cn
amazonec2-region
北京:cn-north-1
宁夏:cn-northwest-1
amazonec2-zone (必须带上region,完整的)
北京:cn-north-1a | cn-north-1b
宁夏:cn-northwest-1a | cn-northwest-1b | cn-northwest-1c
amazonec2-vpc-id (启动实例所在vpc)
amazonec2-subnet-id (启动实例所在子网)
amazonec2-security-group (启动实例所在安全组)
amazonec2-instance-type (启动实例的类型)
amazonec2-request-spot-instance (是否使用竞价实例,竞价实例可能在构建时被回收导致构建失败,也有可能竞不到实例导致构建任务一直挂起)
amazonec2-spot-price (选择竞价实例需填写,您希望出的最高价格,最好和这个实例非竞价时的价格接近,否则容易竞不到实例)
engine-registry-mirror 配置默认镜像库地址,推荐内网代理镜像库
engine-install-url 构建机初始化脚本,不填用默认就行
其他参数查看可以用 docker-machine create --driver amazonec2 --help
查看gitlab-runner日志 journalctl -u gitlab-runner
刚创建的gitlab-runner构建机池中并没有构建机,需要等待初始化构建机
查看方式
通过aws 控制台查看Name为gitlab-docker-machine-%s
在gitlab-runner的ec2上执行docker-machine ls进行查看 (推荐)
Q & A
Q:构建机一直卡在install docker-ce 怎么办?
A:步骤
把https://get.docker.com/的脚本复制下来
将脚本中的mirror=''改成mirror='Aliyun'
用nginx将你修改后的脚本提供出来
修改config.toml配置添加engine-install-url=http://你的脚本地址
Q:gitlab-runner突然一直不接收构建任务怎么办?
A:大概率是gitlab-runner卡住了,需要重启
gitlab-runner stop -> gitlab-runner start