k8s环境:

192.168.0.91       master 

192.168.0.92       node

192.168.0.96       gitlab

192.168.0.98       harbor

k8s集群安装请参照:https://www.cnblogs.com/effortsing/p/10312081.html

gitlab安装请参照:https://www.cnblogs.com/effortsing/p/10012158.html

arbor安装请参照:https://www.cnblogs.com/effortsing/p/10061096.html
 

配置jenkins主机上的docker可以登录harbor仓库并且上传镜像到harbor仓库:参照:https://www.cnblogs.com/effortsing/p/10061096.html

 
下面所有操作都是在node节点:192.168.0.92上进行

1、生成自定义Jenkins master镜像

原始的Jenkins master镜像并不符合我们当前需求,所以在原始镜像的基础上做了一些改变,这一步并不是必须的,主要是看具体需求

下载原始镜像

链接:https://pan.baidu.com/s/14z5BnFAXYoMnDoXbiNgmuQ
提取码:ecsq 导入镜像 docker load < jenkinsci.tar 查看镜像 [root@test2 ~]# docker images
jenkinsci/jenkins latest b589aefe29ff 3 months ago 703 MB 编写Dockerfile:

cat>/home/jenkins-dockerfile/Dockerfile <<EOF
FROM jenkinsci/jenkins
USER root
RUN apt-get update && apt-get install -y libltdl7.*
RUN apt-get install maven -y

RUN apt-get install git -y
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
RUN mkdir -p /opt/maven/repository
RUN mkdir -p /ceph/maven/repository
EOF


该Dockerfile所做的工作为:

安装Maven 

配置Maven仓库位置,以便启动时挂载宿主机仓库为容器中Maven仓库

设置启动用户为root

把jenkins加入docker组,否则无法使用宿主机的docker

安装libltdl7.* 库,否则无法使用宿主机的docker

构建镜像

docker build -t jenkinsci/jenkins:v1 /home/jenkins-dockerfile/

Jenkins启动YAML配置文件

jenkins命令空间创建

cat >namespace-jenkins.yaml<<EOF
apiVersion: v1
kind: Namespace
metadata:
name: jenkins
labels:
name: jenkins
EOF Jenkins 权限配置 此处直接将jenkins-admin集成了cluster-admin权限,可根据自己具体需要进行权限的设置 cat>jenkins-account.yaml<<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: jenkins
name: jenkins-admin
namespace: jenkins ---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: jenkins-admin
labels:
k8s-app: jenkins
subjects:
- kind: ServiceAccount
name: jenkins-admin
namespace: jenkins
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
EOF Jenkins Deployment配置 此处配置简单明了,需要说明的地方是挂在卷,此处挂载了四个目录,下面分别做出挂载原因: /var/jenkins_home(容器) –> /ceph/jenkins_home(宿主机)
我们需要将容器中的Jenkins源目录挂载导本地宿主机,因为该目录下保存了Jenkins产生的所有配置、我们的自定义配置、任务配置及详情等等信息,>所以需要持久化导宿主机,以便重新启动Jenkins容器的时候能够找到相应数据,防止数据丢失。此处我们使用的ceph,保证整个kubernetes集群所有机
器能够共享同一个目录。 /opt/maven/repository(容器) –> /ceph/maven/repository(宿主机)
这一对挂载目录是Maven仓库的挂载目录,不管是Jenkins master容器或者是Jenkins slave目录都需要挂载该目录,以便容器中maven能够在下载编译代
码时能够从该仓库中找到相应Jar包,同时也保证了数据的持久化。 /usr/bin/docker(容器) –> /usr/bin/docker(宿主机)
/var/run/docker.sock(容器) –> /var/run/docker.sock(宿主机)
这两对挂载目录作用是能够在容器中操作宿主机docker,具体的用途是在slave容器中编辑maven代码并生成jar之后,需要生成该代码服务的docker镜像
并上传至本地私有仓库。因此需要操作宿主机docker以便完成这一系列操作
--------------------- cat>jenkins-deployment.yaml<<EOF
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: jenkins
namespace: jenkins
labels:
k8s-app: jenkins
spec:
replicas: 1
selector:
matchLabels:
k8s-app: jenkins
template:
metadata:
labels:
k8s-app: jenkins
spec:
containers:
- name: jenkins
image: jenkinsci/jenkins:v1
imagePullPolicy: IfNotPresent
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
- name: maven-repository
mountPath: /opt/maven/repository
- name: docker
mountPath: /usr/bin/docker
- name: docker-sock
mountPath: /var/run/docker.sock
ports:
- containerPort: 8080
- containerPort: 50000
volumes:
- name: jenkins-home
hostPath:
path: /ceph/jenkins_home
- name: maven-repository
hostPath:
path: /ceph/maven/repository
- name: docker
hostPath:
path: /usr/bin/docker
- name: docker-sock
hostPath:
path: /var/run/docker.sock
serviceAccountName: jenkins-admin
EOF Jenkins Service配置 该Service配置作用是能够让用户访问到Jenkins。此处开放并配置了8080、32000端口,这两个端口在Deployment
中也应该开放。此处配置的宿主机开放端口分别为:31888、32000 cat>jenkins-service.yaml<<EOF
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: jenkins
name: jenkins
namespace: jenkins
annotations:
prometheus.io/scrape: 'true'
spec:
ports:
- name: jenkins
port: 8080
nodePort: 31888
targetPort: 8080
- name: jenkins-agent
port: 50000
nodePort: 50000
targetPort: 50000
type: NodePort
selector:
k8s-app: jenkins
EOF 启动Jenkins镜像容器 kubectl create -f namespace-jenkins.yaml
kubectl apply -f jenkins-account.yaml
kubectl apply -f jenkins-deployment.yaml
kubectl apply -f jenkins-service.yaml 2、生成自定义Jenkins slave镜像 需要使用官方镜像cnych-jenkins,其他的镜像里面都没有kubectl工具,都试过。我这里把官方镜像存到网盘里面了,方便以后使用 下载带kubectl版jenkins镜像

