Jenkins-slave

2023-05-16

Jenkins插件

chinese
Role-based Authorization Strategy  用户权限
Credentials Binding  凭证管理
git
Deploy to container
Maven Integration
Pipeline
Groovy Postbuild
GitLab
Gitlab Hook
Email Extension
SonarQube Scanner
Publish Over SSH
NodeJS

Extended Choice Parameter
Git Parameter
Kubernetes
Kubernetes Continuous Deploy
thinbackup




开启代理程序的TCP端口

在这里插入图片描述

在这里插入图片描述

新建节点

在这里插入图片描述

在这里插入图片描述

slave节点创建目录

mkdir /root/jenkins

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在命令行中启动节点

java -jar agent.jar -jnlpUrl http://192.168.66.101:8888/computer/slave1/slave-agent.jnlp -secret 57478f5900889d386e86f7336394f590d134a2ac4b4f4204e8faf3e332f8b4b6 -workDir "/root/jenkins"

测试节点是否可用
在这里插入图片描述

node('slave1') {
  stage('check out') {
    checkout([$class: 'GitSCM', branches: [[name: '*/master']],doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],userRemoteConfigs: [[credentialsId: '7fd05954-bb3c-416e-8cad-9eafd681ec35', url: 'git@192.168.66.100:wuxing_group/tensquare_back.git']]])
  }
}

安装和配置NFS

NFS服务器安装在192.168.66.101机器上

安装(k8s节点都安装)

yum install -y nfs-utils
mkdir -p /opt/nfs/jenkins

配置

cat /etc/exports
/opt/nfs/jenkins *(rw,no_root_squash)

启动

systemctl start nfs
systemctl enable nfs

查看共享目录

showmount -e 192.168.66.101

在Kubernetes安装Jenkins-Master

构建nfs-client-provisioner的pod资源

rbac.yaml

kind: ServiceAccount
apiVersion: v1
metadata:
  name: nfs-client-provisioner
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

class.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
  archiveOnDelete: "true"

deployment.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: lizhenliang/nfs-client-provisioner:latest
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 192.168.66.101 
            - name: NFS_PATH
              value: /opt/nfs/jenkins/
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.66.101
            path: /opt/nfs/jenkins/
cd nfs-client
kubectl create -f .

构建Jenkins-Master的pod资源

ServiceaAcount.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
  namespace: kube-ops

rbac.yaml

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: jenkins
  namespace: kube-ops
