[
](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**部分
- 如图所示
- ![image.png](https://cdn.nlark.com/yuque/0/2022/png/751869/1646816664716-46c4d563-f5bd-4a1d-a880-0616d52b6947.png#clientId=ucd348d30-ffdd-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=907&id=uddf90fe3&margin=%5Bobject%20Object%5D&name=image.png&originHeight=907&originWidth=1385&originalType=binary&ratio=1&rotation=0&showTitle=false&size=127549&status=done&style=none&taskId=ub136b1f1-7457-4edd-8207-1f9e88767cf&title=&width=1385)
<a name="A1Nob"></a>
### 注册
1. 运行以下注册命令
```bash
sudo 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-runner
sudo service gitlab-runner restart #重启gitlab-runner
ps 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
- buildUpdate
before_script:
- echo 查看运行环境
- whoami
- node -v
- git config core.autocrlf false
init:
stage: init
tags:
- builder12_2
script:
- echo '初始化代码仓库'
- |
if [ ! -d $WORK_DIR/iotGateway ]; then
cd $WORK_DIR && git clone $GIT_PATH
else
echo '检测到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: pull
tags:
- builder12_2
script:
- echo 开始拉取最新代码
- cd $WORK_DIR/iotGateway && git pull --no-rebase
- echo '更新'$WORK_DIR/iotGateway'完成'
base:
stage: base
tags:
- builder12_2
script:
- 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: env
tags:
- builder12_2
script:
- 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 . --push
only:
variables:
- $BUILD_ENV == "TRUE"
buildDocker:
stage: buildDocker
tags:
- builder12_2
script:
- 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 . --push
only:
variables:
- $BUILD_DOCKER == "TRUE"
buildUpdate:
stage: buildUpdate
tags:
- builder12_2
script:
- 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.zip
only:
variables:
- $BUILD_UPDATE == "TRUE"