前文
Jenkins安装部署使用_南宫乘风的博客-CSDN博客
Jenkins入门配置_南宫乘风的博客-CSDN博客
Jenkins集成Sonar Qube_南宫乘风的博客-CSDN博客
Jenkins的流水线(Pipeline)
Jenkins流水线整合钉钉_南宫乘风的博客-CSDN博客Kubernetes安装Jenkins_南宫乘风的博客-CSDN博客
目录
1、Kubernetes 环境安装 Jenkins
2、Jenkins 安装插件
3、云配置
4、Template 模板配置
5、Jenkins-slave 启动测试
6、实战环境
7、运行结果
1、Kubernetes 环境安装 Jenkins
https://blog.csdn.net/heian_99/article/details/124985786
2、Jenkins 安装插件
1
2
3
4
5
6
7
8
9
10
|
插件:
kubernets
pipeline
docker pipeline
docker
Kubernetes Cli
Config File Provider
Pipeline Utility Steps
Jenkins源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
|
3、云配置
Dashboard > 系统管理 > 节点管理 > configureClouds
参考:https://github.com/jenkinsci/kubernetes-plugin
这里是配置连接Kubernetes集群,启动 Jenkins Slave 代理的相关配置。
4、Template 模板配置
这里配置 Jenkins Slave 在 kubernetes 集群中启动的 Pod 的配置,这里将设置四个镜像,分别是:
- Jenkins Slave: 用于执行 Jenkins Job 命令。
- Helm-Kubectl: 用于执行 Helm 命令。
- Docker 用于编译、推送 Docker 镜像
- Maven: 用于Maven编译、打包。
这里将这四个镜像融入到一个 Pod 之中,方便执行各种命令来完成持续部署交互过程。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@master01 Jenkins]# cat maven.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: maven-pvc
namespace: jenkins
spec:
storageClassName: "nfsdata"
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
Kubernetes地址:https://kubernetes.default.svc.cluster.local/
Jenkins-master:http://jenkins.jenkins.svc.cluster.local:8080
Jenkins-slave:jenkins.jenkins.svc.cluster.local:50000
jnlp-slave
cnych/jenkins:jnlp6
maven
maven:3.8.5-openjdk-8-slim
docker
registry.cn-shanghai.aliyuncs.com/mydlq/docker:18.06.2-dind
helm-kubectl
registry.cn-shanghai.aliyuncs.com/mydlq/helm-kubectl:2.13.1
/var/run/docker.sock
/usr/bin/docker
/etc/docker
|
注意:docker需要填写sleep
5、Jenkins-slave 启动测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
def label = "jnlp-slave"
podTemplate(label: label,cloud: 'kubernetes' ){
node (label) {
stage('Git阶段'){
echo "1、开始拉取代码"
sh "git version"
}
stage('Maven阶段'){
container('maven') {
echo "2、开始Maven编译、推送到本地库"
sh "mvn -version"
}
}
stage('Docker阶段'){
container('docker') {
echo "3、开始读取Maven pom变量,并执行Docker编译、推送、删除"
sh "docker version"
}
}
stage('Helm阶段'){
container('helm-kubectl') {
echo "4、开始检测Kubectl环境,测试执行Helm部署,与执行部署"
sh "helm version"
}
}
}
}
|
6、实战环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
pipeline {
agent
{
label 'jnlp-slave'
}
// 存放所有任务的合集
stages {
stage('拉取Git代码') {
steps {
echo '拉取Git代码'
sh 'git clone https://gitee.com/chengfeng99/java-demo.git'
}
}
stage('检测代码质量') {
steps {
echo '检测代码质量'
withSonarQubeEnv('sonarqube') { // Will pick the global server connection you have configured
// 这里使用名字叫做maven的容器运行
container("maven") {
sh '''
cd /home/jenkins/agent/workspace/k8s-demo/java-demo
mvn sonar:sonar -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target/ -Dsonar.login=19d0d6b885e18455d257d61da08776bd4e180c04
'''
}
}
}
}
stage('构建代码') {
steps {
echo '构建代码'
container('maven') {
sh '''
cd /home/jenkins/agent/workspace/k8s-demo/java-demo
mvn clean package -Dmaven.test.skip=true
'''
//打包跳过测试
}
}
}
stage('制作自定义镜像并发布Harbor') {
steps {
echo '制作自定义镜像并发布Harbor'
}
}
stage('基于Harbor部署工程') {
steps {
echo '基于Harbor部署工程'
}
}
}
}
|
7、运行结果