安装Jenkins
helm repo add jenkins https://charts.jenkins.io
helm repo update
# 当前版本
jenkins-5.1.18.tgz
瘦身后的 values.yaml
nameOverride :
fullnameOverride :
namespaceOverride :
clusterZone : "cluster.local"
kubernetesURL : "https://kubernetes.default"
credentialsId :
renderHelmLabels : true
controller : componentName : "jenkins-controller" image : registry : "docker.io" repository : "jenkins/jenkins" tag : tagLabel : jdk17pullPolicy : "Always" imagePullSecretName : lifecycle : { } disableRememberMe : false numExecutors : 0 executorMode : "NORMAL" customJenkinsLabels : [ ] hostNetworking : false admin : username : "admins" password : userKey : jenkins- admin- userpasswordKey : jenkins- admin- passwordcreateSecret : true existingSecret : "" jenkinsAdminEmail : jenkinsHome : "/var/jenkins_home" jenkinsRef : "/usr/share/jenkins/ref" jenkinsWar : "/usr/share/jenkins/jenkins.war" resources : requests : cpu : "50m" memory : "256Mi" limits : cpu : "4000m" memory : "4096Mi" shareProcessNamespace : false initContainerResources : { } initContainerEnvFrom : [ ] initContainerEnv : [ ] containerEnvFrom : [ ] containerEnv : [ ] javaOpts : jenkinsOpts : jenkinsUrlProtocol : jenkinsUrl : jenkinsUriPrefix : usePodSecurityContext : true runAsUser : 1000 fsGroup : 1000 securityContextCapabilities : { } podSecurityContextOverride : ~ containerSecurityContext : runAsUser : 1000 runAsGroup : 1000 readOnlyRootFilesystem : true allowPrivilegeEscalation : false serviceType : NodePortclusterIp : servicePort : 8080 targetPort : 8080 nodePort : 33441 serviceExternalTrafficPolicy : serviceAnnotations : { } statefulSetLabels : { } serviceLabels : { } podLabels : { } healthProbes : true probes : startupProbe : failureThreshold : 12 httpGet : path : '{{ default "" .Values.controller.jenkinsUriPrefix }}/login' port : httpperiodSeconds : 10 timeoutSeconds : 5 livenessProbe : failureThreshold : 5 httpGet : path : '{{ default "" .Values.controller.jenkinsUriPrefix }}/login' port : httpperiodSeconds : 10 timeoutSeconds : 5 initialDelaySeconds : readinessProbe : failureThreshold : 3 httpGet : path : '{{ default "" .Values.controller.jenkinsUriPrefix }}/login' port : httpperiodSeconds : 10 timeoutSeconds : 5 initialDelaySeconds : podDisruptionBudget : enabled : false apiVersion : "policy/v1beta1" annotations : { } labels : { } maxUnavailable : "0" agentListenerEnabled : true agentListenerPort : 50001 agentListenerHostPort : agentListenerNodePort : 50001 agentListenerExternalTrafficPolicy : agentListenerLoadBalancerSourceRanges : - 0.0.0.0/0disabledAgentProtocols : - JNLP- connect- JNLP2- connectcsrf : defaultCrumbIssuer : enabled : true proxyCompatability : true agentListenerServiceType : "NodePort" agentListenerServiceAnnotations : { } agentListenerLoadBalancerIP : legacyRemotingSecurityEnabled : false loadBalancerSourceRanges : - 0.0.0.0/0loadBalancerIP : jmxPort : extraPorts : [ ] installPlugins : - kubernetes: 4219.v40ff98cfb_d6f- workflow- aggregator: 596.v8c21c963d92d- git: 5.2.2- configuration- as- code: 1807.v0175eda_00a_20installLatestPlugins : true installLatestSpecifiedPlugins : false additionalPlugins : [ ] initializeOnce : false overwritePlugins : false overwritePluginsFromImage : true projectNamingStrategy : standardenableRawHtmlMarkupFormatter : false markupFormatter : plainTextscriptApproval : [ ] initScripts : { } initConfigMap : existingSecret : additionalExistingSecrets : [ ] additionalSecrets : [ ] secretClaims : [ ] cloudName : "kubernetes" JCasC : defaultConfig : false overwriteConfiguration : false configUrls : [ ] configScripts : { } security : apiToken : creationOfLegacyTokenEnabled : false tokenGenerationOnCreationEnabled : false usageStatisticsEnabled : true securityRealm : | - local : allowsSignup : false enableCaptcha : false users : - id : "${chart-admin-username}" name : "Jenkins Admin" password : "${chart-admin-password}" authorizationStrategy : | - loggedInUsersCanDoAnything : allowAnonymousRead : false customInitContainers : [ ] sidecars : configAutoReload : enabled : false image : registry : docker.iorepository : kiwigrid/k8s- sidecartag : 1.27.1imagePullPolicy : IfNotPresentresources : { } scheme : httpskipTlsVerify : false reqRetryConnect : 10 sleepTime : envFrom : [ ] env : { } sshTcpPort : 1044 folder : "/var/jenkins_home/casc_configs" containerSecurityContext : readOnlyRootFilesystem : true allowPrivilegeEscalation : false additionalSidecarContainers : [ ] schedulerName : "" nodeSelector : { } tolerations : [ ] terminationGracePeriodSeconds : terminationMessagePath : terminationMessagePolicy : affinity : { } priorityClassName : podAnnotations : { } statefulSetAnnotations : { } updateStrategy : { } ingress : enabled : false paths : [ ] apiVersion : "extensions/v1beta1" labels : { } annotations : { } path : hostName : resourceRootUrl : tls : [ ] secondaryingress : enabled : false paths : [ ] apiVersion : "extensions/v1beta1" labels : { } annotations : { } hostName : tls : backendconfig : enabled : false apiVersion : "extensions/v1beta1" name : labels : { } annotations : { } spec : { } route : enabled : false labels : { } annotations : { } path : hostAliases : [ ] prometheus : enabled : false serviceMonitorAdditionalLabels : { } serviceMonitorNamespace : scrapeInterval : 60sscrapeEndpoint : /prometheusalertingrules : [ ] alertingRulesAdditionalLabels : { } prometheusRuleNamespace : "" relabelings : [ ] metricRelabelings : [ ] googlePodMonitor : enabled : false scrapeInterval : 60sscrapeEndpoint : /prometheustestEnabled : true httpsKeyStore : enable : false jenkinsHttpsJksSecretName : "" jenkinsHttpsJksSecretKey : "jenkins-jks-file" jenkinsHttpsJksPasswordSecretName : "" jenkinsHttpsJksPasswordSecretKey : "https-jks-password" disableSecretMount : false httpPort : 8081 path : "/var/jenkins_keystore" fileName : "keystore.jks" password : "password" jenkinsKeyStoreBase64Encoded :
agent : enabled : false defaultsProviderTemplate : "" jenkinsUrl : jenkinsTunnel : kubernetesConnectTimeout : 5 kubernetesReadTimeout : 15 maxRequestsPerHostStr : "32" retentionTimeout : 5 waitForPodSec : 600 namespace : podLabels : { } jnlpregistry : image : repository : "jenkins/inbound-agent" tag : "3248.v65ecb_254c298-1" workingDir : "/home/jenkins/agent" nodeUsageMode : "NORMAL" customJenkinsLabels : [ ] imagePullSecretName : componentName : "jenkins-agent" websocket : false directConnection : false privileged : false runAsUser : runAsGroup : hostNetworking : false resources : requests : cpu : "512m" memory : "512Mi" limits : cpu : "512m" memory : "512Mi" livenessProbe : { } alwaysPullImage : false restrictedPssSecurityContext : false podRetention : "Never" showRawYaml : true volumes : [ ] workspaceVolume : { } envVars : [ ] secretEnvVars : [ ] nodeSelector : { } command : args : "${computer.jnlpmac} ${computer.name}" sideContainerName : "jnlp" TTYEnabled : false containerCap : 10 podName : "default" idleMinutes : 0 yamlTemplate : "" yamlMergeStrategy : "override" connectTimeout : 100 annotations : { } additionalContainers : [ ] disableDefaultAgent : false podTemplates : { }
additionalAgents : { }
additionalClouds : { }
persistence : enabled : true existingClaim : storageClass : openebs- hostpathannotations : { } labels : { } accessMode : "ReadWriteOnce" size : "8Gi" dataSource : { } subPath : volumes : [ ] mounts : [ ]
networkPolicy : enabled : false apiVersion : networking.k8s.io/v1internalAgents : allowed : true podLabels : { } namespaceLabels : { } externalAgents : ipCIDR : except : [ ]
rbac : create : true readSecrets : false
serviceAccount : create : true name : annotations : { } extraLabels : { } imagePullSecretName :
serviceAccountAgent : create : false name : annotations : { } extraLabels : { } imagePullSecretName :
checkDeprecation : true
awsSecurityGroupPolicies : enabled : false policies : - name : "" securityGroupIds : [ ] podSelector : { }
helmtest : bats : image : registry : "docker.io" repository : "bats/bats" tag : "1.11.0"
安装完之后 配置EKS
我的是在tools命名空间下
---
apiVersion: v1
kind: ServiceAccount
metadata:name: tools-adminnamespace: tools---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: pod-creatornamespace: tools
rules:
- apiGroups: [""] # "" indicates the core API groupresources: ["pods"]verbs: ["create", "get", "list", "watch", "delete", "update"]---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: tools-admin-rolebindingnamespace: tools
subjects:
- kind: ServiceAccountname: tools-adminnamespace: tools
roleRef:kind: Rolename: pod-creatorapiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: tools-admin-crb
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: tools-adminnamespace: tools---
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:annotations:kubernetes.io/service-account.name: tools-adminname: tools-admin-tokennamespace: tools
获取你的token
echo - e "\033[31m$(kubectl -n tools get secret $(kubectl -n tools get secret tools-admin-token | grep tools-admin-token | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)\033[0m"
登录Jenkins 配置eks的token
最后pipeline如下
pipeline { agent { kubernetes { inheritFrom 'kubernetes' } } stages { stage ( 'Get Code' ) { steps { git branch: 'main' , url : 'http://192.168.0.33:22045/admins/test.git' } } stage ( 'Test-docker....' ) { steps { container ( 'test' ) { withKubeConfig ( credentialsId: 'k8s-eks' , serverUrl : 'https://01922.gr7.ap-northeast-1.eks.amazonaws.com' ) { sh 'kubectl delete -f pods.yaml' sh 'kubectl get pods' } } } } } }
运行日志