Gitlab Runner
在项目根目录下添加 .gitlab-ci.yml 文件,整个持续集成系统是 Gitlab 自带的,要做的就是添加一个 Runner 到系统里来解析文件中的 script 部分。
安装 Gitlab Runner
官方提供了安装方法,个人选择的是 install on macOS,按顺序安装:
- 下载:
sudo curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
复制代码
- 打开权限:
sudo chmod +x /usr/local/bin/gitlab-runner
- 注册 Runner
- 安装并启动 Runner:
cd ~
gitlab-runner install
gitlab-runner start
复制代码
在注册 Runner 前需要做一些准备:
- 安装 Docker,并启动
- 通过 Gitlab 界面获取 Token。获取流程如下所示:
- 登入 Gitlab,依次进入 Settings -> CI/CD -> Runners
- 获取到的 Token 如图所示:
注册 Gitlab Runner:
- 运行下面的命令:
sudo gitlab-runner register
复制代码
- 输入 Gitlab 实例的 URL:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com
复制代码
- 输入用来注册 Runner 的 token:
Please enter the gitlab-ci token for this runner
xxx
复制代码
- 输入 Runner 的描述,随后可在 GitLab 界面中修改:
Please enter the gitlab-ci description for this runner
[hostame] my-runner
复制代码
- 输入与 Runner 绑定的标签(可修改):
Please enter the gitlab-ci tags for this runner (comma separated):
runner
复制代码
- 选择 Runner 的执行方式:
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker
复制代码
- 如果选择的执行方式是 Docker,会要求填写默认的镜像,这个镜像也可以在 .gitlab-ci.yml 中定义:
Please enter the Docker image (eg. ruby:2.1):
alpine:latest
复制代码
Gitlab 同时提供非交互式的注册,一行命令就可以:
sudo gitlab-runner register \
--non-interactive \
--url "https://gitlab.com/" \
--registration-token "获取的 token " \
--executor "docker" \
--docker-image alpine:latest \
--description "runner" \
--tag-list "docker,aws" \
--run-untagged \
--locked="false" \
复制代码
注册流程走完会在 ~/etc/gitlab-runner/ 目录下生成 config.toml 配置文件,这时候就可以在 Gitlab 的设置中看到激活的 Runner:
配置 .gitlab-ci.yml 文件
在这里只贴上个人配置,详细的资料都可以查到,在这里就不赘述了:
stages:
- build
- deploy
build:
image: node:alpine
stage: build
script:
- npm install
- npm run build
artifacts:
expire_in: 1 week
paths:
- dist/
only:
- master
deploy_staging:
image: alpine:latest
stage: deploy
before_script:
- apk update
- apk add --no-cache rsync openssh
script:
- mkdir -p ~/.ssh
- echo "$SSH_PRIVATE_KEY" >> ~/.ssh/id_dsa
- chmod 600 ~/.ssh/id_dsa
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
- rsync -rav --delete dist/ "$SERVER_USER_HOST:$SERVER_MASTER_PATH"
only:
- master
复制代码
配置文件中建立了两个工程,分别是 build 和 deploy,需要补充的几点:
- build 工程中通过 artifacts 标记新建的 dist 文件,以便在其它工程中能够复用这个文件;
- 使用 ssh 登录服务器;
- 使用 rsync 进行远程文件同步;
- 考虑到安全性,配置文件中类似
$SERVER_USER_HOST
这样的变量在 Settings -> CI/CD -> Variables 中设置; - 在 Gitlab 设置中移除 tags 检测:
使用命令行运行 Runner,sudo gitlab-runner run
,启动成功后如下截图:
构建成功后如下截图: