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
NodeJSExtended 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: ServiceAccountname: nfs-client-provisionernamespace: default
roleRef:kind: ClusterRolename: nfs-client-provisioner-runnerapiGroup: 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: ServiceAccountname: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: default
roleRef:kind: Rolename: leader-locking-nfs-client-provisionerapiGroup: 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: 1strategy:type: Recreateselector:matchLabels:app: nfs-client-provisionertemplate:metadata:labels:app: nfs-client-provisionerspec:serviceAccountName: nfs-client-provisionercontainers:- name: nfs-client-provisionerimage: lizhenliang/nfs-client-provisioner:latestvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: fuseim.pri/ifs- name: NFS_SERVERvalue: 192.168.66.101 - name: NFS_PATHvalue: /opt/nfs/jenkins/volumes:- name: nfs-client-rootnfs:server: 192.168.66.101path: /opt/nfs/jenkins/
cd nfs-client
kubectl create -f .

构建Jenkins-Master的pod资源

ServiceaAcount.yaml

apiVersion: v1
kind: ServiceAccount
metadata:name: jenkinsnamespace: kube-ops

rbac.yaml

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: jenkinsnamespace: 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: jenkinsnamespace: kube-ops
roleRef:apiGroup: rbac.authorization.k8s.iokind: Rolename: jenkins
subjects:- kind: ServiceAccountname: jenkinsnamespace: kube-ops---kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: jenkinsClusterRolenamespace: 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.iokind: ClusterRolename: jenkinsClusterRole
subjects:
- kind: ServiceAccountname: jenkinsnamespace: kube-ops

StatefulSet.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: jenkinslabels:name: jenkinsnamespace: kube-ops
spec:serviceName: jenkinsselector:matchLabels:app: jenkinsreplicas: 1updateStrategy:type: RollingUpdatetemplate:metadata:name: jenkinslabels:app: jenkinsspec:terminationGracePeriodSeconds: 10serviceAccountName: jenkinscontainers:- name: jenkinsimage: jenkins/jenkins:lts-alpineimagePullPolicy: IfNotPresentports:- containerPort: 8080name: webprotocol: TCP- containerPort: 50000name: agentprotocol: TCP
#          resources:
#            limits:
#              cpu: 1
#              memory: 1Gi
#            requests:
#              cpu: 0.5
#              memory: 500Mienv:- name: LIMITS_MEMORYvalueFrom:resourceFieldRef:resource: limits.memorydivisor: 1Mi- name: JAVA_OPTSvalue: -Xmx$(LIMITS_MEMORY)m -XshowSettings:vm -Dhudson.slaves.NodeProvisioner.initialDelay=0 -Dhudson.slaves.NodeProvisioner.MARGIN=50 -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85volumeMounts:- name: jenkins-homemountPath: /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: 12securityContext:fsGroup: 1000volumeClaimTemplates:- metadata:name: jenkins-homespec:storageClassName: "managed-nfs-storage"accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 1Gi

Service.yaml

apiVersion: v1
kind: Service
metadata:name: jenkinsnamespace: kube-opslabels:app: jenkins
spec:selector:app: jenkinstype: NodePortports:- name: webport: 8080targetPort: web- name: agentport: 50000targetPort: 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:latestMAINTAINER 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/repoCOPY settings.xml /usr/local/apache-maven/conf/settings.xmlUSER 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的podnode("jenkins-slave"){// 第一步stage('拉取代码'){checkout([$class: 'GitSCM', branches: [[name: 'master']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])}}
}

