DevOps 项目创建
这里的代码仓库不选
默认选项勾选
参考JenkinsFile如下:
pipeline {
agent {
node {
label 'maven'
}
}
stages {
stage('拉取代码') {
agent none
steps {
container('maven') {
git(url: '代码仓库克隆地址', credentialsId: '自己创建代码仓库凭证名称', branch: '分支', changelog: true, poll: false)
}
}
}
stage('编译打包') {
agent none
steps {
container('maven') {
sh 'mvn clean compile install -Dmaven.test.skip=true'
}
}
}
stage('构建和推送镜像') {
agent none
steps {
container('maven') {
sh '''ls -al
pwd
docker build -f ./deploy/uat/Dockerfile -t $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BUILD_NUMBER .'''
withCredentials([usernamePassword(credentialsId : '自己创建harbor凭证名称' ,passwordVariable : 'HARBOR_PASSWORD' ,usernameVariable : 'HARBOR_USERNAME' ,)]) {
sh '''echo "$REGISTRY"
echo "$HARBOR_PASSWORD" | docker login $REGISTRY -u "$HARBOR_USERNAME" --password-stdin'''
sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BUILD_NUMBER'
}
}
}
}
stage('部署应用') {
agent none
steps {
container('maven') {
withCredentials([kubeconfigContent(credentialsId : '自己创建kubeconfig凭证名称' ,variable : 'KUBECONFIG_CONTENT' ,)]) {
sh '''ls -al
pwd
mkdir ~/.kube
echo "$KUBECONFIG_CONTENT" > ~/.kube/config
envsubst < deploy/uat/app-namespace.yaml | kubectl apply -f -
envsubst < deploy/uat/app-svc.yaml | kubectl apply -f -
envsubst < deploy/uat/app-deployment.yaml | kubectl apply -f -'''
}
}
}
}
}
}
凭证需要编辑流水线单独创建
label ‘maven’ 运维创建的maven容器名字要对应
app-namespace.yaml app-svc.yaml app-deployment.yaml Dockerfile 这四个文件要在项目src 源码目录同级 创建deploy/uat/目录 并且上传到代码仓库
Dockerfile 参考
FROM 镜像名
MAINTAINER zhiwen.zeng@zhixunchelian.cn
# 这里替换的两个文件一个是解决tomcat8-9版本 递归加载jar导致的服务启动报错bug 另一个是 加入了JVM启动参数和 JVM环境变量
#定义替换的文件路径
ENV WORK_PATH /usr/local/tomcat/bin
ENV WORK_CONF_PATH /usr/local/tomcat/conf
#定义替换的文件名
ENV CATALINA_NAME catalina.sh
ENV CATALINA_PROPERTIES_NAME catalina.properties
#设置日志文件可读
ENV UMASK 022
# 修改时区:Asia/Shanghai
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone
RUN rm $WORK_PATH/$CATALINA_NAME
RUN rm $WORK_CONF_PATH/$CATALINA_PROPERTIES_NAME
COPY ./deploy/uat/$CATALINA_NAME $WORK_PATH/
COPY ./deploy/uat/$CATALINA_PROPERTIES_NAME $WORK_CONF_PATH/
RUN chmod 777 $WORK_PATH/$CATALINA_NAME
RUN chmod 777 $WORK_CONF_PATH/$CATALINA_PROPERTIES_NAME
#将编译的war包放入tomcat中
COPY ./target/demo.war /usr/local/tomcat/webapps/
EXPOSE 8080
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
app-svc.yaml
apiVersion: v1
kind: Service
metadata:
namespace: 项目名-环境名
name: 项目名-app-service
spec:
selector:
app: 项目名-app
ports:
- port: 8080
targetPort: 8080
nodePort: 8080
type: NodePort
sessionAffinity: ClientIP
app-namespace.yaml 参考
apiVersion: v1
kind: Namespace
metadata:
name: 项目名-环境名
app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: 项目名-项目描述app
namespace: 项目名-环境名
labels:
app: 项目名-项目描述app
tier: frontend
env: 环境名
spec:
replicas: 1
minReadySeconds: 30
selector:
matchLabels:
app: 项目名-项目描述app
matchExpressions:
- {key: tier, operator: In, values: [frontend]}
- {key: env, operator: In, values: [环境名]}
strategy:
type: Recreate
template:
metadata:
name: 项目名-项目描述app
labels:
app: 项目名-项目描述app
tier: frontend
env: 环境名
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- 项目名-项目描述app
topologyKey: "kubernetes.io/hostname"
containers:
- name: 项目名-项目描述app
#这里的镜像用流水线创建的环境变量名 BUILD_NUMBER是平台构建的一个入参 自动传入
image: $REGISTRY/$DOCKERHUB_NAMESPACE/$APP_NAME:$BUILD_NUMBER
imagePullPolicy: IfNotPresent
# securityContext:
# readOnlyRootFilesystem: true
ports:
- containerPort: 8080
volumeMounts:
- name: 项目名-项目描述app-logs
mountPath: /app/logs # 项目配置的日志目录
resources:
requests:
cpu: "500m"
memory: "4096Mi"
limits:
cpu: "3000m"
memory: "4096Mi"
imagePullSecrets:
- name: myregistrykey
volumes:
- name: 项目名-项目描述app-logs
hostPath:
path: /app/项目名/uat/app/logs # 日志挂载路径
restartPolicy: Always
创建凭证
创建完成运行流水线
目前遇上的构建错误解决
- 镜像拉取失败
错误原因: harbor仓库的项目 创建的时候勾选了私有化 k8s里面没有配置认证 把公开勾选取消就可以解决了 - “STDIN” : namespaces "XXX"is forbidten: User “zzw"cannat get resource “hanespaces” in API group “” in the namespace"demo-uat”
错误原因: 当前账户zzw存在权限问题 部署应用凭证那里需要运维加权限或者由运维去创建 - pom依赖无法下载
需要把无法下载的pom jar 传入Nexus 再由运维配置maven仓库地址
项目创建
名称要和namespace.yaml 里面的名称一致 用于项目各种指标和配置查看
如果流水线运行成功 这里创建一个项目能自动匹配里面的容器和服务
日志查看
右下角有个锤子按钮点击查看
评论区