链接:https://pan.baidu.com/s/1RyxKgbHLFTLYqH6ndA_tAg
提取码:7sy3

导入镜像

docker load < cnych-jenkins-jnlp.tar

编写Dockerfile: 

cat>/home/jenkins-dockerfile/Dockerfile <<EOF
FROM cnych/jenkins:jnlp
USER root
RUN apt-get update && apt-get install -y libltdl7.*
RUN apt-get install maven -y

RUN apt-get install git -y
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
RUN mkdir -p /opt/maven/repository
RUN mkdir -p /ceph/maven/repository
EOF

该Dockerfile所做的工作为:

安装Maven

配置Maven仓库位置,以便启动时挂载宿主机仓库为容器中Maven仓库

设置启动用户为root

构建镜像

docker build -t cnych/jenkins:v1 /home/jenkins-dockerfile/

查看镜像

[root@test2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cnych/jenkins v1 969993fe2aa9 23 seconds ago 2.2 GB
jenkinsci/jenkins v1 2114cb298e17 About an hour ago 1.41 GB
cnych/jenkins jnlp a430a5795102 12 days ago 628 MB
jenkinsci/jenkins latest b589aefe29ff 3 months ago 703 MB
coredns/coredns 1.2.0 da1adafc0e78 7 months ago 34.2 MB
infoblox/dnstools latest d0cee038721f 8 months ago 15.7 MB
registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel v0.10.0-amd64 b949a39093d6 10 months ago 44.6 MB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64 3.1 da86e6ba6ca1 14 months ago 742 kB 3、访问并操作Jenkins-master 访问jenkins http://192.168.0.92:31888 查看密码 [root@test2 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f8a62f8a0f7 2114cb298e17 "/sbin/tini -- /us..." About an hour ago Up About an hour k8s_jenkins_jenkins-7b46757695-4hx6f_jenkins_e8cb1035-3fe6-11e9-a258-000c2980fc47_0 docker exec 6f8a62f8a0f7 cat /var/jenkins_home/secrets/initialAdminPassword
471234cd0eb44ec3bfc4015fbacd599b 然后会要求安装一些插件,这里选择默认安装,否则下一步打开是空白页 设置登录用户名密码: admin/jenkins@123 这时候会跳转到首页, 此时Jenkins就可以真正使用了: 对jenkins进行升级 重启jenkins(有点慢,等5分钟) 刷新网页重新登录 admin/471234cd0eb44ec3bfc4015fbacd599b 查看更新后的版本 重置admin密码 进入首页-》系统管理-》全局安全配置 把“启用安全”勾上和把Jenkins专有用户数据库勾上、允许用户注册勾上-》保存 点击右上角的admin-》设置-》修改里面的密码为(jenkins@123)-》保存-》重新登录-》输入账号密码 需要安装的插件
Kubernetes Cli Plugin:该插件可直接在Jenkins中使用kubernetes命令行进行操作。 Kubernetes plugin: 使用kubernetes则需要安装该插件 Kubernetes Continuous Deploy Plugin:kubernetes部署deploymrnt.yaml 时候需要使用 进入首页-》系统管理-》插件管理-》可选插件-》输入kubernetes-》选中所有带kubernetes的插件进行安装-》安装完返回首页 查看所有带kubernetes的插件是否安装上 进入首页-》系统管理-》插件管理-》已安装-》输入kubernetes-》 也可登录该网站:https://plugins.jenkins.io/,查找需要的插件 增加一个kubernetes云 点击 系统管理->系统设置,往下拉可看到云,点击新增一个云来新增一个kubernetes云 配置jenkins连接kubernetes 请参照:https://www.cnblogs.com/effortsing/p/10013441.html 配置Kubernetes Pod Template 其实就是配置Jenkins的jnlp-slave 在该kubernetes云下,新增Kubernetes Pod Template,配置一个模板容器配置,如下图所示:
配置镜像,下面里面的镜像一定要写对,否则写成别的镜像,到最后编译时候就一直报错没有mvn 配置卷:就是deployment.yaml 里面的挂载路径
全局配置(非必须) 点击 系统管理->系统设置,下拉找到全局属性,可根据需要配置Java环境变量、Maven环境变量 全局工具配置 点击 系统管理->全局工具配置,此处可配置配置一些常用的工具配置,比如java、ant、maven、docker 参照:https://www.cnblogs.com/effortsing/p/10375689.html 4、创建Pipeline测试任务 Pipeline任务采用流式的处理方法,步骤清晰,非常适合进行任务配置。点击新建 创建一个Pipeline任务 创建完成后,会进入任务配置界面,下拉找到Pipeline(中文版为:流水线),则可编写Pipeline,进行任务配置 下面pipline里面的简单任务:查看slave镜像里面是否有java的家目录、查看maven的版本等操作, def label = "jnlp-slave"
podTemplate(label: label, cloud: 'kubernetes',containers: [
containerTemplate(name: 'jnlp-slave', image: 'cnych/jenkins:v1')
],
volumes: [hostPathVolume(mounntPath:'/opt/maven/repository',hostPath:'/ceph/maven/repository'),
hostPathVolume(mounntPath:'/usr/bin/docker',hostPath:'/usr/bin/docker'),
hostPathVolume(mounntPath:'/var/run/docker.sock',hostPath:'/var/run/docker.sock')]) {
node(label) {
stage('Get a Maven project') {
container(label) {
stage('wait for exec check'){
sh 'sleep 1'
sh 'echo $JAVA_HOME'
sh 'mvn -v'
} stage('get maven env') {
sh 'cat /etc/resolv.conf'
sh 'cat /etc/issue'
sh 'uname -a'
sh 'env'
} }
}
}
} 查看pod个数:

[root@test2 ~]# kubectl get pod -n jenkins
NAME READY STATUS RESTARTS AGE
jenkins-7b46757695-5k5lg 1/1 Running 0 4h

开始构建



查看pod个数: 发现多了一个pod

[root@test2 ~]# kubectl get pod -n jenkins
NAME READY STATUS RESTARTS AGE
jenkins-7b46757695-5k5lg 1/1 Running 0 4h
jnlp-slave-65srw 2/2 Running 0 23s

构建成功如下图:



查看pod个数

[root@test2 ~]# kubectl get pod -n jenkins

NAME READY STATUS RESTARTS AGE
jenkins-7b46757695-5k5lg 1/1 Running 0 4h
jnlp-slave-65srw 2/2 Terminating 0 31s


再次查看pod个数:发现消失

从上边的pod个数变化中,我们可以清晰的看到 Jenkins Slave 自动创建到注销删除的过程,整个过程是自动完成的,不需要人工干预。

[root@test2 ~]# kubectl get pod -n jenkins
NAME READY STATUS RESTARTS AGE
jenkins-7b46757695-5k5lg 1/1 Running 0 4h

 
4、配置容器版jenkins使用宿主机的kubectl命令

4.1、slave镜像需要使用cnych/jenkins:jnlp,这个官方镜像里面有kubectl工具,其他的没有,都试过,上面就是用的这个镜像,所以直接下一步

4.2、挂载kubectl工具

/root/.kube 目录,我们将这个目录挂载到容器的 /home/jenkins/.kube 目录下面这是为了让我们能够在 Pod 的容器中能够使用 kubectl 工具来访问我们的 Kubernetes 集群,

方便我们后面在 Slave Pod 部署 Kubernetes 应用。添加一个挂在路径,如下图所示:

4.3、pipline脚本如下: 先试试是否能使用宿主机的kubectl命令,只查看一个pod情况: def label = "jnlp-slave"
podTemplate(label: label, cloud: 'kubernetes',containers: [
containerTemplate(name: 'jnlp-slave', image: 'cnych/jenkins:v1')
],
volumes: [hostPathVolume(mounntPath:'/opt/maven/repository',hostPath:'/ceph/maven/repository'),
hostPathVolume(mounntPath:'/usr/bin/docker',hostPath:'/usr/bin/docker'),
hostPathVolume(mounntPath:'/var/run/docker.sock',hostPath:'/var/run/docker.sock'),
hostPathVolume(mounntPath:' /home/jenkins/.kube',hostPath:'/root/.kube')]) {
node(label) {
stage('Get a Maven project') {
container(label) {
stage('wait for exec check'){
sh 'kubectl get pod -n jenkins'
} }
}
}
} 4.4、点击开始构建,如下图所示:



4.5、查看控制台输出,如下图所示:




5、使用jenkins-salve创建一个nignx项目pod

5.1、导入nginx镜像

下载镜像:链接:https://pan.baidu.com/s/1ZvjakBRYNWN3FFSIz0O78g
提取码:8nfj rz nginx.tar docker load < nginx.tar 5.2、pipline脚本如下: def label = "jnlp-slave"
podTemplate(label: label, cloud: 'kubernetes',containers: [
containerTemplate(name: 'jnlp-slave', image: 'cnych/jenkins:v1')
],
volumes: [hostPathVolume(mounntPath:'/opt/maven/repository',hostPath:'/ceph/maven/repository'),
hostPathVolume(mounntPath:'/usr/bin/docker',hostPath:'/usr/bin/docker'),
hostPathVolume(mounntPath:'/usr/bin/docker',hostPath:'/usr/bin/docker'),
hostPathVolume(mounntPath:' /home/jenkins/.kube',hostPath:'/root/.kube')]) {
node(label) {
stage('create a pod') {
container(label) {
stage('cat the pod'){
sh 'kubectl get pod -n jenkins'
} stage('create the deploy-nginx.yaml'){
echo 'create the deploy-nginx.yaml'
sh '''
cat >deploy-nginx.yaml<<EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: http-test-dm2
spec:
replicas: 1
template:
metadata:
labels:
name: http-test-dm2
spec:
containers:
- name: http-test-con
image: nginx
imagePullPolicy: Never
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: http-nginx-ser
spec:
type: NodePort
ports:
- port: 80
nodePort: 31000
targetPort: 80
selector:
name: http-test-dm2
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx
spec:
rules:
- host: www.nginx2.com
http:
paths:
- path: /
backend:
serviceName: http-nginx-ser
servicePort: 80
EOF '''
}
stage('deploy to k8s'){
sh 'kubectl create -f deploy-nginx.yaml' } }
}
}
} 5.3、点击开始构建,如下图所示: 5.4、查看构建好的pod,pod默认会放在在上面第3步中配置的命名空间下, [root@test2 ~]# kubectl get pod -n jenkins
NAME READY STATUS RESTARTS AGE
http-test-dm2-b9776b68c-8b7tk 1/1 Running 0 18s
jenkins-7b46757695-5k5lg 1/1 Running 6 13d
jnlp-slave-pzwtc 2/2 Terminating 0 31s
[root@test2 ~]# kubectl get pod -n jenkins
NAME READY STATUS RESTARTS AGE
http-test-dm2-b9776b68c-8b7tk 1/1 Running 0 1m
jenkins-7b46757695-5k5lg 1/1 Running 6 13d 从上面看到:http-test-dm2-b9776b68c-8b7tk 这就是刚创建的nginx容器 5.4、测试访问nginx,如下图所示: http://192.168.0.92:31000


6、使用jenkins-salve创建一个solo开源博客项目pod(看视频是使用下面方式部署的,)

参照:https://www.cnblogs.com/effortsing/p/10468840.html

6.1、配置jenkins-slave主机节点可以免密登录harbor仓库

参照:https://www.cnblogs.com/effortsing/p/10060748.html

6.2、配置jenkins-slave主机节点上的docker可以登录harbor仓库并且上传镜像到harbor仓库

参照:https://www.cnblogs.com/effortsing/p/10061096.html

6.3、配置jenkins全局工具:添加git工具

进入jenkins界面的全局工具配置里面选择自动安装git工具,目的是拉取gitlab代码

6.4、配置jenkins全局工具:配置jdk、maven家目录,参照:https://www.cnblogs.com/effortsing/p/10480972.html

6.5、配置jenkins全局工具:添加settings.xml,Maven Configuration -> Settings file in filesystem -> File Path  /usr/share/maven/conf/settings.xml

setting.xml需要进到容器里面查看所在的位置,添加操作如下图所示: 6.6、 安装Pipeline Maven Integration 插件 6.7、下载solo源码包、修改代码访问地址、推送到gitlab代码仓库中,参照:https://www.cnblogs.com/effortsing/p/10468840.html 6.8、配置jenkins-master、jenkins-slave主机上的git秘钥到gitlab上实现拉取代码功能, 参照:https://www.cnblogs.com/effortsing/p/10482792.html 6.9、生成pipeline可以用的git链接地址,写到pipline脚本中,这样在pipline脚本才可以从gitlab上拉取代码 参照:https://www.cnblogs.com/effortsing/p/10468840.html 里面的步骤 6.10、编写pipline脚本如下: 注意下面pipline脚本里面的 maven build步骤,里面的JAVA_HOME和mvn工具 都是jenkins-slave里面的,而不是jenkins-master里面的工具, 如何查看jenkins-slave里面JAVA_HOME位置:只有通过构建的时候,在pipline里面写shell命令进行查看,因为制作jenkins-slave镜像的基础 镜像是从官方镜像拉取的,而这个官方jenkins-slave镜像是不能独立启动的,试过,用docker无法启动,只能当slave使用。但是为什么还要用这个 镜像,就是因为这个基础镜像里面包含kubectl工具, 自己之前尝试往jenkins-master镜像里面添加kubectl工具,但是失败, 注意:下面piplene里面的第三个stage步骤里面的JAVA_HOME路径是第一个stage步骤mvn -v 得到的结果有java路径,要填写这个,不要填写echo $JAVA_HOME得到的结果 先编译构建一下,然后得到mvn -v 结果后,及时暂停,然后把java路径填写到第三个stage步骤里面,从新编译打包 def label = "jnlp-slave"
podTemplate(label: label, cloud: 'kubernetes',containers: [
containerTemplate(name: 'jnlp-slave', image: 'cnych/jenkins:v1')
],
volumes: [hostPathVolume(mounntPath:'/opt/maven/repository',hostPath:'/ceph/maven/repository'),
hostPathVolume(mounntPath:'/usr/bin/docker',hostPath:'/usr/bin/docker'),
hostPathVolume(mounntPath:'/usr/bin/docker',hostPath:'/usr/bin/docker'),
hostPathVolume(mounntPath:' /home/jenkins/.kube',hostPath:'/root/.kube')]) {
node(label) {
stage('create a pod') {
container(label) {
stage('cat the pod'){
sh 'kubectl get pod -n jenkins'
sh 'echo $JAVA_HOME'
sh 'mvn -v'
}
stage('git checkout'){ echo 'git clone'
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'c2ca4523-96d0-4fdc-a427-bfefc36a3aa5', url: 'http://192.168.0.96:8081/root/hello.git']]]) } stage('maven build'){ echo 'maven build'
sh '''
export JAVA_HOME=/usr/local/newhope/java1.8
/usr/bin/mvn clean package -Dmaven.test.skip=true
''' } stage('docker build and push images'){ echo 'docker build and push images'
sh '''
REPOSITORY=192.168.0.98:5000/library/solo/solo:${Tag}
cat >Dockerfile<<EOF
FROM 192.168.0.98:5000/library/tomcat-85:latest
RUN rm -rf /usr/local/tomcat/webapps/ROOT/
COPY target/*.war /usr/local/tomcat/webapps/ROOT.war
WORKDIR /usr/local/tomcat
EXPOSE 8080
CMD ["./bin/catalina.sh", "run"]
EOF
docker build -t $REPOSITORY .
docker login -u admin -p Harbor12345 192.168.0.98:5000
docker push $REPOSITORY
'''
} stage('create the deploy-solo.yaml'){
echo 'create the deploy-solo.yaml'
sh '''
REPOSITORY=192.168.0.98:5000/library/solo/solo:${Tag}
cat >deploy-solo.yaml<<EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: http-solo-dm2
spec:
replicas: 1
template:
metadata:
labels:
name: http-solo-dm2
spec:
containers:
- name: http-solo-con
image: $REPOSITORY
imagePullPolicy: Never
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: http-solo-ser
spec:
type: NodePort
ports:
- port: 8080
nodePort: 33580
targetPort: 8080
selector:
name: http-solo-dm2
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: solo
spec:
rules:
- host: www.solo.com
http:
paths:
- path: /
backend:
serviceName: http-solo-ser
servicePort: 8080
EOF '''
}
stage('deploy to k8s'){
sh 'kubectl create -f deploy-solo.yaml' } }
}
}
}