rules:
  - apiGroups: ["extensions", "apps"]
    resources: ["deployments"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["create","delete","get","list","patch","update","watch"]
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create","delete","get","list","patch","update","watch"]
  - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get","list","watch"]
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get"]

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: jenkins
  namespace: kube-ops
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: jenkins
subjects:
  - kind: ServiceAccount
    name: jenkins
    namespace: kube-ops
    
---

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: jenkinsClusterRole
  namespace: kube-ops
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/log"]
  verbs: ["get","list","watch"]
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get"]
 
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: jenkinsClusterRuleBinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: jenkinsClusterRole
subjects:
- kind: ServiceAccount
  name: jenkins
  namespace: kube-ops

StatefulSet.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: jenkins
  labels:
    name: jenkins
  namespace: kube-ops
spec:
  serviceName: jenkins
  selector:
    matchLabels:
      app: jenkins
  replicas: 1
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      name: jenkins
      labels:
        app: jenkins
    spec:
      terminationGracePeriodSeconds: 10
      serviceAccountName: jenkins
      containers:
        - name: jenkins
          image: jenkins/jenkins:lts-alpine
          imagePullPolicy: IfNotPresent
          ports:
          - containerPort: 8080
            name: web
            protocol: TCP
          - containerPort: 50000
            name: agent
            protocol: TCP
#          resources:
#            limits:
#              cpu: 1
#              memory: 1Gi
#            requests:
#              cpu: 0.5
#              memory: 500Mi
          env:
            - name: LIMITS_MEMORY
              valueFrom:
                resourceFieldRef:
                  resource: limits.memory
                  divisor: 1Mi
            - name: JAVA_OPTS
              value: -Xmx$(LIMITS_MEMORY)m -XshowSettings:vm -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
          volumeMounts:
            - name: jenkins-home
              mountPath: /var/jenkins_home
#          livenessProbe:
#            httpGet:
#              path: /login
#              port: 8080
#            initialDelaySeconds: 60
#            timeoutSeconds: 5
#            failureThreshold: 12
#          readinessProbe:
#            httpGet:
#              path: /login
#              port: 8080
#            initialDelaySeconds: 60
#            timeoutSeconds: 5
#            failureThreshold: 12
      securityContext:
        fsGroup: 1000
  volumeClaimTemplates:
  - metadata:
      name: jenkins-home
    spec:
      storageClassName: "managed-nfs-storage"
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

Service.yaml

apiVersion: v1
kind: Service
metadata:
  name: jenkins
  namespace: kube-ops
  labels:
    app: jenkins
spec:
  selector:
    app: jenkins
  type: NodePort
  ports:
  - name: web
    port: 8080
    targetPort: web
  - name: agent
    port: 50000
    targetPort: agent
kubectl create namespace kube-ops
cd jenkins-master
kubectl create -f .

jenkins-master安装插件

插件相关设置
vim hudson.model.UpdateCenter.xml

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>
cd jenkins家目录/updates
sed -i 's/http:\/\/updates.jenkinsci.org\/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

插件
Localization:Chinese
Git
Pipeline
Extended Choice Parameter


Jenkins与Kubernetes整合

安装Kubernetes插件

在这里插入图片描述

kubernetes地址采用了kube的服务器发现:https://kubernetes.default.svc.cluster.local

Jenkins URL 地址:http://jenkins.kube-ops.svc.cluster.local:8080

http://service名称.名称空间.svc.cluster.local:service端口

在这里插入图片描述

在这里插入图片描述

构建Jenkins-Slave自定义镜像

Dockerfile

FROM jenkins/jnlp-slave:latest

MAINTAINER wuxing

# 切换到 root 账户进行操作
USER root

# 安装 maven
COPY apache-maven-3.6.2-bin.tar.gz .

RUN tar -zxf apache-maven-3.6.2-bin.tar.gz && \
    mv apache-maven-3.6.2 /usr/local && \
    rm -f apache-maven-3.6.2-bin.tar.gz && \
    ln -s /usr/local/apache-maven-3.6.2/bin/mvn /usr/bin/mvn && \
    ln -s /usr/local/apache-maven-3.6.2 /usr/local/apache-maven && \
    mkdir -p /usr/local/apache-maven/repo

COPY settings.xml /usr/local/apache-maven/conf/settings.xml

USER jenkins

settings.xml

...
  <localRepository>/usr/local/apache-maven/repo</localRepository>
...
    <mirror>
      <id>central</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
...

vim Dockerfile

FROM registry.cn-hangzhou.aliyuncs.com/wuxingge/jenkins-slave-maven-centos7:v1
USER root
COPY settings.xml /opt/rh/rh-maven33/root/etc/maven/settings.xml
USER 1001
docker build -t jenkins-slave-maven:latest .
docker tag jenkins-slave-maven:latest 192.168.66.102:85/library/jenkins-slave-maven:latest
docker login -u admin -p Harbor12345 192.168.66.102:85
docker push 192.168.66.102:85/library/jenkins-slave-maven:latest

测试Jenkins-Slave创建

创建一个Jenkins流水线项目
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

def git_address = "http://192.168.66.100:82/wuxing_group/tensquare_back.git"
def git_auth = "ebe06142-096b-4648-ac79-db5d224b3554"
//创建一个Pod的模板,label为jenkins-slave
podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [
  containerTemplate(
    name: 'jnlp',
    image: "192.168.66.102:85/library/jenkins-slave-maven:latest"
  )
 ]
)
{
  //引用jenkins-slave的pod模块来构建Jenkins-Slave的pod
  node("jenkins-slave"){
    // 第一步
    stage('拉取代码'){
      checkout([$class: 'GitSCM', branches: [[name: 'master']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jenkins-slave 的相关文章

随机推荐

  • 前台解析jwt token 前后端分离 ant design pro

    前言 在如今得环境下 xff0c 越来越多得项目采用微服务 xff0c 前后端分离项目 优点在于同时开发 xff0c 分开部署 缺点在于需要约定的太多 xff0c 导致前后端联调产生分歧 就标题而言 xff0c 解决前端antd 接收后台返
  • win10 双击启动nacos报错 Unable to start web server...... Unable to start embedded Tomcat

    1 遇到的问题 win10双击启动nacos报错 2 分析 从启动cmd开始查看 发现 启动模式为集群模式 定位成功 3 解决 修改startup中启动模式 重新启动 成功
  • IDEA 远程debugger SpringBoot项目 超赞!!!

    如题哦 xff0c 项目发布到服务器上后 xff0c 每天被不同的bug所困扰 强大的idea超出你的想象 xff0c 强大到可以远程debugger xff0c 就和在本地一样一样的 进入正题 前提概要 线上即服务器代码必须与本地一致 x
  • git提交时 # Please enter the commit message for your changes. Lines starting # with ‘#‘ will be ignored

    问题 xff1a Please enter the commit message for your changes Lines starting with 39 39 will be ignored and an empty message
  • canal 修改配置信息后监听不到mysql数据并报错can‘t find start position for example

    原由 xff1a 数据库地址变化 canal 需要修改监听 问题 xff1a 修改配置信息后重启canal 但并无监听到数据库信息变化 分析 xff1a canal 与数据库之间断层 xff0c 导致信息传输失败 解决 xff1a xff0
  • AI那点事儿

    从古至今 xff0c 改朝换代 一代崛起 xff0c 就标志着一代的灭亡 AI的兴起 xff0c 让无数程序梦想客死他乡 无论是学者还是技术科研者 xff0c 无一不在说 xff0c AI的时代到了 然而 xff0c 我们扣心自问 xff0
  • win7 配置JDK环境变量

    第一步 xff1a 安装jdk 8u101 windows x64 exe xff0c 路径为默认路径 xff0c 一直下一步直到完成安装 安装最好不要修改安装路径 xff0c 防止自己找不到 第二步 xff1a 设置环境变量 xff1a
  • 完整的搭建内网穿透ngrok详细教程(有图有真相)

    如上 网上找到的都是不稳定的 还不如自己搭建一个 去问度娘了 xff0c 发现了一堆 好吧 xff0c 那就动手开干吧 准备工作 xff08 其实也是硬性条件 xff09 xff1a 1 服务器一台 2 备案域名一个 xff08 好多都说可
  • lsyncd-实时同步(镜像)守护程序

    E mail 1226032602 64 qq com 官方文档 https axkibe github io lsyncd https github com axkibe lsyncd 简介 Lsyncd使用文件系统事件接口 xff08
  • Dockerfile

    docker安装 yum span class token function install span y yum utils device mapper persistent data lvm2 span class token func
  • c51单片机学习笔记-LED闪烁编程

    目的 xff1a 使LED灯闪烁 xff0c 需循环让 D1 指示灯先亮一会后熄灭 xff0c 因此只需编写一个循环函数 xff0c 专门在那循环运行即可实现延时功能 编译软件 xff1a keil5 过程 1 书写延时函数 函数名 xff
  • 网络管理命令-nmcli

    网络管理工具 iproute 软件包包括 ip ss 命令 net tools软件包包括 ifconfig route netstat命令 ip 命令相当于之前的 ifconfig route ss 命令相当于之前的 netstat nmt
  • nginx

    本文作者 五行哥 QQ 1226032602 E mail 1226032602 64 qq com web服务器种类 apache nginx tomcat resin Lighttpd IIS WebLogic Jetty Node j
  • kubernetes ingress

    https kubernetes io docs concepts services networking ingress 负载均衡软件 NginxTraefikEnvoy https github com kubernetes ingre
  • kubernetes configMap secret

    配置容器化应用的方式 自定义命令行参数把配置文件直接焙进镜像环境变量 cloud native的应用程序一般可直接通过环境变量加载配置通过entrypoint脚本来预处理变量 存储卷 configMap 配置中心 pod从configMap
  • 运维精华面试题

    一 基本概念 1 常见的Linux发行版本都有什么 xff1f 你最擅长哪一个 xff1f 它的官网网站是什么 xff1f 说明你擅长哪一块 xff1f 常见的Linux发行版本有Redhat Centos Debian Ubuntu Su
  • K8S集群监控 Prometheus

    Prometheus xff08 普罗米修斯 xff09 是一个最初在SoundCloud上构建的监控系统 xff0c 自2012年成为社区开源项目 xff0c 拥有非常活跃的开发人员和用户社区 xff0c 为强调开源及独立维护 xff0c
  • kvm虚拟化

    https access redhat com documentation zh cn red hat enterprise linux 7 html virtualization getting started guide index h
  • git_gitlab

    本文作者 xff1a wuXing QQ 1226032602 E mail 1226032602 64 qq com git https git scm com book zh v2 Git诞生历史 我想大家还记得Linus torval
  • Jenkins-slave

    Jenkins插件 chinese Role based Authorization Strategy 用户权限 Credentials Binding 凭证管理 span class token function git span Dep