安装配置 gitlab runner
安装
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash -g root -G root
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
配置
配置时最重要的就是 URL 和 token。
URL 就是你托管代码的地方。有人看你会说,github 行不行呀?当然不行,必须是 gitlab 的服务器,github 和 gitlab 是不兼容的。我们这里以 gitlab.com 为例,其他的自建 gitlab 服务器一样,只需要写拥有 gitlab 功能的服务器的地址就行。
token 是与项目相关的字符串。打开一个项目页面,依次点击 settings -> CI/CD -> runners。
然后你就可以下下图看到 token。
sudo gitlab-runner register # 配置 gitlab runner
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
# https://gitlab.com
Please enter the gitlab-ci token for this runner
# 输入我们千辛万苦找到的 token
Please enter the gitlab-ci description for this runner
#写点介绍
Please enter the gitlab-ci tags for this runner (comma separated):
# tag 就是这个 gitlab-runner 的名字,之后可以根据不同的 tag 给不同的 gitlab-runner 指派任务
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
# shell 个人比较推荐 shell,因为即使选用了 shell 也可以调用其他的运行环境比如 docker 鸭
CI/CD 基本使用流程
在工程的根目录新建文件 .gitlab-ci.yml,提交到云端之后就会执行。
# 在任一阶段开始之前执行 echo "嘤嘤嘤"
before_script:
- echo "嘤嘤嘤"
# 说明有哪些阶段
stages:
- build
- test
- release
# build 阶段
build:
stage: build
script:
- echo "build"
tags:
- aliyunUbuntu16 # 使用名为 aliyunUbuntu16 的gitlab-runner
only:
- master # 只对 master 分支进行本操作
artifacts: # 将 src 目录下的文件保存一下,以备后续步骤使用
paths:
- README.md
# test 阶段
test:
stage: test
script:
- echo "test"
tags:
- aliyunUbuntu16 # 使用名为 aliyunUbuntu16 的gitlab-runner
only:
- master
dependencies:
- build # 依赖于 build 阶段保存的文件
artifacts:
paths:
- README.md
# release 阶段
release:
stage: release
script:
- npm install
- docker kill node_server
- docker run -d --name node_server --rm -p 3000:3000 -v $(pwd):/opt/webapp node:8.9.4 node /opt/webapp/app.js
allow_failure: false # 允许失败,web 执行起来之后就停不下来,因此此处必定超时导致失败
tags:
- aliyunUbuntu16
only:
- master
dependencies:
- test # 依赖于 test 阶段的二进制文件 web