上面pipline脚本做的事情如下:

查看JAVA_HOME

查看maven版本


拉取代码:git checkout


编译打包:maven build


构建并推送镜像:docker build and push images


创建yaml文件:create the deploy-solo.yaml


部署到k8s集群里面:deploy to k8s

6.11、启用Tag标签,参照:https://www.cnblogs.com/effortsing/p/10468840.html 里面的步骤

6.12、开始构建,参照:https://www.cnblogs.com/effortsing/p/10468840.html 里面的步骤

6.13、构建成功如下图所示:



6.14、查看harbor仓库,多出来个镜像,如下图所示


http://192.168.0.98:5000


6.15、查看pod,多出来个pod,但不是Running状态


[root@test2 ~]# kubectl get pod -n jenkins
NAME                   READY         STATUS           RESTARTS          AGE
http-solo-dm2-76676d9cfc-vh6gg   0/1               CrashLoopBackOff      6                      7m
jenkins-7b46757695-tjh2j         1/1               Running               2                      11h


查看报错日志如下:


kubectl logs -f pods/http-solo-dm2-76676d9cfc-vh6gg -n jenkins


[ERROR]-[2019-03-25 13:25:04]-[org.b3log.latke.Latkes:836]: Read skin [Jane]'s configuration failed: null
[ERROR]-[2019-03-25 13:25:04]-[org.b3log.solo.SoloServletListener:302]: Can't load the default skins, please make sure skin [Jane] is under skins directory and structure correctly


