作者选择了 COVID-19 Relief Fund 作为 Write for DOnations 计划的一部分来接受捐赠。
介绍
持续集成/持续部署 (CI/CD) 管道是 DevOps 环境的核心组件之一。 它们有助于简化多个团队之间的工作流程并提高生产力。 Jenkins 是一个广泛使用的开源自动化服务器,可以设置 CI/CD 管道。
在本教程中,您将在 Kubernetes 上安装 Jenkins。 然后,您将访问 Jenkins UI 并运行示例管道。
先决条件
要遵循本教程,您将需要:
- 在您的工作站上设置了一个工作的 Kubernetes 集群和
kubectl
。 按照我们的 Kubernetes 快速入门 在 DigitalOcean 上设置 Kubernetes 集群。
第 1 步 — 在 Kubernetes 上安装 Jenkins
Kubernetes 有一个声明式 API,您可以使用 YAML 或 JSON 文件 传达所需的状态。 在本教程中,您将使用 YAML 文件来部署 Jenkins。 确保您已为集群配置了 kubectl
命令。
首先,使用 kubectl
创建 Jenkins 命名空间:
kubectl create namespace jenkins
接下来,创建将部署 Jenkins 的 YAML 文件。
使用 nano
或您喜欢的编辑器创建并打开一个名为 jenkins.yaml
的新文件:
nano jenkins.yaml
现在添加以下代码来定义 Jenkins 镜像、它的端口和更多配置:
詹金斯.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: jenkins spec: replicas: 1 selector: matchLabels: app: jenkins template: metadata: labels: app: jenkins spec: containers: - name: jenkins image: jenkins/jenkins:lts ports: - name: http-port containerPort: 8080 - name: jnlp-port containerPort: 50000 volumeMounts: - name: jenkins-vol mountPath: /var/jenkins_vol volumes: - name: jenkins-vol emptyDir: {}
此 YAML 文件使用 Jenkins LTS 映像 创建一个 部署 ,并打开端口 8080
和 50000
。 您可以使用这些端口访问 Jenkins 并分别接受来自 Jenkins 工作人员的连接。
现在在 jenkins
命名空间中创建这个部署:
kubectl create -f jenkins.yaml --namespace jenkins
给集群几分钟时间来拉取 Jenkins 映像并让 Jenkins pod 运行。
使用 kubectl
验证 pod 的状态:
kubectl get pods -n jenkins
您将收到如下输出:
NAME READY STATUS RESTARTS AGE jenkins-6fb994cfc5-twnvn 1/1 Running 0 95s
请注意,您的环境中的 pod 名称会有所不同。
pod 运行后,您需要使用 Service [1] 公开它。 您将在本教程中使用 NodePort 服务类型 。 此外,您将为工作人员创建一个 ClusterIP 类型的服务以连接到 Jenkins。
创建并打开一个名为 jenkins-service.yaml
的新文件:
nano jenkins-service.yaml
添加以下代码以定义 NodePort 服务:
詹金斯-service.yaml
apiVersion: v1 kind: Service metadata: name: jenkins spec: type: NodePort ports: - port: 8080 targetPort: 8080 nodePort: 30000 selector: app: jenkins --- apiVersion: v1 kind: Service metadata: name: jenkins-jnlp spec: type: ClusterIP ports: - port: 50000 targetPort: 50000 selector: app: jenkins
在上面的 YAML 文件中,您定义了 NodePort 服务,然后将 Jenkins pod 的端口 8080
暴露给端口 30000
。
现在在同一个命名空间中创建服务:
kubectl create -f jenkins-service.yaml --namespace jenkins
检查服务是否正在运行:
kubectl get services --namespace jenkins
您将收到如下输出:
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE jenkins NodePort your_cluster_ip <none> 8080:30000/TCP 15d
使用 NodePort 和 Jenkins,您就可以访问 Jenkins UI 并开始探索它了。
第 2 步 - 访问 Jenkins UI
在此步骤中,您将访问和探索 Jenkins UI。 您的 NodePort 服务可通过集群节点的端口 30000
访问。 您需要检索节点 IP 才能访问 Jenkins UI。
使用 kubectl
检索您的节点 IP:
kubectl get nodes -o wide
kubectl
将使用您的外部 IP 生成输出:
OutputNAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME your_node Ready <none> 16d v1.18.8 your_internal_ip your_external_ip Debian GNU/Linux 10 (buster) 4.19.0-10-cloud-amd64 docker://18.9.9 your_node Ready <none> 16d v1.18.8 your_internal_ip your_external_ip Debian GNU/Linux 10 (buster) 4.19.0-10-cloud-amd64 docker://18.9.9 your_node Ready <none> 16d v1.18.8 your_internal_ip your_external_ip Debian GNU/Linux 10 (buster) 4.19.0-10-cloud-amd64 docker://18.9.9
复制 your_external_ip
值之一。
现在打开网络浏览器并导航到 http://your_external_ip:30000
。
将出现一个页面,询问管理员密码和从 Jenkins Pod 日志中检索此密码的说明。
让我们使用 kubectl
从这些日志中提取密码。
首先,返回您的终端并检索您的 Pod 名称:
kubectl get pods -n jenkins
您将收到如下输出:
NAME READY STATUS RESTARTS AGE jenkins-6fb994cfc5-twnvn 1/1 Running 0 9m54s
接下来,检查 Pod 的日志以获取管理员密码。 将突出显示的部分替换为您的 pod 名称:
kubectl logs jenkins-6fb994cfc5-twnvn -n jenkins
您可能需要向上或向下滚动才能找到密码:
Running from: /usr/share/jenkins/jenkins.war webroot: EnvVars.masterEnvVars.get("JENKINS_HOME") . . . Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: your_jenkins_password This may also be found at: /var/jenkins_home/secrets/initialAdminPassword . . .
复制 your_jenkins_password
。 现在返回浏览器并将其粘贴到 Jenkins UI 中。
输入密码后,Jenkins 会提示您安装插件。 因为你没有做任何不寻常的事情,所以选择安装建议的插件。
安装后,Jenkins 将加载一个新页面并要求您创建一个管理员用户。 填写字段,或按 skip and continue as admin 链接跳过此步骤。 这将使您的用户名保留为 admin,密码保留为 your_jenkins_password
。
将出现另一个屏幕,询问实例配置。 单击 Not now 链接并继续。
之后,Jenkins 会创建一个你选择的摘要并打印 Jenkins is ready! 点击 start using Jenkins 会出现 Jenkins 主页。
现在您已经在集群上安装和配置了 Jenkins,让我们展示它的功能并运行一个示例管道。
第 3 步 — 运行示例管道
Jenkins 擅长创建管道和管理 CI/CD 工作流。 在这一步中,我们将构建 Jenkins 的示例管道之一。
在 Jenkins 主页,点击左侧菜单中的 New item 链接。
将出现一个新页面。 选择 Pipeline 并按 OK。
Jenkins 会将您重定向到管道的配置。 找到 Pipeline 部分,然后从 try sample pipeline 下拉菜单中选择 Hello World。 该菜单出现在右侧。 选择Hello World后,点击保存按钮。
Jenkins 会将您重定向到管道主页。 单击左侧菜单中的 build now 并观察管道开始运行。 #1 表示这是第一次构建。 任务完成后,您将看到有关构建的一些统计信息。
您还可以检查控制台输出以查看管道运行时发生的情况。 将鼠标悬停在 #1 上,将出现一个下拉菜单。 选择 控制台输出 以查看构建的详细信息。
您的 Hello World 管道不是很复杂,但它确实展示了 Jenkins 创建和管理 CI/CD 工作流的能力。
结论
在本教程中,您在 Kubernetes 集群上安装和配置了 Jenkins,然后运行了一个示例管道。 Jenkins 有一个庞大的插件库,可以帮助您执行非常复杂的操作。 您还可以添加 GitHub 存储库、多种类型的工作程序实例等。 要了解有关使用 Jenkins 的更多信息, 浏览 Jenkins 官方文档 。