jenkins 发布k8s项目流程
大致流程开发人员把做好的 knight.blog.csdn.net 项目代码通过git推送到gitlab然后Jenkins通过 gitlab webhook (前提是配置好),自动从拉取gitlab上面拉取代码下来,然后进行build,编译、生成镜像、然后把镜像推送到Harbor仓库;然后在部署的时候通过k8s拉取Harbor上面的代码进行创建容器和服务,最终发布完成,然后可以用外网访问形象图描述
文章共719字 · 阅读需要大约3分钟
一键AI生成摘要,助你高效阅读
问答
·
大致流程
- 开发人员把做好的 knight.blog.csdn.net 项目代码通过git推送到gitlab
- 然后Jenkins通过 gitlab webhook (前提是配置好),自动从拉取gitlab上面拉取代码下来。(作用是实现本地 git push 后 jenkins 自动构建部署服务)
- 然后进行build,编译、生成镜像、然后把镜像推送到Harbor仓库;
- 然后在部署的时候通过k8s拉取Harbor上面的代码进行创建容器和服务,最终发布完成,然后可以用外网访问
第一阶段,获取代码(Git)
第二阶段,编译打包(Maven)
第三阶段,镜像打包与推送到仓库 (Harbor)
第四阶段,部署应用到k8s集群 (kubectl)
pipeline 的编写
pipeline{
environment{
// 定义变量,或从Jenkins传入进来的变量
}
agent{
node{
// 选择 k8s 集群节点
}
}
stages{
stage('获取代码'){
steps{
// 拉取项目程序源码
}
}
stage('代码编译打包'){
steps{
container("maven") {
// 使用 maven 容器,编译打包
}
}
}
stage('镜像构建推送'){
steps{
container("kaniko") {
// 使用 kaniko 容器, docker镜像编译与推送到镜像仓库
}
}
}
stage('获取部署配置'){
steps{
// 拉取 yaml 部署文件
}
}
stage('应用部署到K8S集群') {
steps {
container('kubectl') {
// 使用 kubectl 容器, 执行 yaml 部署文件,部署应用到 k8s集群
}
}
}
}
}
形象图描述如下:
命令流程
export JENKINS_HOME="/root/.jenkins/workspace/springboot-jenkins"
export JENKINS_VERSION="v0.1"
echo "JENKINS_HOME:${JENKINS_HOME},JENKINS_VERSION:${JENKINS_VERSION}"
echo "开始打包"
mvn clean
mvn package
echo "开始制作镜像"
docker build -t 你的私有Harbor地址/knight/jenkins:$JENKINS_VERSION $JENKINS_HOME
echo "开始推镜像"
docker push 你的私有Harbor地址/knight/jenkins:$JENKINS_VERSION
echo "开始运行镜像"
kubectl apply -f $JENKINS_HOME/build/jenkins-svc.yaml
# 使用envsubst传递export的参数
envsubst < $JENKINS_HOME/build/jenkins-deployment.yaml | kubectl apply -f -
编写DockerFile:
# Java8镜像
FROM knight/base:latest
WORKDIR /
# 将系统编码设置为c.utf-8,默认的POSIX不支持中文
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
# 将子项目打包的jar包拷贝到项目根目录
COPY target/springboot-jenkins-0.0.1-SNAPSHOT.jar /jenkins.jar
# 设置容器启动时执行的命令,-Dfile.encoding=utf-8
CMD ["java", "-jar", "jenkins.jar"]
编写暴露端口的Service:jenkins-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: jenkinks-service
labels:
app: jenkinks-service
spec:
type: NodePort
ports:
- port: 8888
name: jenkinks-service
targetPort: 8888
nodePort: 32088
protocol: TCP
selector:
app: jenkinks-service
编写Deployment: jenkins-svc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkinks-deployment
spec:
replicas: 1
selector:
matchLabels:
name: jenkinks-service
template:
metadata:
labels:
name: jenkinks-service
app: jenkinks-service
spec:
containers:
- name: jeecg
image: 你的私有Harbor地址/knight/jenkins:$JENKINS_VERSION
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8888
参考
# 参考1
https://www.cnblogs.com/shawhe/p/11313633.html
更多推荐
已为社区贡献2条内容
所有评论(0)