分析:可能是代码问题,可能是项目推送到gitlab上的位置不正确,这个需要结合研发来解决,做到这里已经不错了。自己搞很难的,这个暂时先放下,

 

6.17、查看svc,多出来个svc


[root@test2 ~]# kubectl get svc -n jenkins
NAME                   TYPE             CLUSTER-IP             EXTERNAL-IP           PORT(S)                          AGE
http-solo-ser          NodePort         10.100.197.60          <none>                8080:33580/TCP 7m
jenkins                NodePort         10.97.49.156           <none>                8080:31888/TCP,50000:50000/TCP   11h


报错解决:

报错找不到mvn工具,错误如下所示:

/home/jenkins/workspace/pipline-test@tmp/durable-33237322/script.sh: 4: /home/jenkins/workspace/pipline-test@tmp/durable-33237322/script.sh: /usr/bin/mvn: not found

解决:之前编译一直显示找不到mvn工具,是因为下图中配置jenkins-slave镜像时候写错了,没有填写成编译好的cnych/jenkins:v1 镜像,


 

参照:容器版jenkins实现CI/CD:
https://www.cnblogs.com/effortsing/p/10468840.html

制作jenkins镜像参照:

https://blog.csdn.net/a632189007/article/details/79311795

上面链接这篇文档的核心内容如下:

