type
Post
status
Published
date
Aug 14, 2023
slug
summary
tags
开发
建站
环境配置
DevOps
category
技术基本功
icon
password
Property
Aug 18, 2023 10:07 AM
GitLab 是一个开源的 Git 服务器。
同时集成了 GitLab CI/CD,几乎兼顾了 DevOps 的整个流程。
而且可以使用 Docker 快速部署,非常方便。
部署 GitLabGitLab CI/CD.gitlab-ci.yml 详解Stages 定义Variables 定义Build 阶段Deploy 阶段GitLab Runner注册GitLab Runner时的executor应该怎么选?
部署 GitLab
使用 Docker 部署 GitLab 并设置主机名(Host)通常涉及以下几个步骤:
- 选择或创建一个 Docker Compose 文件:你可以使用 Docker Compose 来定义和运行 GitLab 的容器。以下是一个示例的
docker-compose.yml
文件,用于部署 GitLab:
version: '3' services: gitlab: image: 'gitlab/gitlab-ce:latest' container_name: gitlab hostname: 'gitlab.example.com' # 设置主机名 environment: GITLAB_OMNIBUS_CONFIG: | external_url '<http://gitlab.example.com>' # 设置主机名 gitlab_rails['initial_root_password'] = "your-password-here" gitlab_rails['initial_root_email'] = "[email protected]" ports: - '80:80' - '443:443' - '22:22' volumes: - './gitlab/config:/etc/gitlab' - './gitlab/logs:/var/log/gitlab' - './gitlab/data:/var/opt/gitlab'
在这个示例中,
hostname
和 external_url
用于设置 GitLab 的主机名。你应该将其替换为你自己的域名。一定要设置,不然GitLab上的某些功能页面的URL会指向gitlab.example.com/xxx。- 配置 DNS:你需要确保你的域名解析到运行 GitLab 容器的服务器的 IP 地址。这通常涉及在你的 DNS 提供商的控制面板中创建一个 A 记录。
- 启动容器:在包含
docker-compose.yml
文件的目录中运行以下命令来启动 GitLab 容器:
docker-compose up -d
- 配置反向代理(可选):如果你想在 HTTPS 上提供 GitLab,并且/或者在同一台服务器上运行其他 web 服务,你可能还需要配置一个反向代理,例如 Nginx 或 Apache。这将允许你为 GitLab 设置 SSL 证书,并将流量路由到正确的容器。
- 配置防火墙(可选):确保你的服务器防火墙允许通过 HTTP(端口 80)、HTTPS(端口 443)和 SSH(端口 22,如果你想通过 SSH 使用 Git)的流量。
请注意,这只是一个基本示例,根据你的具体需求和环境,可能还需要进行其他配置。在生产环境中部署 GitLab 时,务必参考 GitLab 的官方文档,以确保你的部署安全、可扩展且符合最佳实践。
GitLab CI/CD
GitLab CI/CD 的配置需要配置
.gitlab-ci.yml
和 GitLab Runner
GitLab Runner 就是CI的虚拟运行环境。
.gitlab-ci.yml
就是描述和定义CI/CD的具体行为。.gitlab-ci.yml 详解
一个例子:
stages: - build - deploy variables: IMAGE_NAME: my-django-app IMAGE_TAG: latest build: stage: build script: - docker build -t $IMAGE_NAME:$IMAGE_TAG . - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker tag $IMAGE_NAME:$IMAGE_TAG $CI_REGISTRY_IMAGE:$IMAGE_TAG - docker push $CI_REGISTRY_IMAGE:$IMAGE_TAG deploy: stage: deploy script: - ssh $DEPLOY_SERVER_USER@$DEPLOY_SERVER "docker pull $CI_REGISTRY_IMAGE:$IMAGE_TAG" - ssh $DEPLOY_SERVER_USER@$DEPLOY_SERVER "docker-compose -f /path/to/docker-compose.yml up -d"
这个文件定义了 GitLab CI/CD 的流程,用于构建和部署 Docker 镜像。
Stages 定义
stages: - build - deploy
stages:
:定义了流水线的阶段。流水线中的任务将按照这些阶段的顺序执行。
build
:第一个阶段,用于构建 Docker 镜像。
deploy
:第二个阶段,用于部署 Docker 镜像。
Variables 定义
variables: IMAGE_NAME: my-django-app IMAGE_TAG: latest
在
.gitlab-ci.yml
文件中,变量是通过 variables
关键字定义的。这些变量可以在整个 CI/CD 流水线中使用。variables:
:这一行开始定义变量的部分。
IMAGE_NAME: my-django-app
:定义了一个名为IMAGE_NAME
的变量,并将其值设置为my-django-app
。这个变量用于指定 Docker 镜像的名称。
IMAGE_TAG: latest
:定义了一个名为IMAGE_TAG
的变量,并将其值设置为latest
。这个变量用于指定 Docker 镜像的标签。
这些变量可以在流水线的任何地方通过
$变量名
的形式引用。例如,在构建 Docker 镜像时,可以使用 $IMAGE_NAME
和 $IMAGE_TAG
来引用这些变量的值。除了在
variables
部分定义的变量外,GitLab CI/CD 还提供了一些预定义的变量,如 $CI_REGISTRY_USER
、$CI_REGISTRY_PASSWORD
和 $CI_REGISTRY
。这些变量通常由 GitLab 自动设置,并可以用于与 GitLab Docker 注册表进行交互。在你提供的文件中,这些变量用于 Docker 登录和推送镜像的操作。Build 阶段
build: stage: build script: - docker build -t $IMAGE_NAME:$IMAGE_TAG . - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker tag $IMAGE_NAME:$IMAGE_TAG $CI_REGISTRY_IMAGE:$IMAGE_TAG - docker push $CI_REGISTRY_IMAGE:$IMAGE_TAG
build:
:定义了名为 "build" 的任务。
stage: build
:指定该任务属于 "build" 阶段。
script:
:定义了任务中要执行的命令。docker build -t $IMAGE_NAME:$IMAGE_TAG .
:构建 Docker 镜像,并使用之前定义的名称和标签。docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
:使用 GitLab CI 提供的凭证登录 Docker 注册表。docker tag $IMAGE_NAME:$IMAGE_TAG $CI_REGISTRY_IMAGE:$IMAGE_TAG
:标记 Docker 镜像,以便将其推送到注册表。docker push $CI_REGISTRY_IMAGE:$IMAGE_TAG
:将标记的镜像推送到 Docker 注册表。
Deploy 阶段
deploy: stage: deploy script: - ssh $DEPLOY_SERVER_USER@$DEPLOY_SERVER "docker pull $CI_REGISTRY_IMAGE:$IMAGE_TAG" - ssh $DEPLOY_SERVER_USER@$DEPLOY_SERVER "docker-compose -f /path/to/docker-compose.yml up -d"
deploy:
:定义了名为 "deploy" 的任务。
stage: deploy
:指定该任务属于 "deploy" 阶段。
script:
:定义了任务中要执行的命令。ssh $DEPLOY_SERVER_USER@$DEPLOY_SERVER "docker pull $CI_REGISTRY_IMAGE:$IMAGE_TAG"
:通过 SSH 连接到部署服务器,并从 Docker 注册表拉取镜像。ssh $DEPLOY_SERVER_USER@$DEPLOY_SERVER "docker-compose -f /path/to/docker-compose.yml up -d"
:通过 SSH 连接到部署服务器,并使用docker-compose
命令启动服务。
总的来说,这个
.gitlab-ci.yml
文件定义了一个简单的 CI/CD 流程,用于构建 Docker 镜像并将其部署到远程服务器。GitLab Runner
在GitLab的CI/CD设置里添加Runner,然后注册。
Runner 要注意 Tag,对应Tag的Runner只能分配给对应Tag的任务,除非这个Runner可以指派给无Tag的任务。
sudo docker pull gitlab/gitlab-runner:latest sudo docker run -d \ --name gitlab-runner \ --network gitlab-network \ --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest
注册GitLab Runner时的executor应该怎么选?
GitLab Runner 的执行器(executor)决定了如何运行 CI/CD 作业。选择哪个执行器取决于你的具体需求和环境。以下是一些常用执行器的概述:
- shell:在 Runner 主机上直接运行脚本。这是最简单的执行器,但可能会导致安全和隔离问题。
- docker:在 Docker 容器中运行作业。这提供了良好的隔离,并允许你为每个作业指定一个 Docker 镜像。如果你已经在使用 Docker,并希望每个作业都在干净的环境中运行,这可能是一个好选择。
- kubernetes:在 Kubernetes 集群中运行作业。如果你已经使用 Kubernetes,这可能是一个强大的选项。
- ssh:通过 SSH 在远程服务器上运行作业。这允许你在特定的远程机器上运行作业。
- virtualbox、parallels:在 VirtualBox 或 Parallels 虚拟机中运行作业。这提供了更强的隔离,但可能更复杂和资源密集型。
- docker+machine:使用 Docker Machine 创建和管理 Docker 主机。这允许 Runner 在需要时动态创建和销毁虚拟机。
- custom:允许你定义自己的执行器。这是一个高级选项,需要你完全理解你的需求和环境。
- instance、docker-autoscaler、docker-windows:这些是特定用例或环境的执行器。
通常,如果你已经在使用 Docker,并且希望利用容器的隔离和可重复性,那么 docker 执行器可能是一个很好的选择。如果你在使用 Kubernetes,那么 kubernetes 执行器可能更合适。
选择执行器时,请考虑你的安全、隔离、可扩展性和维护需求。你还可以参考 GitLab Runner 执行器的官方文档,了解每个执行器的详细信息和最佳实践。
使用清华源部署GitLab Runner
- Author:无常 Anitya
- URL:https://anitya.fun/article/da15e162-8109-4781-bac1-c474c9a54487
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts