Jenkins-slave
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相关推荐
- jenkins slave在master显示和运行问题
jenkins slave在master显示和运行问题 1.工作空间的中文文件显示乱码 2.运行一些插件报错如下 java.nio.file.InvalidPathException: Malform ...
- windows下jenkins slave 搭建
一 创建新的Slave 注意Jenkins中slave称为note. 所以下面文章中的slave和node指的是一回事. 1)在Manage Jenkins-->Manage Nodes --& ...
- jenkins slave problem :Unsupported major.minor version 52.0
2019独角兽企业重金招聘Python工程师标准>>> jdk发生变化,有原来高版本oracle jdk8降低为openjdk7 ubuntu 本地安装东西将默认jdk更换为open ...
- 动态jenkins slave
1.Jenkins CI/CD 背景介绍 持续构建与发布是我们日常工作中必不可少的一个步骤,目前大多公司都采用 Jenkins 集群来搭建符合需求的 CI/CD 流程,然而传统的 Jenkins Sl ...
- Jenkins+k8s部署Jenkins slave
一.构建镜像 下载基础镜像,这里使用openvz的包,下载centos7的镜像 1.1 下载镜像后导入到本地 JENKINS VERSION为: 2.222.4 ------------------- ...
- 基于K8s的动态Jenkins Slave构建实践
前言 源于这篇文章分享的经验 基于 Kubernetes 的 Jenkins 构建集群实践,这里记录一下实践落地过程. 环境 这里Jenkins Master的安装没有采用容器镜像的方式,直接就是rp ...
- Jenkins slave 节点配置
准备工作 插件安装 SSH Build Agents,允许使用 SSH 协议的 Java 实现通过 SSH 启动代理. Jenkins master 节点机器 Jenkins slave 从节点机器 ...
- java中的slave_java – Jenkins slave在构建过程中脱机
jenkins奴隶在建设期间离线.我如何解决这个问题,我在SO和Jenkins问题上看到很多相关问题,但没有人解决. 我的配置: jenkins版1.651.1, Zuul版本2.1.1.dev393 ...
- 搭建(增加) jenkins slave 机器
sonar-jenkins-slave 10.37.77.120/********* 这是其中集群中的一台slave,直接从这个slave机器上copy 安装的jdk,slave.jar等信息.用sh ...
- 两种常见挂载Jenkins slave节点的方法
1.挂载slave节点的方法 在Jenkins的Master上,进入Mange node页面,可以管理node节点,例如新加.删除等操作. 其中, Name是节点名字: Description是节点描 ...
最新文章
- 003-读书笔记-Vue官网 计算属性与监听器
- 权威解答495个最常遇到的C语言问题
- 希尔排序python实现
- html实现div打印,如何在html div的中间打印/附加从按钮单击的值?
- 【JavaFx教程】第三部分:与用户的交互
- Codeforces 刷题记录(已停更)
- 热点事件发现、演化及时间线Timeline、故事线Storyline自动生成
- 百度SEO Typecho仿Win95怀旧主题
- 工作到了第七年,说说自己每天的工作(一)
- html5的q标签,HTML 5 q 标签 - HTML 参考手册
- dedesmc 手机端生成静态页
- [Java] 蓝桥杯ALGO-62 算法训练 平方计算
- 数据的增删改_准备数据
- 【重识云原生】第三章云存储第一节——分布式云存储总述
- 哈工大2022形式语言与自动机期末
- php字符串函数(2)替换、分割、填充、去除
- python与开源gis_Python与开源GIS:SpatiaLite简介
- Java中统计耗时的方法
- 吃透Java并发:AQS结构详解及其CLH变种、CLH、MCS
- 模型是如何训练出来的
热门文章
- Java API(2) File IO 异常 多线程 01-05
- java Spring5 Nullable注解使用
- JSP九大内置对象的作用和用法总结
- 各种皮试液的配制方法
- 花嫁之容氏浅浅最后怎么样了_花嫁之容氏浅浅
- 常用数学化简技巧与常用公式[运算能力辅导]
- 【Matlab图像去噪】小波域双重局部维娜滤板图像去噪【含源码 1642期】
- 为什么要用impl继承service层_讨论:Service层需要接口吗?
- webpack的兼容插件版本--(内附可用配置文件)
- 闪电博尔特100枪1000环夺冠,超人100枪10环垫底出局 程序中少了个大于号 覆盖结果