搭建 Docker Compose+GitLab+Jenkins+K8S 全流程

阅读时长 9 分钟读完

前言

在前端项目中,我们往往需要进行代码管理、自动构建、自动化测试和部署等操作,而这些操作需要协同完成。为了方便管理和协作,我们可以搭建一个完整的自动化流程。本文将介绍如何搭建 Docker Compose+GitLab+Jenkins+K8S 全流程,希望能对想要搭建类似流程的前端开发人员有所帮助。

准备工作

在开始搭建之前,我们需要准备以下工作环境:

  • Docker CE
  • Docker Compose
  • GitLab
  • Jenkins
  • Kubernetes

一、搭建 GitLab

安装 GitLab

使用 Docker Compose 安装 GitLab 是比较流行的方法。我们可以在 GitHub 找到一个 GitLab Docker Compose 配置文件,将其下载到本地。

-- -------------------- ---- -------
-------- -----
---------
  ----
    ------ -------------------------
    -------- ------
    --------- --------------------
    ------------
      ---------------------- -
        ------------ ----------------------------
        ------------------------------------- - ----
    ------
      - -------
      - ---------
      - ---------
    --------
      - ---------------------------------
      - ---------------------------------
      - ------------------------------------
展开代码

解释一下上述 yaml 文件中的内容:

  • image:指定 GitLab 镜像版本。
  • hostname:指定主机名。
  • environment:设置 GitLab 的配置信息。
  • ports:映射容器端口到主机端口,方便我们通过浏览器访问 GitLab。
  • volumes:持久化 GitLab 的数据,包括配置、日志、数据库等。

运行以下命令启动 GitLab 容器:

配置 GitLab

启动 GitLab 容器后,浏览器访问 http://localhost (如果将主机名指定为了其他域名,则按照指定的域名访问)。第一次访问时,GitLab 会要求我们设置管理员账户的用户名和密码。设置完成后,我们可以登录到 GitLab 并配置项目仓库。

配置项目仓库的过程比较简单,可以参考 GitLab 的官方文档

二、搭建 Jenkins

安装 Jenkins

Jenkins 是一个基于 Java 开发的持续集成和持续交付工具。我们同样可以使用 Docker Compose 安装 Jenkins。在 Docker Hub 上可以找到 Jenkins 镜像,我们需要构建一个 Docker Compose 配置文件来启动 Jenkins 容器。

-- -------------------- ---- -------
-------- -----
---------
  --------
    ------ ---------------------
    -------- ------
    ------
      - -----------
      - -------------
    --------
      - ----------------------------------
    ------------
      - ------------------------------------------------
展开代码

解释一下上述 yaml 文件中的内容:

  • image:指定 Jenkins 镜像版本。
  • ports:映射容器端口到主机端口,Jenkins 通过 8080 端口可以被其他服务访问。
  • volumes:持久化 Jenkins 的数据,包括配置、日志、源代码等。
  • environment:设置 Jenkins 的 Java 环境变量,禁用安装向导。

运行以下命令启动 Jenkins 容器:

配置 Jenkins

在浏览器中访问启动 Jenkins 容器的主机地址,并使用初始密码登录。这个初始密码可以从 Docker 镜像中 /var/jenkins_home/secrets/initialAdminPassword 文件获取。

然后会提示你选择“Install suggested plugins” 或者“Select plugins to install”,建议选择“Install suggested plugins”,这样会自动安装一些常用的插件。

等待插件安装完成后,我们需要创建一个用于构建项目的“Freestyle project”任务。在任务的“配置”页面中,需要填写一些必要的配置信息:

  • 源代码管理器:Git。
  • 项目 URL:填写项目的 GitLab 地址。
  • 选中“GitHub hook trigger for GITScm polling”:允许 GitLab 对 Jenkins 发起 webhook 请求。
  • 执行构建:执行呢 Shell 脚本进行构建。

在配置完成后,我们需要在 GitLab 中配置一个 webhook,允许它向 Jenkins 发送 webhook 请求。在项目的设置页面中有一个“Webhooks”选项,点击它并添加一个新的 webhook。需要填写的是 Jenkins 的 URL,以及选择 Send me everything 进行触发。

三、搭建 K8S 集群

安装 K8S

