前言
在前端项目中,我们往往需要进行代码管理、自动构建、自动化测试和部署等操作,而这些操作需要协同完成。为了方便管理和协作,我们可以搭建一个完整的自动化流程。本文将介绍如何搭建 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 容器:
docker-compose up -d
配置 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 容器:
docker-compose up -d
配置 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 上:
kubectl apply -f deployment.yaml
运行以下命令获取部署的 Pod 的 IP 地址:
kubectl get pods -o wide
使用浏览器访问 IP 地址和 NodePort,如果能够看到 Nginx 的欢迎页面,则说明 K8S 集群已经搭建完成了。
四、集成 GitLab 和 Jenkins
要想实现自动化构建和部署,我们需要将 GitLab 和 Jenkins 进行集成。具体的流程是:
- 在 GitLab 中设置 Jenkins 的 webhook。
- 在 Jenkins 中配置 GitLab 的认证信息。
- 设置 Jenkins 中的构建任务。
- 配置 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 上:
kubectl apply -f nginx-pod-template.yaml
至此,一个简单的持续集成和持续交付流程已经搭建完毕了。通过 GitLab 的 webhook 方式触发 Jenkins 进行构建,然后通过 Kubernetes 将构建结果部署到容器环境中。
结语
本文主要介绍了如何使用 Docker Compose 搭建一套完整的自动化构建和部署流程,涉及到的技术有 GitLab、Jenkins 以及 Kubernetes。相信通过阅读本文,读者可以掌握这些技术的使用方法,为自己的项目搭建一个健全的自动化流程。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c2bfea314edc2684c4173f