Jenkins部署

jenkins · 浏览次数 : 1

小编点评

本文介绍了使用Kubernetes和Jenkins进行CI/CD部署的过程。首先创建了服务账户、持久卷声明和部署,然后创建了服务并登录Jenkins。接下来,简化配置了Jenkins,安装了必要插件,并配置了用户和插件下载地址。最后,安装了常用插件,包括Git、SSH、Maven、Node.js、DingTalk、Pipeline、Kubernetes、动态代理和主题Git Parameter等。 1. **创建服务账户**:本文首先创建了一个名为`jenkins-admin`的服务账户,并为其创建了相应的角色绑定。 2. **创建持久卷声明**:接着,创建了一个名为`jenkins`的持久卷声明,以便为Jenkins服务器提供存储空间。 3. **创建部署**:然后,定义了一个名为`jenkins-server`的Deployment,并将其部署到`devops`命名空间。 4. **创建服务**:创建了一个名为`jenkins-svc`的服务,以便通过节点端口暴露Jenkins服务器的8080端口。 5. **登录Jenkins**:最后,通过节点端口映射访问Jenkins,并获取初始密码以完成登录。 6. **简化配置Jenkins**:文章还介绍了如何简化Jenkins的配置,包括安装插件、配置用户、更改插件下载地址以及安装常用插件。 7. **常用插件**:最后,列出了Jenkins的一些常用插件,如Git、SSH、Maven、Node.js、DingTalk、Pipeline、Kubernetes、动态代理和主题Git Parameter等,这些插件对于CI/CD流程的支持至关重要。

正文

Jenkins部署

CI/CD工具

  • jenkins:能做CI,也能做CD 语法 groovy
  • gitlab-ci:执行器叫做gitlab-runner,流水线语法 yaml
  • tekton:CI工具,CNCF,在k8s中运行pod来实现流水线 ,语法 yaml
  • argo-cd:CD工具,在k8s中部署应用,语法:kustomize
  • argo-workflow:CI工具,在k8s中通过运行pod实现流水线,语法:yaml

1. 创建sa

sa就是service account

[root@master ~]# mkdir jenkins
[root@master ~]# cd jenkins
[root@master jenkins]# kubectl create ns devops
[root@master jenkins]# vim jenkins-sa.yaml
namespace/devops created
metadata:
  name: jenkins-admin
