先创建一个Dockerfile
只增加了maven命令(也可以把下面挂载的目录都打包进来),推到镜像仓库
FROM jenkins/inbound-agent
MAINTAINER jzc
USER root
# 安装 maven
ADD apache-maven-3.6.2-bin.tar.gz /usr/local
RUN 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/repo
COPY settings.xml /usr/local/apache-maven/conf/settings.xml
USER jenkins
这个tag为:172.21.114.171:80/k8s-image/jenkins-slave-mvn:v4,下面的image要用
新建jenkins的pipline:
挂载主机目录(这里在做docker镜像的时候,没有把这些命令打包进去。)
1,/var/run/docker.sock #用来打包docker镜像
/usr/bin/docker
2,/home #这里包含了我的.kube目录(里面有kubeconfig令牌)和kubectl二进制文件,用来操作k8s集群
3,/usr/bin/git #保证你的主机安装了git,用来git clone代码
/usr/lib64/libpcre.so.1.2.0 #这个是git的依赖库,需要改名
pipline测试代码:
//测试
def label = "test-${UUID.randomUUID().toString()}"
podTemplate(label: 'label', cloud: 'kubernetes', containers: [
containerTemplate(
name: 'jnlp',
image: '172.21.114.171:80/k8s-image/jenkins-slave-mvn:v4'
),
],
volumes: [
hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'),
hostPathVolume(mountPath: '/usr/bin/docker', hostPath: '/usr/bin/docker'),
hostPathVolume(mountPath: '/home/jenkins', hostPath: '/home'),
hostPathVolume(mountPath: '/usr/bin/git', hostPath: '/usr/bin/git'),
hostPathVolume(mountPath: '/lib/libpcre.so.1', hostPath: '/usr/lib64/libpcre.so.1.2.0'),
],)
{
node('label') {
stage('Task') {
stage('1-拉取代码') {
sh "git --version"
}
stage('2-编译打包') {
sh "mvn --version"
}
stage('3-构建上传镜像') {
sh "docker --version"
}
stage('4-部署'){
sh "/home/jenkins/kubectl get pod"
}
}
}
}
点击构建,输出结果:
这几个命令都没问题。