DevOps是现代开发的重要组成部分。在Kubernetes上进行CI / CD处理是Kubernetes上的重要任务之一。在本教程中,您将学习如何使用Jenkins在Kubernetes上部署应用程序。以下是在本教程结束时我们将完成的工作的流程。
先决条件
- Kubernetes集群
- 用于安装Docker和Jenkins的Ubuntu计算机
- 一个与Kubernetes集群连接的Ubuntu计算机
- 具备CI / CD和Jenkins的基础知识
安装 Jenkins 和 Docker
要安装Jenkins,您可以预配一台新的Ubuntu计算机,也可以将其安装在访问Kubernetes群集的同一台计算机上。无论如何,以下是在Ubuntu机器上安装Jenkins的命令:
sudo apt update
sudo apt install openjdk-8-jdk
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins
安装Jenkins后,请启动并启用它,以便在服务器重新启动时自动启动。
systemctl start jenkins
systemctl enable jenkins
systemctl status jenkins
Jenkins在端口8080上运行。通过运行以下命令打开该端口:
sudo ufw allow 8080
现在,转到您选择的任何浏览器,然后输入http://<ip-address-of-jenkins-machine>:8080
。您应该看到以下内容。
现在,粘贴通过运行以下命令将获得的密码:
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
选择“安装建议的插件”。
您应该在下面的屏幕截图中看到它,可能需要几分钟。
此后,系统将提示您设置管理员用户。填写所需的详细信息,然后单击“保存并完成”。您已经成功安装了Jenkins。
创建一个Jenkins 用户
安装 Docker
运行以下命令以在您的环境中安装docker。我们需要docker,以便Jenkins可以使用它来构建镜像并将其推送到您的docker注册表。
sudo apt-get update
sudo apt-get install
apt-transport-https
ca-certificates
curl
gnupg-agent
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu
$(lsb_release -cs)
stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
运行以下命令检查Docker的状态。它应该处于活动和运行状态。
sudo systemctl status docker
在此期间,我们将jenkins添加到docker组,以便它具有与docker服务器交互的适当权限。
sudo usermod -aG docker jenkins
生成个人访问令牌
需要个人访问令牌才能对GitHub进行身份验证。您可以创建个人访问令牌,并在命令行或API上使用Git通过HTTPS执行Git操作时代替密码来使用它。转到设置,然后单击左侧的开发人员设置。
单击个人访问令牌,然后生成新令牌。
提供令牌描述,并选择admin:repo_hook作为范围,然后单击“生成令牌”。
您将获得如下所示的令牌。将其复制到安全的地方,因为您将无法再次看到它。
For Github 仓库
转到此存储库:https://github.com/SamPriyadarshi/cicd-pipeline-train-schedule-autodeploy
并将此存储库派生到您自己的github帐户。该存储库包含示例应用程序和设置管道所需的文件。该存储库包含一个使用Node.js制作的非常简单的火车时刻表应用程序。
让我们简要看一下应用清单文件。如果您要转到此URL,则会找到yaml文件。它包括:
- 在端口8080上公开的LoadBalancer类型的服务。
- 具有两个副本的部署,该副本指定了一个在端口8080上公开并请求200m vCPU的容器。
了解有关请求和限制的更多信息。 让我们看一下Jenkins文件,其中包含CI / CD管道应如何工作的详细信息。转到此URL查看Jenkinsfile。我们在Jenkinsfile中定义了总共4个阶段:
- 构建阶段:在这个阶段中,我们只是做一堆简单的测试。
- 构建Docker镜像:在此阶段,我们正在构建应用程序的Docker镜像。
- 推送Docker镜像:在此阶段,我们将在上一阶段构建的Docker镜像推送到Docker Hub注册表。您将需要您的Docker Hub凭据才能执行此操作,我们将在下一部分中对其进行配置。
- 部署到Kubernetes集群:在此阶段,我们将应用程序部署在Kubernetes集群中。您将需要kubeconfig文件来部署应用程序。我们将在下一部分中对其进行配置。
注意:请确保将DOCKER_IMAGE_NAME从sampriyadarshi / train-schedule更改为<YOUR-DOCKER-USERNAME> / train-schedule。否则,您的构建将失败。
配置 Jenkins Pipeline
现在让我们继续配置Jenkins,以便我们可以设置CI / CD管道。
首先,通过单击右侧的Manage Jenkins,然后单击Manage Plugins安装Kubernetes插件。
转到顶部的“可用”标签。在搜索框中输入kubernetes,您应该会看到Kubernetes Continuous Deploy的插件。单击复选框,然后单击不重新启动即可安装。等待它安装。
安装完插件后,我们现在添加一些凭据以对Docker Hub,Github和Kubernetes API Server进行身份验证。
Docker Hub:单击左侧的Credentials,然后单击Jenkins,然后单击Global Credentials(不受限制),最后单击Add Credentails。提供您的Docker Hub登录凭证,如下图所示。
Github用户名和密码:再次单击Add Credentails并提供您的Github凭据,如以下屏幕截图所示:
Kubeconfig:再次单击Add Credentails添加您的kubeconfig详细信息。转到用于连接到Kubernetes集群的服务器,然后运行以下命令以获取负责向Kubernetes API服务器进行身份验证的kubeconfig内容。复制内容并将其粘贴到内容部分,如下面的屏幕快照所示。
cat ~/.kube/config
现在让Jenkins访问我们的Github,以便它可以管理钩子。我们将使用之前生成的个人访问令牌。
单击管理Jenkins,然后单击配置系统。
向下滚动到Github部分,然后单击Add Github Server,然后从下拉列表中选择Github Server。
单击添加,然后从下拉列表中选择Jenkins。
在“种类”中,从下拉列表中选择“秘密”文本,然后将您在上方的“个人访问令牌”粘贴到“秘密”部分。在ID中输入您的github用户名。请参阅下面的屏幕截图。
在凭据中,选择您刚刚配置的凭据。并确保选中“管理挂钩”部分。
现在向下滚动到Global Pipeline Libraries,并进行以下配置,如屏幕快照所示。选择名称为jenkins-shared-library。检索方法与现代单片机。源代码管理为Github。选择Github API密钥作为凭据,并在所有者中提供用户名,然后选择包含代码的存储库。
点击保存。您完成了。
现在,我们进入拼图的最后一步。创造新工作。
单击新项目。
输入项目名称,然后选择“多分支管道”,然后单击“确定”。
单击添加源,然后选择Github,然后将自动出现一个下拉列表,列出您的所有存储库。选择上面您分叉的那个。
之后,单击“保存”,您应该在Jenkins仪表板中看到一个项目。
单击该作业,然后选择主分支。您应该看到正在进行的构建,如下所示。
并且在一段时间内它将成功。而且,如果单击“控制台输出”,则应该看到所有日志。
如果向下滚动到末尾,则将显示成功状态。
通过运行以下命令,列出集群中所有正在运行的Pod和服务:
kubectl get pods
kubectl get svc
您应该看到2个Pod正在运行,并且Service类型为LoadBalancer。
如果您在端口8080上单击LoadBalancer,例如:-<LoadBalancerIPorDNS>:8080。您应该看到您的应用程序已启动并正在运行。
如果要再次测试,只需更改app.js中的内容,Jenkins便会自动构建,并通过此新更改启动并运行您的应用程序。
恭喜你!您已经了解了如何使用Kubernetes和Jenkins配置CI / CD管道。
PS: 本文属于翻译,原文