1、生成自定义Jenkins master镜像

Dockerfile:

FROM 192.168.1.184:5000/jenkins/jenkins:2.89.3
ENV MAVEN_VERSION 3.0.5
ENV JAVA_HOME /usr/java/jdk1.8.0_121
ENV MAVEN_HOME /opt/maven/apache-maven-${MAVEN_VERSION}
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# build java
COPY ./jdk1.8.0_121 ${JAVA_HOME}
COPY ./libltdl.so.7 /usr/lib/libltdl.so.7

# build maven
COPY apache-maven-${MAVEN_VERSION}-bin.tar.gz /tmp/maven/apache-maven-${MAVEN_VERSION}-bin.tar.gz
COPY settings.xml /tmp/maven/settings.xml
USER root:root
RUN mkdir -p /opt/maven/repository \
&& cd /opt/maven \
&& tar -zxvf /tmp/maven/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& cp /tmp/maven/settings.xml ${MAVEN_HOME}/conf/settings.xml \
&& rm -rf /tmp/maven

ENV PATH ${JAVA_HOME}/bin:${MAVEN_HOME}/bin:${PATH}

该Dockerfile所做的工作为:
1. 重新安装Java环境并配置环境变量;
2. 安装Maven并配置环境变量;
3. 配置Maven仓库位置,以便启动时挂载宿主机仓库为容器中Maven仓库;
4. 设置启动用户为root。