rules:
  - apiGroups: [""]
    resources: ["*"]
    verbs: ["*"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins-admin
  namespace: devops
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: jenkins-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: jenkins-admin
subjects:
- kind: ServiceAccount
  name: jenkins-admin
  namespace: devops

一定要先创建devops,如果你想部署在默认的命名空间下也是可以的,那就可以不创建的vops命名空间了

[root@master jenkins]# kubectl apply -f jenkins-sa.yaml 
clusterrole.rbac.authorization.k8s.io/jenkins-admin created
serviceaccount/jenkins-admin created
clusterrolebinding.rbac.authorization.k8s.io/jenkins-admin created

2. 创建pvc

直接创建pvc而没有创建pv是因为我采用的动态制备

[root@master jenkins]# vim jenkins-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins
  namespace: devops
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
      
[root@master jenkins]# kubectl apply -f jenkins-pvc.yaml 

查看一下pvc是否创建好了

[root@master jenkins]# kubectl get pvc -n devops
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
jenkins   Bound    pvc-131cc674-c33a-4d48-9a6a-e562374d4e0c   10Gi        RWO            csi-rbd-sc     7s

如果配置了动态制备而这里还是pending的话看一下sc是否设置为默认

3. 创建deployment

文件内容比较多

vim jenkins-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: jenkins-server
  name: jenkins-server
  namespace: devops
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins-server
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: jenkins-server
    spec:
      volumes:
        - name: jenkins-data
          persistentVolumeClaim:
            claimName: jenkins
      serviceAccountName: jenkins-admin
      containers:
      - image: jenkins/jenkins
        imagePullPolicy: IfNotPresent
        name: jenkins
        securityContext:
          runAsUser: 0
        volumeMounts:
          - name: jenkins-data
            mountPath: /var/jenkins_home
        livenessProbe:
          httpGet:
            path: "/login"
            port: 8080
          initialDelaySeconds: 90
          periodSeconds: 10
          timeoutSeconds: 5
          failureThreshold: 3
        readinessProbe:
          httpGet:
            path: "/login"
            port: 8080
          initialDelaySeconds: 90
          periodSeconds: 10
          timeoutSeconds: 5
          failureThreshold: 3
        ports:
          - name: http
            containerPort: 8080
          - name: tcp
            containerPort: 50000
        resources: 
          limits:
            memory: "2Gi"
            cpu: "1"
          requests:
            memory: "500Mi"
            cpu: "0.5"
status: {}

创建deployment

[root@master jenkins]# kubectl apply -f jenkins-deoloy.yaml 
deployment.apps/jenkins-server created
[root@master jenkins]# kubectl get pods -n devops
NAME                              READY   STATUS             RESTARTS       AGE
jenkins-server-5db58f78dc-jqcqt   0/1     Running            0              34s

这里等待这个pod就绪就好了,因为是java进程,所以启动的有点慢

4. 创建service

[root@master jenkins]# vim jenkins-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: jenkins-svc
  namespace: devops
spec:
  selector:
    app: jenkins-server
  type: NodePort
  ports:
    - name: http
      port: 8080
      targetPort: 8080
      nodePort: 32000
    - name: agent
      port: 50000
      targetPort: 50000
[root@master jenkins]# kubectl apply -f jenkins-svc.yaml 
service/jenkins-svc created

5. 登录jenkins

等待jenkins就绪之后就可以通过nodePort映射出来的32000端口来进行访问了

然后进入容器查看初始密码

[root@master jenkins]# kubectl exec -it -n devops jenkins-server-5db58f78dc-jqcqt -- bash
root@jenkins-server-5db58f78dc-jqcqt:/# cat /var/jenkins_home/secrets/initialAdminPassword

15953b138edd4f68a434c31603455a4e

输出的这一串就是密码了,拿着这个密码去登录

6. 简单配置jenkins

6.1 安装插件

我们登录之后会让我们安装插件,这个时候不要点击安装推荐的插件,因为他推荐的插件非常多,下载起来很慢的

我们现在安装2个插件就好了

  1. 点击无,取消所有默认选中的插件
  2. 安装git和中文插件

找不到可以直接在搜索栏里面去搜

6.2 配置用户

插件装完之后会让你创建第一个管理员用户

6.3 配置插件下载地址

默认插件是从国外下载,速度会有些许慢,我们可以讲下载地址改为国内

如果你的插件管理点进去就报错的话往后看,有解决方法

  1. 点击系统管理
  2. 插件管理
  3. 高级设置
  4. 将updateSite(升级站点)改为清华的源

6.3.1 页面操作

然后往下滑,最下面这里,如果你是英文就是UpdateSite

6.3.2 容器操作

在页面上改完之后还需要到容器内修改一个配置文件

[root@master jenkins]# kubectl exec -it  -n devops jenkins-server-55cfc6dbd8-dmpn8  -- bash 
# 进入jenkins的家目录
root@jenkins-server-55cfc6dbd8-dmpn8:/# cd /var/jenkins_home/updates/
root@jenkins-server-55cfc6dbd8-dmpn8:/var/jenkins_home/updates# ls
default.json  hudson.tasks.Maven.MavenInstaller

修改这个default.json

root@jenkins-server-55cfc6dbd8-dmpn8:/var/jenkins_home/updates# sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

6.3.3 重启jenkins

重启的话直接在url输入restart

等他重启完之后再进去插件管理的页面就可以正常的下载插件了

6.3.4 安装插件

按照自己的场景选择插件,我这里选择

  • git
  • 中文插件
  • kubernetes
  • pipeline

安装完插件之后是需要重启jenkins的,所以建议一次性安装完

6.3.5 常用插件

  • Git 拉取代码

  • SSH SSH 远程执行

  • Publish Over SSH

  • Gitlab gitlab插件

  • Maven 对 Maven 项目构建

  • NodeJs 对 NodeJs 项目构建

  • DingTalk 钉钉通知

  • Pipeline 流水线

  • Kubernetes 动态创建代理

  • simple theme 主题

  • Git Parameter 动态从 git 中获取所有分支

  • Managed Scripts 管理脚本插件

  • Deploy to container 热部署插件

  • Extended Choice Parameter 扩展参数构建

  • Role-based Authorization Strategy 权限管理

  • Localization: Chinese (Simplified) 简体中文

  • ansiColor 设置颜色

  • Conditional BuildStep 在pipeline中使用when

  • HTTP Request Plugin:执行http请求并返回响应体,详细用法: https://www.jenkins.io/doc/pipeline/steps/http_request/

  • Pipeline Utility Steps:pipeline中常用的一些工具集,如压缩与解压缩、创建文件、查找文件等;详细用法: https://www.jenkins.io/doc/pipeline/steps/pipeline-utility-steps/

与Jenkins部署相似的内容:

Jenkins部署

目录Jenkins部署1. 创建sa2. 创建pvc3. 创建deployment4. 创建service5. 登录jenkins6. 简单配置jenkins6.1 安装插件6.2 配置用户6.3 配置插件下载地址6.3.1 页面操作6.3.2 容器操作6.3.3 重启jenkins6.3.4 安装

docker安装jenkins

docker安装jenkins Jenkins部署 1.创建jenkins的工作目录 //创建工作目录 mkdir /var/jenkins_home //赋予权限 chown -R 1000 /var/jenkins_home 1.1 通过docker部署jenkins 拉取镜像 docker p

Jenkins快速入门部署+实践

安装 方法一 Jenkins中文网下载jenkins.war 方法二 直接从http://mirrors.jenkins-ci.org/war/latest/jenkins.war 下载最新的war包,然后解压到某个固定目录就算安装完成了 启动方式 启动方法: java -jar jenkins.w

使用 docker 打包构建部署 Vue 项目,一劳永逸解决node-sass安装问题

> 文章源于 Jenkins 构建 Vue 项目失败,然后就把 node_modules 删了重新构建发现 node-sass 安装不上了,折腾一天终于可以稳定构建了。 > 犹记得从学 node 的第一天,就被 node-sass 折磨了一整天,后面本地没问题了然后服务器开始折磨了,这次又遇到,尝试

记一次aspnetcore发布部署流程初次使用k8s

主题: aspnetcorewebapi项目,提交到gitlab,通过jenkins(gitlab的ci/cd)编译、发布、推送到k8s。 关于gitlab、jenkins、k8s安装,都是使用docker启动服务。 首先新建一个项目,为了方便浏览就把swaggerr非开发环境不展示去掉 下面就是需

企业级环境部署:在 Linux 服务器上如何搭建和部署 Python 环境?

在大部分企业里,自动化测试框架落地都肯定会集成到Jenkins服务器上做持续集成测试,自动构建以及发送结果到邮箱,实现真正的无人值守测试。 不过Jenkins搭建一般都会部署在公司的服务器上,不会在私人电脑里,而服务器大部分都是Linux操作系统的。所以,我们如果要在Linux上的Jenkins服务

Jenkins技术概述与开发实战

本文详细讲解了Jenkins的安装与配置、构建作业、流水线、构建、测试和部署的具体方法,涵盖关键概念、详细步骤及代码示例,旨在帮助专业从业者实现高效的CI/CD自动化流程。 关注作者,复旦博士,分享云服务领域全维度开发技术。拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕博,

Jenkins 简述及其搭建

什么是持续集成? 持续集成(CI)是在软件开发过程中自动化和集成许多团队成员的代码更改和更新的过程。在 CI 中,自动化工具在集成之前确认软件代码是有效且无错误的,这有助于检测错误并加快新版本的发布。 什么是持续交付? 持续交付 (CD) 是指每天多次将新软件投入生产,自动将应用程序交付到基础设施环

Jenkins 基础配置

博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 解决:Jenkins: signature verification failed in update site ‘default‘ (show details) jenkins 下一切皆文件 虚拟机基本配置 J

[转帖]jenkins 需要java11

https://www.cnblogs.com/zhoading/p/17079947.html 开源 Devops 工具 Jenkins 宣布: 从 6 月 28 日发布的 Jenkins 2.357 和即将发布的 9 月 LTS 版本开始,Jenkins 最低需要 Java 11。 Jenkin