Jenkins-slave相关推荐

  1. jenkins slave在master显示和运行问题

    jenkins slave在master显示和运行问题 1.工作空间的中文文件显示乱码 2.运行一些插件报错如下 java.nio.file.InvalidPathException: Malform ...

  2. windows下jenkins slave 搭建

    一 创建新的Slave 注意Jenkins中slave称为note. 所以下面文章中的slave和node指的是一回事. 1)在Manage Jenkins-->Manage Nodes --& ...

  3. jenkins slave problem :Unsupported major.minor version 52.0

    2019独角兽企业重金招聘Python工程师标准>>> jdk发生变化,有原来高版本oracle jdk8降低为openjdk7 ubuntu 本地安装东西将默认jdk更换为open ...

  4. 动态jenkins slave

    1.Jenkins CI/CD 背景介绍 持续构建与发布是我们日常工作中必不可少的一个步骤,目前大多公司都采用 Jenkins 集群来搭建符合需求的 CI/CD 流程,然而传统的 Jenkins Sl ...

  5. Jenkins+k8s部署Jenkins slave

    一.构建镜像 下载基础镜像,这里使用openvz的包,下载centos7的镜像 1.1 下载镜像后导入到本地 JENKINS VERSION为: 2.222.4 ------------------- ...

  6. 基于K8s的动态Jenkins Slave构建实践

    前言 源于这篇文章分享的经验 基于 Kubernetes 的 Jenkins 构建集群实践,这里记录一下实践落地过程. 环境 这里Jenkins Master的安装没有采用容器镜像的方式,直接就是rp ...

  7. Jenkins slave 节点配置

    准备工作 插件安装 SSH Build Agents,允许使用 SSH 协议的 Java 实现通过 SSH 启动代理. Jenkins master 节点机器 Jenkins slave 从节点机器 ...

  8. java中的slave_java – Jenkins slave在构建过程中脱机

    jenkins奴隶在建设期间离线.我如何解决这个问题,我在SO和Jenkins问题上看到很多相关问题,但没有人解决. 我的配置: jenkins版1.651.1, Zuul版本2.1.1.dev393 ...

  9. 搭建(增加) jenkins slave 机器

    sonar-jenkins-slave 10.37.77.120/********* 这是其中集群中的一台slave,直接从这个slave机器上copy 安装的jdk,slave.jar等信息.用sh ...

  10. 两种常见挂载Jenkins slave节点的方法

    1.挂载slave节点的方法 在Jenkins的Master上,进入Mange node页面,可以管理node节点,例如新加.删除等操作. 其中, Name是节点名字: Description是节点描 ...

最新文章

  1. 003-读书笔记-Vue官网 计算属性与监听器
  2. 权威解答495个最常遇到的C语言问题
  3. 希尔排序python实现
  4. html实现div打印,如何在html div的中间打印/附加从按钮单击的值?
  5. 【JavaFx教程】第三部分:与用户的交互
  6. Codeforces 刷题记录(已停更)
  7. 热点事件发现、演化及时间线Timeline、故事线Storyline自动生成
  8. 百度SEO Typecho仿Win95怀旧主题
  9. 工作到了第七年,说说自己每天的工作(一)
  10. html5的q标签,HTML 5 q 标签 - HTML 参考手册
  11. dedesmc 手机端生成静态页
  12. [Java] 蓝桥杯ALGO-62 算法训练 平方计算
  13. 数据的增删改_准备数据
  14. 【重识云原生】第三章云存储第一节——分布式云存储总述
  15. 哈工大2022形式语言与自动机期末
  16. php字符串函数(2)替换、分割、填充、去除
  17. python与开源gis_Python与开源GIS:SpatiaLite简介
  18. Java中统计耗时的方法
  19. 吃透Java并发:AQS结构详解及其CLH变种、CLH、MCS
  20. 模型是如何训练出来的

热门文章

  1. Java API(2) File IO 异常 多线程 01-05
  2. java Spring5 Nullable注解使用
  3. JSP九大内置对象的作用和用法总结
  4. 各种皮试液的配制方法
  5. 花嫁之容氏浅浅最后怎么样了_花嫁之容氏浅浅
  6. 常用数学化简技巧与常用公式[运算能力辅导]
  7. 【Matlab图像去噪】小波域双重局部维娜滤板图像去噪【含源码 1642期】
  8. 为什么要用impl继承service层_讨论:Service层需要接口吗?
  9. webpack的兼容插件版本--(内附可用配置文件)
  10. 闪电博尔特100枪1000环夺冠,超人100枪10环垫底出局 程序中少了个大于号 覆盖结果