[

](https://docs.gitlab.com/runner/install/linux-manually.html)

下载安装包

  1. 在https://gitlab-runner-downloads.s3.amazonaws.com/latest/index.html找到最新的文件名和选项 。
  2. 选择一个版本并下载二进制文件,如下载任何其他标记版本的文档中所述,以用于最前沿的 GitLab Runner 版本。

    例如,对于 CentOS 或 Red Hat Enterprise Linux:

    1. 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 # 查看服务启动状态

  1. <a name="pVUdq"></a>
  2. ## 注册 runner
  3. 注册跑步者是将跑步者与一个或多个 GitLab 实例绑定的过程<br />register您可以通过重复该命令 在同一主机上注册多个运行器,每个运行器具有不同的配置。
  4. <a name="KamTW"></a>
  5. ### 必要条件
  6. 在注册跑步者之前,您必须首先:
  7. - [将其安装](https://docs.gitlab.com/runner/install/index.html)在与 GitLab 安装位置不同的服务器上
  8. - 获取令牌:
  9. - 对于[共享跑步者](https://docs.gitlab.com/ee/ci/runners/runners_scope.html#shared-runners),请让管理员前往 GitLab 管理区域并单击**概览 > 跑步者**
  10. - 对于[组跑步者](https://docs.gitlab.com/ee/ci/runners/runners_scope.html#group-runners),请转到**Settings > CI/CD**并展开**Runners**部分
  11. - 对于[特定于项目的 runner](https://docs.gitlab.com/ee/ci/runners/runners_scope.html#specific-runners),转到**Settings > CI/CD**并展开**Runners**部分
  12. - 如图所示
  13. - ![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)
  14. <a name="A1Nob"></a>
  15. ### 注册
  16. 1. 运行以下注册命令
  17. ```bash
  18. sudo gitlab-runner register
  1. 输入您的 GitLab 实例 URL(也称为gitlab-ci coordinator URL)。可以从上面图中红框内容第2项复制
  2. 输入您获得的令牌以注册 runner。可以从上面图中红框内容第3项复制
  3. 输入 runne 的描述。您可以稍后在 GitLab 用户界面中更改此值。
  4. 输入与 runner 关联的标签,用逗号分隔。您可以稍后在 GitLab 用户界面中更改此值。
  5. 输入流道的任何可选维护说明。可以直接回车,为空都行
  6. 提供runner executor。我这里是centos环境,选择 shell
  7. 如果您docker作为执行者输入,系统会要求您为未在.gitlab-ci.yml
  8. 验证是否注册成功,可以登录到gitlab地址查看,如下图所示。绿色表示在线

image.png

权限和工作区修改

背景

注册完runner在当前系统下会创建一个gitlab-runner用户用于执行gitlab-ci.yml配置中各种shell,会多多少少遇到因为gitlab-runner用户权限不够的问题,我干脆直接让它用root账号运行,避免一些权限问题

  1. ps aux|grep gitlab-runner #查看当前runner用户
  2. sudo gitlab-runner uninstall #删除gitlab-runner
  3. #安装并设置--user(例如我想设置为root)
  4. gitlab-runner install --working-directory /data/gitlab_runner --user root --config /etc/gitlab-runner/config.toml --service gitlab-runner
  5. sudo service gitlab-runner restart #重启gitlab-runner
  6. ps aux|grep gitlab-runner #再次执行会发现--user的用户名已经更换成root了

编写 .gitlab-ci.yml配置文件

[.gitlab-ci.yml]文件语法官方教程(https://docs.gitlab.com/ee/ci/yaml/)

  1. variables:
  2. INIT_FLAG: "FLASE"
  3. BUILD_BASE: "FLASE"
  4. BUILD_ENV: "FLASE"
  5. BUILD_DOCKER: "TRUE"
  6. BUILD_UPDATE: "TRUE"
  7. GIT_PATH: "https://user:password@{gitlab ip:port}/CivIoT/iotGateway.git"
  8. WORK_DIR: "/data/gitlab_runner/"
  9. UPDATE_DIR: "/data/gitlab_runner/update/"
  10. UPDATE_FS: "/data/fs/iotgateway/latest/"
  11. DOCKER_BASE_ADDRESS: "{your docker registry address}:{port}/iotgateway/base:latest"
  12. DOCKER_BASE_ENV_ADDRESS: "{your docker registry address}:{port}/iotgateway/baseenv:latest"
  13. DOCKER_ADDRESS: "{your docker registry address}:{port}/iotgateway:latest"
  14. IMAGE_PLATFORM: "linux/arm,linux/arm64,linux/amd64"
  15. stages:
  16. - init
  17. - pull
  18. - base
  19. - env
  20. - buildDocker
  21. - buildUpdate
  22. before_script:
  23. - echo 查看运行环境
  24. - whoami
  25. - node -v
  26. - git config core.autocrlf false
  27. init:
  28. stage: init
  29. tags:
  30. - builder12_2
  31. script:
  32. - echo '初始化代码仓库'
  33. - |
  34. if [ ! -d $WORK_DIR/iotGateway ]; then
  35. cd $WORK_DIR && git clone $GIT_PATH
  36. else
  37. echo '检测到iotGateway已存在'
  38. fi
  39. - echo '初始化交叉编译环境'
  40. - docker run --privileged --rm tonistiigi/binfmt --install all || true
  41. - ls /proc/sys/fs/binfmt_misc/qemu-*
  42. - docker buildx create --use --name=panda_builder --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master || true
  43. - docker buildx ls
  44. - docker buildx inspect panda_builder --bootstrap
  45. - echo '初始化'$WORK_DIR/iotGateway'完成'
  46. only:
  47. variables:
  48. - $INIT_FLAG == "TRUE"
  49. pull:
  50. stage: pull
  51. tags:
  52. - builder12_2
  53. script:
  54. - echo 开始拉取最新代码
  55. - cd $WORK_DIR/iotGateway && git pull --no-rebase
  56. - echo '更新'$WORK_DIR/iotGateway'完成'
  57. base:
  58. stage: base
  59. tags:
  60. - builder12_2
  61. script:
  62. - echo '开始构建基础镜像'
  63. - cd $WORK_DIR/iotGateway
  64. - docker buildx ls
  65. - docker buildx inspect panda_builder --bootstrap
  66. - docker buildx build -t $DOCKER_BASE_ADDRESS --platform=$IMAGE_PLATFORM -f ./docker/Dockerfile.base . --push
  67. - echo '构建base镜像完成'
  68. only:
  69. variables:
  70. - $BUILD_BASE == "TRUE"
  71. env:
  72. stage: env
  73. tags:
  74. - builder12_2
  75. script:
  76. - echo 开始构建基础环境镜像
  77. - cd $WORK_DIR/iotGateway
  78. - docker buildx ls
  79. - docker buildx inspect panda_builder --bootstrap
  80. - docker buildx build -t $DOCKER_BASE_ENV_ADDRESS --platform=$IMAGE_PLATFORM -f ./docker/Dockerfile.baseenv . --push
  81. only:
  82. variables:
  83. - $BUILD_ENV == "TRUE"
  84. buildDocker:
  85. stage: buildDocker
  86. tags:
  87. - builder12_2
  88. script:
  89. - echo 开始构建最终网关镜像
  90. - cd $WORK_DIR/iotGateway
  91. - docker buildx ls
  92. - docker buildx inspect panda_builder --bootstrap
  93. - docker buildx build -t $DOCKER_ADDRESS --platform=$IMAGE_PLATFORM -f ./docker/Dockerfile . --push
  94. only:
  95. variables:
  96. - $BUILD_DOCKER == "TRUE"
  97. buildUpdate:
  98. stage: buildUpdate
  99. tags:
  100. - builder12_2
  101. script:
  102. - echo 开始构建更新包
  103. - rm -rf $UPDATE_DIR
  104. - mkdir -p $UPDATE_DIR
  105. - cp -rf $WORK_DIR/iotGateway $UPDATE_DIR
  106. - cd $UPDATE_DIR && mv iotGateway iotgateway && cd iotgateway && rm -rf .git ui watch wheel && cd scripts && rm -rf frpc libsnap7
  107. - rm -rf $UPDATE_FS
  108. - mkdir -p $UPDATE_FS
  109. - cp -f $UPDATE_DIR/iotgateway/sundryConfig.json $UPDATE_FS/sundryConfig.json
  110. - cd $UPDATE_DIR && zip -q -r iotgateway.zip iotgateway
  111. - cp -f $UPDATE_DIR/iotgateway.zip $UPDATE_FS/iotgateway.zip
  112. only:
  113. variables:
  114. - $BUILD_UPDATE == "TRUE"