如何在Kubernetes上安装Jenkins

来自菜鸟教程
跳转至:导航、​搜索

作者选择了 COVID-19 Relief Fund 作为 Write for DOnations 计划的一部分来接受捐赠。

介绍

持续集成/持续部署 (CI/CD) 管道是 DevOps 环境的核心组件之一。 它们有助于简化多个团队之间的工作流程并提高生产力。 Jenkins 是一个广泛使用的开源自动化服务器,可以设置 CI/CD 管道。

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

先决条件

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

第 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 映像 创建一个 部署 ,并打开端口 808050000。 您可以使用这些端口访问 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 官方文档