runner介绍
GitLab Runner是一个开源项目,主要用于运行您的任务并将结果发送回GitLab。它与GitLab CI一起使用,GitLab CI是GitLab自带的开源持续集成服务,用于协调各项任务。你可以将GitLab Runner视作一个个的工人,而GitLab-CI就是这些工人的管理中心。在这个中心中,所有的工人都需要进行注册并表明自己是为哪个项目服务的。
它是使用Go语言编写的开源软件,因此可以在多种常用平台上运行,例如Linux/Unix、Windows、MacOS、Kubernetes等。
在 GitLab CI/CD 中,运行器运行 .gitlab-ci.yml 中定义的代码。
运行器是一种轻量级、高度可扩展的代理,它通过以下方式获取 CI 作业
GitLab CI/CD 的协调器 API,运行作业,并将结果发送回 GitLab 实例。
在这里能看到所有操作系统/docker的安装教程:
以下是在mac上的安装教程:
- 安装gitlab-runner
sudo curl --output /Users/jpq/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
- 权限
sudo chmod +x /Users/jpq/gitlab-runner
- 安装
gitlab-runner install
- 启动
gitlab-runner start
- 注册到gitlab上
gitlab-runner register --url https://git.uanla.com/ --registration-token $REGISTRATION_TOKEN
注册执行器
执行上文中的第5步后我们就需要注册runner到gitlab上:
# 输入本地的 gitlab URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com
# 输入 Token
Please enter the gitlab-ci token for this runner
xxxXXXXXXXXXXXXXXXXXX
# 输入 tag, 注意要跟 job 的 tag 一致
Please enter the gitlab-ci tags for this runner (comma separated):
tag1
# 选择 executor, 此次为shell
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
shell
成功后将显示:
停止和卸载
# 停止服务
gitlab-runner stop
# 卸载服务
gitlab-runner uninstall
# 清理文件
rm -rf /Users/jpq/gitlab-runner
# 删除用户
userdel -r gitlab-runner
以shell为执行器部署java服务
我们知道当runner register时,我们如果选择了shell为执行器,设置了tag为tag1,意味着是本地运行环境。
比如我们有一个pipeline-test项目的.gitlab-ci.yml配置就可以为:
stages:
- build
- deploy
cache:
key: ${CI_BUILD_REF_NAME}
paths:
- "target/*.tar.gz"
variables:
PROJECT: "pipeline-test"
# 编译
build:
stage: build
only:
- dev
- beta
- master
- testa
- testb
- testc
script:
- echo "${PROJECT} ${CI_COMMIT_REF_NAME} build"
- "mvn clean package -Dmaven.test.skip=true -Dproguard.skip=true -P ${CI_COMMIT_REF_NAME}"
- echo "${PROJECT} ${CI_COMMIT_REF_NAME} build ok"
# 因为是Maven编译,所以会有Jar包产物,这里定义产物的过期时间
artifacts:
name: $PROJECT
expire_in: 7 days
paths:
- target/*.jar
tags:
- tag1
# 部署环境
deploy:
stage: deploy
only:
- dev
- beta
- master
- testa
- testb
- testc
script:
- echo "${PROJECT} ${CI_COMMIT_REF_NAME} deploy"
# 杀死原进程
- jps -v | awk '/pipeline-test/{print "kill -9",$1}' | sh -
# 后台运行jar
- nohup java -jar target/*.jar > log.file 2>&1 &
tags:
- tag1
有此配置之后,我们就可以自动构建并部署当前应用(pipeline-test)了。
注意事项和一些问题解决方式
- 当使用gitlab-runner进行CI&CD的时候,如果是Java项目(Maven管理),需要执行mvn test等命令时候,需要在机器上安装JDK和MAVEN,配置其home到.bash_profile中。
报错记录: - ta前有感叹号!并提示:New runner. Has not connected yet 。主要是权限问题引起的,比如sudo gitlab-runner start 安装的也要sudo register
- Runtime platform arch=arm64 os=darwin pid=15784 revision=d89a789a version=16.4.1
FATAL: Failed to install gitlab-runner: open /Users/XXX/Library/LaunchAgents/gitlab-runner.plist: permission denied 权限被拒绝,没有访问文件的权限。需要切换到当前用户XXX来进行安装。