2、生成自定义Jenkins slave镜像

Dockerfile:

FROM jenkinsci/jnlp-slave:latest
ENV MAVEN_VERSION 3.0.5
ENV JAVA_HOME /usr/java/jdk1.8.0_121
ENV MAVEN_HOME /opt/maven/apache-maven-${MAVEN_VERSION}
ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# build java
COPY ./jdk1.8.0_121 ${JAVA_HOME}
COPY ./libltdl.so.7 /usr/lib/libltdl.so.7

# build maven
COPY apache-maven-${MAVEN_VERSION}-bin.tar.gz /tmp/maven/apache-maven-${MAVEN_VERSION}-bin.tar.gz
COPY settings.xml /tmp/maven/settings.xml
USER root:root
RUN mkdir -p /opt/maven/repository \
&& cd /opt/maven \
&& tar -zxvf /tmp/maven/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& cp /tmp/maven/settings.xml ${MAVEN_HOME}/conf/settings.xml \
&& rm -rf /tmp/maven \
&& apt-get -yq update \
&& apt-get -yq --no-install-recommends --no-install-suggests install sshpass \
&& apt-get clean -y

ENV PATH ${MAVEN_HOME}/bin:${PATH}

该Dockerfile操作与Jenkins master的Dockerfile基本一致。不过该镜像中缺少libltdl.so.7文件,需要从宿主机中拷贝进去,该文件在slave节点容器中使用docker时会用到,因此十分重要


