手动在Jenkins Server上面创建一个Jenkins Agent节点,选择JNLP 类型。然后获取Jenkins Agent与Master连接所需要的JENKINS_AGENT_NAME
和JENKINS_AGENT_SECRET
信息。
静态的AGENT节点,需要编写一个Deployment
部署文件并传递上面的连接信息,然后kubectl apply
;
动态的AGENT节点,需要使用kubernetes
插件, 首先配置CLOUD,添加Kubernetes集群的配置信息。然后编写Pipeline Agent部分的YAML和Stages。
1. 创建节点
Jenkins > 节点管理 > 添加节点
配置节点信息
创建成功(后面需要用到节点名称和secret信息)
2. 静态节点
kind: Deployment
apiVersion: apps/v1
metadata:
labels:
k8s-app: jenkinsagent
name: jenkinsagent
namespace: devops
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: jenkinsagent
template:
metadata:
labels:
k8s-app: jenkinsagent
namespace: devops
name: jenkinsagent
spec:
containers:
- name: jenkinsagent
image: jenkins/inbound-agent:4.10-3-jdk8
securityContext:
privileged: true
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: 1000m
memory: 2Gi
requests:
cpu: 500m
memory: 512Mi
env:
- name: JENKINS_URL
value: http://192.168.1.200:8080
- name: JENKINS_SECRET
value: 2f3f27ee602171c5b51bc69c2bda501d703ac65f42de16600b3e3007dfdec422
- name: JENKINS_AGENT_NAME
value: buildserver1
- name: JENKINS_AGENT_WORKDIR
value: /home/jenkins/workspace
3. 动态节点
4. 最佳实践
@Library("mylib@feature-k8s") _ //加载共享库
podYaml = """
kind: Pod
apiVersion: v1
metadata:
labels:
k8s-app: jenkinsagent
name: jnlp
namespace: devops
spec:
securityContext:
runAsUser: 0
containers:
- name: jnlp
image: jenkins/inbound-agent:4.10-3-jdk8
imagePullPolicy: IfNotPresent
- name: maven
image: maven:3.8.4-jdk-8
imagePullPolicy: IfNotPresent
command:
- cat
tty: true
- name: dind
image: 'docker:stable-dind'
command:
- dockerd
- --host=unix:///var/run/docker.sock
- --host=tcp://0.0.0.0:8000
- --insecure-registry=192.168.1.200:8088
securityContext:
privileged: true
volumeMounts:
- mountPath: /var/run
name: docker-dir
- name: "docker"
tty: true
image: docker:19.03.15-git
imagePullPolicy: IfNotPresent
volumeMounts:
- m