作者选择了 COVID-19 救援基金作为 Write for Donations计划的一部分接受捐款。
介绍
Continuous Integration/Continuous Deployment (CI/CD)管道是DevOps环境的核心组成部分之一,它们有助于简化多个团队之间的工作流程,提高生产率。
在本教程中,您将安装Jenkins在Kubernetes上,然后访问Jenkins UI并运行样本管道。
如果您正在寻找一个管理的Kubernetes托管服务,请查看我们的简单的,用于增长的管理的Kubernetes服务(https://www.digitalocean.com/products/kubernetes)。
前提条件
要遵循本教程,您将需要:
- 一个运行的 Kubernetes 集群和
kubectl
在您的工作站上设置。 遵循我们的 Kubernetes Quickstart 在 DigitalOcean 上设置一个 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 图像创建 部署,并打开端口 8080
和 50000
. 您使用这些端口访问 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,让我们展示其功能并运行样本管道。
步骤 3 — 运行样本管道
Jenkins 擅长创建管道和管理 CI/CD 工作流程,在此步骤中,我们将构建 Jenkins 样本管道之一。
从 Jenkins 主页,点击左侧菜单上的 新项目 链接。
将出现一个新页面. 选择 管道 并按 ** OK** 。
Jenkins 将重定向您到管道的配置. 查找 管道 部分,并从 ** try sample pipeline** 下载菜单中选择 ** Hello World** . 此菜单出现在右侧。
Jenkins将重定向您到管道首页.从左侧菜单中点击 build now ,然后观看管道开始运行. ** # 1** 表示这是第一个构建。
您还可以检查控制台输出,以查看管道运行时发生了什么情况。 跳过 # 1 ,将出现下载菜单。
您的 Hello World 管道并不太复杂,但它确实展示了 Jenkins 如何创建和管理 CI/CD 工作流程。
结论
在本教程中,你在Kubernetes集群上安装和配置了Jenkins,然后运行了一个样本管道。Jenkins有一个庞大的插件存储库,可以帮助你执行非常复杂的操作。你还可以添加你的GitHub存储库,多种类型的工人实例等。