# 2 Gitlab Runner Deploy

***

### 1. 本地安装gitlab-runner

```bash
$ wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

$ curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
$ yum install gitlab-runner
$ systemctl status gitlab-runner
$ sudo chown -R gitlab-runner:gitlab-runner /var/run/docker.sock
$ sudo su - gitlab-runner
```

当然，我们可以安装官方的方法安装，从gitlab就可以找到简洁的安装方式： ![在这里插入图片描述](https://img-blog.csdnimg.cn/3902d2228eed4ecdaf460b91f3342e45.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/4a60626a209743b390999096ea3ceeec.png)

### 2. 项目通过本地命令注册runner

1 输入如下命令

```bash
$ sudo gitlab-runner register
```

2 输入gitlab地址 地址可以从项目中获取到 这个页面会获取到地址和token，下面用到 3 输入token，就是截图里的token 4 输入对Runner的描述，这个在GitLab’s UI可以修改，比如my-runner 5 给Runner打个标签，这个在GitLab’s UI可以修改，比如java 6 是否Runner执行没有标签的构建任务，输入true 7 是否将Runner锁定到当前项目，这个在GitLab’s UI可以修改，输入true 8 输入Runner的执行者，这里我选择shell 这样我们就配置好了Runner 当我们有代码提交的时候，Runner就会执行.gitlab-ci.yml的构建任务

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200803015419937.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpeGloYWhhbGVsZWhlaGU=,size_16,color_FFFFFF,t_70)

### 3. docker安装gitlab-runner

```bash
docker run -d --name gitlab-runner --restart always --net=host \
     -v /srv/gitlab-runner/config:/etc/gitlab-runner \
     -v /var/run/docker.sock:/var/run/docker.sock \
     gitlab/gitlab-runner:latest
```

您可以使用配置容器来挂载您的自定义数据卷

```bash
docker volume create gitlab-runner-config
docker run -d --name gitlab-runner --restart always --net=host \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v gitlab-runner-config:/etc/gitlab-runner \
    gitlab/gitlab-runner:latest
```

### 4. 项目通过docker注册runner

```bash
$ docker run --rm --net=host -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:alpine-v14.4.2 register
Runtime platform                                    arch=amd64 os=linux pid=7 revision=50fc80a6 version=14.4.2
Running in system-mode.                            
                                                   
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://192.168.211.70:8081
Enter the registration token:
6D5mo8iWCLBaVdqcaqjN
Enter a description for the runner:
[329b671ffa00]: gitlab-example
Enter tags for the runner (comma-separated):

Registering runner... succeeded                     runner=6D5mo8iW
Enter an executor: ssh, virtualbox, docker+machine, shell, docker-ssh+machine, kubernetes, custom, docker, docker-ssh, parallels:
docker
Enter the default Docker image (for example, ruby:2.6):
ubuntu:20.04
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 
```

我们选择的执行器是docker，那么关于这个项目，编写`.gitlab-ci.yml`就要一定docker执行的规则去执行。 注册配置内容我可以在这里看到。并根据需求做一些小的变动。

```bash
$ docker exec -ti gitlab-runner bash
$ cat /etc/gitlab-runner/config.toml 
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]

[[runners]]
  name = "demo"
  url = "http://gitlab.example.com:8081/"
  token = "PF41kT9ZV_1DoT6VzcCu"    #这里的token，并不是registration token的token。
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    extra_hosts = ["gitlab.example.com:192.168.211.70"]
    tls_verify = false
    image = "ubuntu:20.04"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    dns = ["8.8.8.8", "1.1.1.1"]
```

执行器选择是多种样的，我们当然也可以多个选择。通过多次注册的方式。 我尝试再次注册一次。

```bash
docker run  --net=host --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:alpine-v14.4.2 register
Runtime platform                                    arch=amd64 os=linux pid=11 revision=50fc80a6 version=14.4.2
Running in system-mode.                            
                                                   
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://gitlab.example.com:8081
Enter the registration token:
6D5mo8iWCLBaVdqcaqjN
Enter a description for the runner:
[yourdomain.com]: gitlab-demo
Enter tags for the runner (comma-separated):
gitlab-demo-shell
Registering runner... succeeded                     runner=6D5mo8iW
Enter an executor: docker, docker-ssh, shell, docker+machine, custom, parallels, ssh, virtualbox, docker-ssh+machine, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 
```

这次的执行器是shell。

![在这里插入图片描述](https://img-blog.csdnimg.cn/9756f2cbe01a4007ae0def9ee277d403.png)

登陆gitlab查看runner的列表，多出一个runner ![在这里插入图片描述](https://img-blog.csdnimg.cn/fd208ec809c841aba064067dd9d56057.png) 查看`runner`配置

```bash
$ docker exec -ti gitlab-runner bash
$ cat /etc/gitlab-runner/config.toml 
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = ""
  url = ""
  token = ""
  executor = ""

[[runners]]
  name = "demo"
  url = "http://gitlab.example.com:8081/"
  token = "PF41kT9ZV_1DoT6VzcCu"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "ubuntu:20.04"
    dns = ["8.8.8.8", "1.1.1.1"]
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    extra_hosts = ["gitlab.example.com:192.168.211.70"]
    shm_size = 0

[[runners]]
  name = "gitlab-demo"
  url = "http://gitlab.example.com:8081"
  token = "TX1s_ZQ1RnNj5xaVW-y9"
  executor = "shell"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
```

关于一个项目我们通过多次注册编排，选择不同执行器编排`.gitlab-ci.yml`,比如，你可能需要这个应用暂时本地运行，后来docker运行，再后来kubernets运行等等。

### 5. 注意

不同的项目向runner注册的token是不一样的。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/278c067b20a44a53a6162d3125b74ccd.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/c6f01e1fbfac4906a8f16681392cb103.png) 我们可以在根据自己的业务应用需求在多个机器运行多个`gitlab-runner`。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ghostwritten.gitbook.io/git-in-action/gitlab/2_gitlab_runner_deploy.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
