jenkins+pipeline+kubernetes部署java服务
jenkins+pipeline+kubernetes部署java服务
脚本文件编写
查询模板脚本情况
[root@k8s-jenkins jenkins_home]# ls model/
build.sh deploy.yaml dockerfile leaf.properties
查询dockerfile文件
cat model/dockerfile
FROM java:8
VOLUME /app
COPY INAME.jar INAME.jar
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN bash -c "touch /INAME.jar"
EXPOSE 8085
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./uranedom","-jar","-Dspring.profiles.active=test", "-Dserver.port=8085", "-Duser.timezone=GMT+08", "/INAME.jar"]
查看build.sh文件
[root@k8s-jenkins jenkins_home]# cat model/build.sh
#!/bin/bash
#DOCKER_HOME=/var/jenkins_home/tools/docker
#export PATH=$PATH:$DOCKER_HOME
docker build -t $1:$2 .
# 制作镜像
docker tag $1:$2 harbor-test.sgpexchange.com/sgpexchange_test/$1:$2 # 镜像做tar标记
docker login -u admin -p 12345 harbor-test.sgpexchange.com
docker push harbor-test.sgpexchange.com/sgpexchange_test/$1:$2 # 将镜像上传致我们的镜像库,一般都是私有镜像库
4、文件中的leaf.properties文件为服务配置文件
jenkins配置
1、配置丢弃构建
2、配置构建发布参数
3、配置git参数
4、配置java服务名称
5、配置环境参数
6、配置Pipeline Script
其中需要配置gitlab账号参数(credentialsId: ‘c5d7e5af-f442-44ed-98ff-d7a097cd4f49’)
pipeline script脚本内容
// 部署远程主机ip地址,需要通过密钥的方式设置免密登录
def remoteIp = "192.168.1.214"
def remotePort='22'
// 远程tomcat位置(windows要使用/来表示路径)
def tomcatPath = "/var/jenkins_home/image/${envir}"
def project='leaf-server'
def service='test'
def v='123'
def img=''
node (){ //指定Slave标签
stage('Git Checkout') {
if("Deploy" == env.status){
checkout([$class: 'GitSCM', branches: [[name: '${tag}']],
userRemoteConfigs: [[credentialsId: 'c5d7e5af-f442-44ed-98ff-d7a097cd4f49',
url: 'http://gitlab.tqxd.com/new-sgp/leaf.git']]])
}else{
echo "回滚版本跳过拉取代码";
}
}
stage('Maven Build') {
if("Deploy" == env.status){
sh '''
MAVEN_HOME=/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.6.3
export PATH=$MAVEN_HOME/bin:/var/jenkins_home/tools/jdk1.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
mvn clean install -am -Dmaven.test.skip=true
'''
}else{
echo "回滚版本跳过拉取代码";
}
}
stage('push') {
if("Deploy" == env.status){
echo "pushde时间:${v}"
sh '''
mkdir -p /var/jenkins_home/image/${envir}/
cp /var/jenkins_home/model/dockerfile /var/jenkins_home/image/${envir}/
cp /var/jenkins_home/model/build.sh /var/jenkins_home/image/${envir}
mkdir -p /var/jenkins_home/image/${envir}/${name}-conf/
cp /var/jenkins_home/model/leaf.properties /var/jenkins_home/image/${envir}/${name}-conf/
cp /var/jenkins_home/model/deploy.yaml /var/jenkins_home/image/${envir}/${name}.yaml
sed -i 's/model/'${name}'/g' /var/jenkins_home/image/${envir}/${name}.yaml
sed -i 's/version/'${envir}'/g' /var/jenkins_home/image/${envir}/${name}.yaml
sed -i 's/INAME/'${name}'/g' /var/jenkins_home/image/${envir}/dockerfile
cp /var/jenkins_home/workspace/${JOB_NAME}/${name}/target/*.jar /var/jenkins_home/image/${envir}/${name}.jar
'''
v = sh(script: "date +%Y%m%d.%H%M%S", returnStdout: true).trim()
sh(script: "cd /var/jenkins_home/image/${envir}/ && ./build.sh ${name} ${envir}", returnStdout: true).trim()
img = "harbor-test.sgpexchange.com/${name}:v${envir}"
}else{
echo "回滚版本跳过拉取代码";
}
}
stage('publish') {
if("Rollback" == env.status){
img = env.Deploy
}
sh '''
pwd
'''
echo "end的时间出:${v}"
sh(script: "cd /var/jenkins_home/image/test && ./build.sh ${name} ${envir}", returnStdout: true).trim()
sh '''
echo "end img:${img}"
'''
}
stage('end') {
if("Rollback" == env.status){
img = env.Deploy
}
sh(script: "scp -i /var/jenkins_home/.ssh/id_rsa.pem /var/jenkins_home/image/${envir}/${name}.yaml root@192.168.1.214:/root/", returnStdout: true).trim()
sh(script: "scp -i /var/jenkins_home/.ssh/id_rsa.pem -r /var/jenkins_home/image/${envir}/${name}-conf/ root@192.168.1.214:/root/", returnStdout: true).trim()
sh(script: "ssh -i /var/jenkins_home/.ssh/id_rsa.pem -t root@192.168.1.214 'kubectl replace --force -f '${name}'.yaml'", returnStdout: true).trim()
}
}
构建job查看job运行情况
k8s服务pods查询
在k8s服务中查看各种信息
1、查询pods服务
[root@k8s-master ~]# kubectl get pods -n k8s-test -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
leaf-server-6c8b4d8454-r2blv 1/1 Running 0 90m 10.244.3.58 k8s-node3 <none> <none>
2、查询service服务
[root@k8s-master ~]# kubectl get svc -n k8s-test -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
leaf-server-service NodePort 10.109.121.210 <none> 8085:31079/TCP 91m app=leaf-server
3、查询deployment服务
[root@k8s-master ~]# kubectl get deployment -n k8s-test -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
leaf-server 1/1 1 1 92m leaf-server harbor-test.sgpexchange.com/sgpexchange_test/leaf-server:test app=leaf-server
4、查询configmap服务
[root@k8s-master ~]# kubectl get configmap -n k8s-test -o wide
NAME DATA AGE
kube-root-ca.crt 1 3d1h
leaf-server-config 1 3d
测试
1、通过nodeport地址测试
http://192.168.1.214:31079/api/segment/get/leaf_ransom_order_id
2、宿主服务测试
至此服务部署完毕
————————————————
版权声明:本文为CSDN博主「yunson_Liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_38432732/article/details/124988310
jenkins+pipeline+k8s+harbor部署java环境
1、gitlab部署
部署详情:Ubuntu系统安装gitlab-server(https://blog.csdn.net/baidu_38432732/article/details/90371731)
再上传代码
2、部署harbor镜像仓库
详情见:https://blog.csdn.net/baidu_38432732/article/details/106430307
3、jenkins安装部署并创建job项目
1)创建pipeline项目
2)设置版本参数
3)配置gitlab源
4)配置pipeline
3、编写pipeline文件jenkinsfile
pipeline {
agent {
node {
label 'master'
}
}
// 拉取代码
stages {
stage('GetCode') {
steps {
sleep 5
}
}
// 代码打包
stage('Maven Build') {
steps {
sh '''
export JAVA_HOME=/home/java8
cd /root/.jenkins/workspace/now-pipeline-test/mall-portal/
/home/maven-3.6.2/bin/mvn clean install -Ptest
'''
}
}
// 推送到镜像仓库
stage('Push Image') {
steps {
sh '''
REPOSITORY=registry.yunson.com/hahamall/portal:${Tag}
docker build -t $REPOSITORY /root/.jenkins/workspace/now-pipeline-test/mall-portal/docker/pre-prod/
docker login registry.yunson.com -u admin -p Harbor12345
docker push $REPOSITORY
'''
}
}
// 部署到Docker主机
stage('Deploy to Docker') {
steps {
//远程执行脚本
sh '''
ssh -i /root/.ssh/harbor root@registry.yunson.com "sh /root/portal/portal.sh"
'''
}
}
}
}
dockerfile文件
FROM java:8
VOLUME /app
COPY mall-portal*.jar mall-portal.jar
COPY application.yml application.yml
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN bash -c "touch /mall-portal.jar"
EXPOSE 8085
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./uranedom","-jar","-Dspring.profiles.active=pre-prod", "-Duser.timezone=GMT+08", "/mall-portal.jar"]
k8s yaml配置文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: portal
labels:
name: portal
spec:
replicas: 1
selector:
matchLabels:
app: portal
template:
metadata:
labels:
app: portal
spec:
containers:
- name: portal
image: registry.yunson.com/hahamall/portal:v1.0.0
#imagePullPolicy: Never
imagePullPolicy: IfNotPresent
#imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
volumeMounts:
- name: tz-config
mountPath: /etc/localtime
#- name: portal-config
# mountPath: /config/
volumes:
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
#- name: portal-config
#configMap:
# name: otc-config
#定义configmap名称
---
kind: Service
apiVersion: v1
metadata:
name: portal-service
spec:
# clusterIP: 10.108.124.235
clusterIP: 10.96.0.234
selector:
#node: portal
app: portal
ports:
- port: 8080
targetPort: 8080
nodePort: 31098
type: NodePort
————————————————
版权声明:本文为CSDN博主「yunson_Liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_38432732/article/details/115233922
更多推荐
所有评论(0)