容器板jenkins使用宿主机的kubectl参照:

http://ju.outofmemory.cn/entry/363089

k8s版jenkins--master/slave模式实现CI/CD---带solo开源博客项目--带maven、djk、git工具的更多相关文章

  1. Jenkins—Master/Slave模式

    Jenkins可部署在windows或者linux平台上,项目系统的用户多数为windows系统.如果Jenkins部署在linux上,而自动化任务要在windows平台执行,那么就需要使用Jenki ...

  2. jenkins master/slave模式

    master是主机,只有master装jenkins slave是小弟机无需装jenkins,主要执行master分配的任务 一.新建slave 1.新建slave的方法:点击magian jenki ...

  3. 基于Kubernetes构建企业Jenkins master/slave CI/CD平台

    搭建平台目的: k8s中搭建jenkins master/slave架构,解决单jenkins执行效率低,资源不足等问题(jenkins master 调度任务到 slave上,并发执行任务,提升任务 ...

  4. jenkins的Master/Slave模式

    一. Master/Slave模式 分担jenkins服务器的压力,任务分配到其它执行机来执行 Master:Jenkins服务器 Slave:执行机(奴隶机).执行Master分配的任务,并返回任务 ...

  5. Jenkins Master/Slave架构

    原文:http://www.cnblogs.com/itech/archive/2011/11/11/2245849.html 一 Jenkins Master/Slave架构 Master/Slav ...

  6. Jenkins与Docker的自动化CI/CD实战

    Jenkins与Docker的自动化CI/CD实战 互联网Java架构 2018-09-19 15:46:13 一.发布流程设计 工作流程: 开发人员提交代码到Git版本仓库:Jenkins人工/定时 ...

  7. Java 开源博客——B3log Solo 0.6.6 正式版公布了!

    Java 开源博客 -- B3log Solo 0.6.6 正式版公布了!欢迎大家下载. 该版本号引入了数据库连接池:Druid. 另外,欢迎观摩 B3log 团队的新项目:Noty,也很欢迎大家參与 ...

  8. Java 开源博客——B3log Solo 0.6.7 正式版公布了!

    Java 开源博客 -- B3log Solo 0.6.7 正式版公布了!欢迎大家下载. 另外,欢迎观摩 B3log 团队的新项目:Wide,也很欢迎大家參与进来 :-) 特性 基于标签的文章分类 P ...

  9. Java 开源博客——B3log Solo 0.6.1 正式版发布了!

    Java 开源博客 —— B3LOG Solo 0.6.1 正式版发布了!欢迎大家下载. 该版本主要是改善细节体验,并加入了一款 Metro 风格的皮肤. 特性 基于标签的文章分类 Ping Goog ...

