1:jenkins基础镜像
jenkins/jenkins:2.235.1-lts-jdk11
jenkins/jenkins:2.235.1-lts-centos7
两个区别在于基础镜像,第一个是Debian GNU/Linux 9.12 (stretch)、第二个是centos7
因为要在jenkins里安装docker(push镜像),而centos7里docker启动docker比较坑爹,选择第一个作为基础镜像。
2:制作dockerfile(run指令有点多,后面再优化,第一次执行安装netcore sdk,第二次docker,第三次kubectl)
FROM jenkins/jenkins:2.235.1-lts-jdk11 user root ADD sources.list /etc/apt/ RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo 'Asia/Shanghai' >/etc/timezone \ && wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \ && dpkg -i packages-microsoft-prod.deb \ && apt-get install -y apt-transport-https \ && apt-get update \ && apt-get install -y dotnet-sdk-3.1 \ && rm -rf /var/lib/apt/lists/* RUN apt update && apt upgrade && apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg2 && curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - \ && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" && apt update && apt install -y docker-ce && service docker start && rm -rf /var/lib/apt/lists/* COPY kubernetes.list /etc/apt/sources.list.d/ COPY daemon.json /etc/docker/ RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak && curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - && apt-get update && apt-get install -y kubectl && rm -rf /var/lib/apt/lists/*
daemon.json(配置docker的镜像加速以及内网ip地址用于构建时推送镜像到内网registry,10.206.0.11:5100换成自己的)
{ "registry-mirrors": [ "https://registry.docker-cn.com" ], "max-concurrent-downloads": 10, "log-driver": "json-file", "log-level": "warn", "log-opts": { "max-size": "10m", "max-file": "3" }, "insecure-registries": ["10.206.0.11:5100"], "data-root":"/var/lib/docker" }
kubernetes.list(安装kubectl需要切换阿里源,google不行你懂的)
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
sources.list(apt换国内源)
deb http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib deb http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib deb http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib deb-src http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib deb-src http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib deb-src http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib deb http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib deb-src http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib
3:安装jenkins(--privileged必须,不然docker里面启动不了docker)
docker run --privileged --name jenkins -p 9101:8080 -d -p 50000:50000 -v /home/jenkins:/var/jenkins_home jenkins/jenkins:core3.1.8
4:配置 jenkins构建(还要配置kubernetes cli还有密钥)
kubectl get pods if ps -ef|grep "docker"|egrep -v grep >/dev/null then echo ok! else service docker start fi #service docker start echo ${BUILD_VERSION} echo ${WORKSPACE} readonly SRC="/src/Services/IdentityService/IdentityApi/" readonly PUBLISH_NAME="api" cd ${WORKSPACE} rm -rf publish mkdir publish cd publish mkdir ./${PUBLISH_NAME} cd ${WORKSPACE}/publish/${PUBLISH_NAME} rm -rf * cd ${WORKSPACE}${SRC} dotnet publish IdentityApi.csproj -c release -f netcoreapp3.1 -r linux-x64 --self-contained false -o ${WORKSPACE}/publish/${PUBLISH_NAME} cd ${WORKSPACE}/publish/${PUBLISH_NAME} cp -f ${WORKSPACE}${SRC}Dockerfile ${WORKSPACE}/publish/${PUBLISH_NAME}/ docker build -t 10.206.0.11:5100/${JOB_NAME}:${BUILD_VERSION} . docker push 10.206.0.11:5100/${JOB_NAME}:${BUILD_VERSION} docker rmi 10.206.0.11:5100/${JOB_NAME}:${BUILD_VERSION} -f #sed -i 's/nginx:v1/nginx:v2/g' image_update.yaml kubectl version kubectl apply -f ../