Kubernetes 是一个领先的开源容器编排平台,可以大规模自动地部署、扩展和管理容器化应用程序。我们可以使用 Kubernetes 集群来自动化地部署和管理我们的应用程序。

Kubernetes 部署比较复杂,可以参考官方文档中的安装手册。安装完 Kubernetes 后,要运行以下命令创建一个 Deployment 和 Service:

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- -----
-----
  --------- -
  ---------
    ------------
      ---- -----
  ---------
    ---------
      -------
        ---- -----
    -----
      -----------
      - ----- -----
        ------ ----------
        ------
        - -------------- --
---
----------- --
----- -------
---------
  ----- -----
-----
  ----- --------
  ------
  - ----- --
    ----------- --
    --------- -----
  ---------
    ---- -----
展开代码

解释以下这个 yaml 文件的内容:

  • apiVersion:K8S API 的版本。
  • kind:要创建的对象类型。
  • metadata:对象的元数据。
  • spec:对于不同的对象类型,它的内容是不同的。
  • replicas:Deployment 的副本数。
  • selector:用于将 Pod 模板与 Deployment 绑定在一起。
  • template:Pod 的模板。
  • name:容器的名称。
  • image:容器所使用的镜像。
  • ports:暴露的端口。
  • type:Service 的类型。
  • nodePort:外部可以使用的端口。

运行以下命令将上述 yaml 文件部署到 Kubernetes 上:

运行以下命令获取部署的 Pod 的 IP 地址:

使用浏览器访问 IP 地址和 NodePort,如果能够看到 Nginx 的欢迎页面,则说明 K8S 集群已经搭建完成了。

四、集成 GitLab 和 Jenkins

要想实现自动化构建和部署,我们需要将 GitLab 和 Jenkins 进行集成。具体的流程是:

  1. 在 GitLab 中设置 Jenkins 的 webhook。
  2. 在 Jenkins 中配置 GitLab 的认证信息。
  3. 设置 Jenkins 中的构建任务。
  4. 配置 Jenkins 中采用 K8S API 进行部署。

1. 在 GitLab 中设置 Jenkins 的 webhook

登录到 GitLab,找到项目仓库的“Settings”->“Integrations”->“Jenkins CI”菜单,填写以下信息:

  • Jenkins 服务器地址:http://jenkins.example.com。
  • Jenkins 项目名称:填写 Jenkins 中的构建任务名称。
  • 提交时触发构建:勾选该选项。

2. 在 Jenkins 中配置 GitLab 的认证信息

登录到 Jenkins,找到“管理”菜单->“Credentials”->“System”->“Global credentials”->“Add Credentials”菜单,填写以下信息:

  • Kind:选择“Username with password”。
  • Scope:选择“Global”。
  • Username:填写 GitLab 的用户名。
  • Password:填写 GitLab 的密码。

3. 设置 Jenkins 中的构建任务

在 Jenkins 中创建一个新的构建任务。在“源代码管理”中设置 GitLab 中的项目地址和认证信息。在“构建触发器”中选择 GitHub hook trigger for GITScm polling 菜单。

我们可以选择采用 shell 脚本进行自动化构建,也可以使用 Dockerfile。

4. 配置 Jenkins 中采用 K8S API 进行部署

在 Jenkins 中安装 Kubernetes 插件,然后在“系统设置”中填写 Kubernetes 的 Server URL(即 API Server 的地址)。在构建任务中可以添加一个“Kubernetes的Pod模板”的步骤,用于定义 Pod 模板的 YAML 文件。

在构建任务中,我们可以添加一个“Kubernetes Apply Configuration File”步骤,用于将 Pod 模板部署到 K8S 上:

至此,一个简单的持续集成和持续交付流程已经搭建完毕了。通过 GitLab 的 webhook 方式触发 Jenkins 进行构建,然后通过 Kubernetes 将构建结果部署到容器环境中。

结语

本文主要介绍了如何使用 Docker Compose 搭建一套完整的自动化构建和部署流程,涉及到的技术有 GitLab、Jenkins 以及 Kubernetes。相信通过阅读本文,读者可以掌握这些技术的使用方法,为自己的项目搭建一个健全的自动化流程。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c2bfea314edc2684c4173f

纠错
反馈

纠错反馈