随机推荐

  1. CDH 大数据平台搭建

    一.概述 Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称“CDH”),基于Web的用户界面,支持大多数Hadoop组件,包括 ...

  2. Oracle 重新编译存储过程/函数等

    第一种  如果你使用 PL/SQL Developer工具          左侧工具栏中选择“存储过程”->选择已经失效的procedure->右键->选择重新编译 即可完成 第二 ...

  3. Deepgreen/Greenplum 删除节点步骤

    Deepgreen/Greenplum删除节点步骤 Greenplum和Deepgreen官方都没有给出删除节点的方法和建议,但实际上,我们可以对节点进行删除.由于不确定性,删除节点极有可能导致其他的 ...

  4. 【MongoDB】在C#中使用

    一.MongoClient类 在2.10.0版本中引入了MongoClient类,同时在其API中也说明了Mongo类会在将来的版本中被MongoClient替换(Note: This class h ...

  5. 初识QuartusII 9.0(破解,半加器的仿真,综合:下)

    完成波形的随机设置(A,B任意给定高低电平即可,只是当作测试信号),选择任务栏Assignments[Setings],设置Simulation mode为functional,其余保持不变点击ok. ...

  6. Linux 系统安装下安装 mysql5.7(glibc版)

    转自:https://www.cnblogs.com/mujingyu/p/7689116.html 前言:经过一天半的折腾,终于把 mysql 5.7.17 版本安装上了 centos 7 系统上, ...

  7. git添加公钥后报错sign_and_send_pubkey: signing failed: agent refused operation的解决办法

    在服务器添加完公钥后报错 sign_and_send_pubkey: signing failed: agent refused operation 这个时候我们只要执行下 eval "$( ...

  8. Hbase监控指标项

    名词解释 JMX:Java Management Extensions,用于用于Java程序扩展监控和管理项 GC:Garbage Collection,垃圾收集,垃圾回收机制 指标项来源 主机名 u ...

  9. RIP子网划分及扩展详解

  10. ES6中的class类的理解

    传统的javascript中只有对象,没有类的概念.它是基于原型的面向对象语言.原型对象特点就是将自身的属性共享给新对象.这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的感脚!非常容易让人 ...