[
](https://docs.gitlab.com/runner/install/linux-manually.html)
下载安装包
- 官方gitlab-runner安装教程
- 考虑开机启动,注册成服务这些这里考虑用rpm包方式安装简单方便
- 在https://gitlab-runner-downloads.s3.amazonaws.com/latest/index.html找到最新的文件名和选项 。
选择一个版本并下载二进制文件,如下载任何其他标记版本的文档中所述,以用于最前沿的 GitLab Runner 版本。
例如,对于 CentOS 或 Red Hat Enterprise Linux:
curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpm"
安装
```bash
cd /data/gitlab_runner/ # 这是我下载安装包的目录,根据实际情况进入自己的安装包目录 rpm -i gitlab-runner_amd64.rpm gitlab-runner —version # 查看安装版本 systemctl status gitlab-runner # 查看服务启动状态
<a name="pVUdq"></a>## 注册 runner注册跑步者是将跑步者与一个或多个 GitLab 实例绑定的过程<br />register您可以通过重复该命令 在同一主机上注册多个运行器,每个运行器具有不同的配置。<a name="KamTW"></a>### 必要条件在注册跑步者之前,您必须首先:- [将其安装](https://docs.gitlab.com/runner/install/index.html)在与 GitLab 安装位置不同的服务器上- 获取令牌:- 对于[共享跑步者](https://docs.gitlab.com/ee/ci/runners/runners_scope.html#shared-runners),请让管理员前往 GitLab 管理区域并单击**概览 > 跑步者**- 对于[组跑步者](https://docs.gitlab.com/ee/ci/runners/runners_scope.html#group-runners),请转到**Settings > CI/CD**并展开**Runners**部分- 对于[特定于项目的 runner](https://docs.gitlab.com/ee/ci/runners/runners_scope.html#specific-runners),转到**Settings > CI/CD**并展开**Runners**部分- 如图所示- <a name="A1Nob"></a>### 注册1. 运行以下注册命令```bashsudo gitlab-runner register
- 输入您的 GitLab 实例 URL(也称为gitlab-ci coordinator URL)。可以从上面图中红框内容第2项复制
- 输入您获得的令牌以注册 runner。可以从上面图中红框内容第3项复制
- 输入 runne 的描述。您可以稍后在 GitLab 用户界面中更改此值。
- 输入与 runner 关联的标签,用逗号分隔。您可以稍后在 GitLab 用户界面中更改此值。
- 输入流道的任何可选维护说明。可以直接回车,为空都行
- 提供runner executor。我这里是centos环境,选择
shell - 如果您docker作为执行者输入,系统会要求您为未在.gitlab-ci.yml
- 验证是否注册成功,可以登录到
gitlab地址查看,如下图所示。绿色表示在线
权限和工作区修改
背景
注册完runner在当前系统下会创建一个gitlab-runner用户用于执行gitlab-ci.yml配置中各种shell,会多多少少遇到因为gitlab-runner用户权限不够的问题,我干脆直接让它用root账号运行,避免一些权限问题
ps aux|grep gitlab-runner #查看当前runner用户sudo gitlab-runner uninstall #删除gitlab-runner#安装并设置--user(例如我想设置为root)gitlab-runner install --working-directory /data/gitlab_runner --user root --config /etc/gitlab-runner/config.toml --service gitlab-runnersudo service gitlab-runner restart #重启gitlab-runnerps aux|grep gitlab-runner #再次执行会发现--user的用户名已经更换成root了
编写 .gitlab-ci.yml配置文件
[.gitlab-ci.yml]文件语法官方教程(https://docs.gitlab.com/ee/ci/yaml/)
variables:INIT_FLAG: "FLASE"BUILD_BASE: "FLASE"BUILD_ENV: "FLASE"BUILD_DOCKER: "TRUE"BUILD_UPDATE: "TRUE"GIT_PATH: "https://user:password@{gitlab ip:port}/CivIoT/iotGateway.git"WORK_DIR: "/data/gitlab_runner/"UPDATE_DIR: "/data/gitlab_runner/update/"UPDATE_FS: "/data/fs/iotgateway/latest/"DOCKER_BASE_ADDRESS: "{your docker registry address}:{port}/iotgateway/base:latest"DOCKER_BASE_ENV_ADDRESS: "{your docker registry address}:{port}/iotgateway/baseenv:latest"DOCKER_ADDRESS: "{your docker registry address}:{port}/iotgateway:latest"IMAGE_PLATFORM: "linux/arm,linux/arm64,linux/amd64"stages:- init- pull- base- env- buildDocker- buildUpdatebefore_script:- echo 查看运行环境- whoami- node -v- git config core.autocrlf falseinit:stage: inittags:- builder12_2script:- echo '初始化代码仓库'- |if [ ! -d $WORK_DIR/iotGateway ]; thencd $WORK_DIR && git clone $GIT_PATHelseecho '检测到iotGateway已存在'fi- echo '初始化交叉编译环境'- docker run --privileged --rm tonistiigi/binfmt --install all || true- ls /proc/sys/fs/binfmt_misc/qemu-*- docker buildx create --use --name=panda_builder --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master || true- docker buildx ls- docker buildx inspect panda_builder --bootstrap- echo '初始化'$WORK_DIR/iotGateway'完成'only:variables:- $INIT_FLAG == "TRUE"pull:stage: pulltags:- builder12_2script:- echo 开始拉取最新代码- cd $WORK_DIR/iotGateway && git pull --no-rebase- echo '更新'$WORK_DIR/iotGateway'完成'base:stage: basetags:- builder12_2script:- echo '开始构建基础镜像'- cd $WORK_DIR/iotGateway- docker buildx ls- docker buildx inspect panda_builder --bootstrap- docker buildx build -t $DOCKER_BASE_ADDRESS --platform=$IMAGE_PLATFORM -f ./docker/Dockerfile.base . --push- echo '构建base镜像完成'only:variables:- $BUILD_BASE == "TRUE"env:stage: envtags:- builder12_2script:- echo 开始构建基础环境镜像- cd $WORK_DIR/iotGateway- docker buildx ls- docker buildx inspect panda_builder --bootstrap- docker buildx build -t $DOCKER_BASE_ENV_ADDRESS --platform=$IMAGE_PLATFORM -f ./docker/Dockerfile.baseenv . --pushonly:variables:- $BUILD_ENV == "TRUE"buildDocker:stage: buildDockertags:- builder12_2script:- echo 开始构建最终网关镜像- cd $WORK_DIR/iotGateway- docker buildx ls- docker buildx inspect panda_builder --bootstrap- docker buildx build -t $DOCKER_ADDRESS --platform=$IMAGE_PLATFORM -f ./docker/Dockerfile . --pushonly:variables:- $BUILD_DOCKER == "TRUE"buildUpdate:stage: buildUpdatetags:- builder12_2script:- echo 开始构建更新包- rm -rf $UPDATE_DIR- mkdir -p $UPDATE_DIR- cp -rf $WORK_DIR/iotGateway $UPDATE_DIR- cd $UPDATE_DIR && mv iotGateway iotgateway && cd iotgateway && rm -rf .git ui watch wheel && cd scripts && rm -rf frpc libsnap7- rm -rf $UPDATE_FS- mkdir -p $UPDATE_FS- cp -f $UPDATE_DIR/iotgateway/sundryConfig.json $UPDATE_FS/sundryConfig.json- cd $UPDATE_DIR && zip -q -r iotgateway.zip iotgateway- cp -f $UPDATE_DIR/iotgateway.zip $UPDATE_FS/iotgateway.ziponly:variables:- $BUILD_UPDATE == "TRUE"
