如何在 Kubernetes 上安装 Jenkins

作者选择了 COVID-19 救援基金作为 Write for Donations计划的一部分接受捐款。

介绍

Continuous Integration/Continuous Deployment (CI/CD)管道是DevOps环境的核心组成部分之一,它们有助于简化多个团队之间的工作流程,提高生产率。

在本教程中,您将安装Jenkins在Kubernetes上,然后访问Jenkins UI并运行样本管道。

如果您正在寻找一个管理的Kubernetes托管服务,请查看我们的简单的,用于增长的管理的Kubernetes服务(https://www.digitalocean.com/products/kubernetes)。

前提条件

要遵循本教程,您将需要:

步骤 1 — 在 Kubernetes 上安装 Jenkins

Kubernetes 具有宣言 API,您可以使用 YAML 或 JSON 文件传输所需状态。 对于本教程,您将使用 YAML 文件来部署 Jenkins。

首先,使用「kubectl」来创建 Jenkins namespace:

1kubectl create namespace jenkins

接下来,创建将部署Jenkins的YAML文件。

使用nano或您喜爱的编辑器创建并打开名为jenkins.yaml的新文件:

1nano jenkins.yaml

现在添加以下代码来定义Jenkins图像、其端口以及其他几种配置:

 1[label jenkins.yaml]
 2apiVersion: apps/v1
 3kind: Deployment
 4metadata:
 5  name: jenkins
 6spec:
 7  replicas: 1
 8  selector:
 9    matchLabels:
10      app: jenkins
11  template:
12    metadata:
13      labels:
14        app: jenkins
15    spec:
16      containers:
17      - name: jenkins
18        image: jenkins/jenkins:lts
19        ports:
20          - name: http-port
21            containerPort: 8080
22          - name: jnlp-port
23            containerPort: 50000
24        volumeMounts:
25          - name: jenkins-vol
26            mountPath: /var/jenkins_vol
27      volumes:
28        - name: jenkins-vol
29          emptyDir: {}

此 YAML 文件使用 Jenkins LTS 图像创建 部署,并打开端口 808050000. 您使用这些端口访问 Jenkins 并接受 Jenkins 员工的连接。

现在在jenkins名称空间中创建此部署:

1kubectl create -f jenkins.yaml --namespace jenkins

给群集几分钟的时间来拉动Jenkins的图像,并让Jenkinspod运行。

使用kubectl来验证pod的状态:

1kubectl get pods -n jenkins

你会得到这样的输出:

1NAME READY STATUS RESTARTS AGE
2jenkins-6fb994cfc5-twnvn 1/1 Running 0 95s

请注意,pod的名称将在您的环境中有所不同。

一旦 Pod 运行,您需要 使用服务暴露它。 您将使用 NodePort 服务类型为本教程。

创建并打开名为 `jenkins-service.yaml’的新文件:

1nano jenkins-service.yaml

添加以下代码来定义 NodePort 服务:

 1[label jenkins-service.yaml]
 2apiVersion: v1
 3kind: Service
 4metadata:
 5  name: jenkins
 6spec:
 7  type: NodePort
 8  ports:
 9    - port: 8080
10      targetPort: 8080
11      nodePort: 30000
12  selector:
13    app: jenkins
14
15---
16
17apiVersion: v1
18kind: Service
19metadata:
20  name: jenkins-jnlp
21spec:
22  type: ClusterIP
23  ports:
24    - port: 50000
25      targetPort: 50000
26  selector:
27    app: jenkins

在上面的YAML文件中,您定义您的NodePort服务,然后将Jenkins pod的端口8080曝光到端口30000

现在在相同的名称空间中创建服务:

1kubectl create -f jenkins-service.yaml --namespace jenkins

检查服务是否在运行:

1kubectl get services --namespace jenkins

你会得到这样的输出:

1[secondary_label Output]
2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)          AGE
3jenkins 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:

1kubectl get nodes -o wide

kubectl 将与您的外部 IP 产生一个输出:

1[secondary_label Output]
2NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
3your_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
4your_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
5your_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名称:

1kubectl get pods -n jenkins

你会得到这样的输出:

1NAME READY STATUS RESTARTS AGE
2jenkins-6fb994cfc5-twnvn 1/1 Running 0 9m54s

接下来,检查Pod的日志以获取管理员密码. 用你的pod名更换突出的部分:

1kubectl logs jenkins-6fb994cfc5-twnvn -n jenkins

您可能需要向上或向下滚动以找到密码:

 1Running from: /usr/share/jenkins/jenkins.war
 2webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
 3. . .
 4
 5Jenkins initial setup is required. An admin user has been created and a password generated.
 6Please use the following password to proceed to installation:
 7
 8your_jenkins_password
 9
10This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
11. . .

复制 your_jenkins_password. 现在回到您的浏览器并粘贴到Jenkins UI中。

一旦您输入密码,Jenkins会提示您安装插件. 因为您没有做任何不寻常的事情,请选择 安装建议的插件

安装后,Jenkins将加载一个新页面,并要求您创建一个管理员用户。填写这些字段,或者通过按 skip 并继续作为 admin 链接来跳过此步骤。

会出现另一个屏幕,询问实例配置. 点击 Not now 链接并继续。

此后,Jenkins 将创建您选择的摘要,并打印 Jenkins 已准备好! 点击 ** 开始使用 Jenkins** 并显示 Jenkins 主页。

jenkins wizard

现在你已经在你的集群上安装和配置了Jenkins,让我们展示其功能并运行样本管道。

步骤 3 — 运行样本管道

Jenkins 擅长创建管道和管理 CI/CD 工作流程,在此步骤中,我们将构建 Jenkins 样本管道之一。

从 Jenkins 主页,点击左侧菜单上的 新项目 链接。

将出现一个新页面. 选择 管道 并按 ** OK** 。

jenkins wizard

Jenkins 将重定向您到管道的配置. 查找 管道 部分,并从 ** try sample pipeline** 下载菜单中选择 ** Hello World** . 此菜单出现在右侧。

jenkins wizard

Jenkins将重定向您到管道首页.从左侧菜单中点击 build now ,然后观看管道开始运行. ** # 1** 表示这是第一个构建。

jenkins wizard

您还可以检查控制台输出,以查看管道运行时发生了什么情况。 跳过 # 1 ,将出现下载菜单。

您的 Hello World 管道并不太复杂,但它确实展示了 Jenkins 如何创建和管理 CI/CD 工作流程。

结论

在本教程中,你在Kubernetes集群上安装和配置了Jenkins,然后运行了一个样本管道。Jenkins有一个庞大的插件存储库,可以帮助你执行非常复杂的操作。你还可以添加你的GitHub存储库,多种类型的工人实例等。

Published At
Categories with 技术
Tagged with
comments powered by Disqus