SpringCloud+Jenkins+Docker+K8s 自动化部署配置
1.在 jenkins 中创建流水线任务
2.生成 credentialsId 的方法
生成成功
2.自定义变量
3.配置流水线脚本
pipeline{
agent any
tools {
jdk 'jdk11'
}
environment {
//xxxxxxxxx 为
DOCKER_CERT_PATH = credentials('xxxxxxxxx')
}
stages{
//初始化变量
stage('初始化'){
steps{
script{
//可以用来区分正式环境 测试环境变量
KIND = "Deployment"
if(CONF_VER== 'prod'){
KIND = "product"
}
//ip:端口 为 docker 的ip和端口号/harbor 的上传地址
PATCH ="ip:端口号/asset_management_pro/asset_management_pro"
IMAGE = "${PATCH}:${BUILD_ID}"
}
echo "IMAGE ${IMAGE}"
}
}
stage('下载代码'){
steps{
//AAAAAAA 为jeckins 配置的gitlab 的用户id 可生成在上一步有生成步骤
//http://bbbb.git 为git代码克隆地址
git branch: 'master', credentialsId: 'AAAAAAA', url: 'http://bbbb.git'
}
}
stage('构建镜像'){
steps{
sh """
//切换项目,目录层级,并打包
cd yunyi-platform/yunyi-parent
mvn package
//切换到要构建镜像项目的层级,去构建项目镜像
cd ..
cd yunyi-asset-manager
//ip:端口号 docker 的 ip 和端口号
docker build --network host -t ip:端口号/asset_management_pro/asset_management_pro:${BUILD_ID} .
"""
}
}
stage('推送镜像到Harbor'){
steps{
sh """
//docker 的登录 账号 密码 和 ip
docker login -u 账号 -p 密码 ip:端口号
//把项目推送到 Harbor所建立的项目文件中
//ip:端口号为docker的ip和端口号
//第一个 /asset_management_pro 为Harbor创建的项目名称
//第二个为 在项目目录下建立asset_management_pro 会自动生成
docker push ip:端口号/asset_management_pro/asset_management_pro:${BUILD_ID}
"""
}
}
stage('部署到k8s'){
steps{
sh """
//往 deploy.yml 中传递变量值
sed -i \"s#{KIND}#${KIND}#g\" yunyi-platform/yunyi-asset-manager/deploy.yml
sed -i \"s#{IMAGE}#${IMAGE}#g\" yunyi-platform/yunyi-asset-manager/deploy.yml
//读取deploy.yml文件 写deploy.yml所在的目录结构
sed -i \"s#{version}#${BUILD_ID}#g\" yunyi-platform/yunyi-asset-manager/deploy.yml
//读取deploy.yml文件 写deploy.yml所在的目录结构
kubectl --kubeconfig=/kc1 apply -f yunyi-platform/yunyi-asset-manager/deploy.yml
"""
}
}
}
}
4.项目添加文件 dockerfile,deploy.yml
dockerfile 配置
FROM primetoninc/jdk:1.8
#WORKDIR指令用于指定容器的一个目录,容器启动时执行的命令会在该目录下执行。
WORKDIR /opt/wy_asset_management_pro
#拷贝依赖jar到容器中
COPY target/xxxxx-1.0.14-SNAPSHOT.jar /opt/wy_asset_management_pro
WORKDIR /opt/wy_asset_management_pro
#暴露端口
EXPOSE 8200
#运行程序
ENTRYPOINT exec java -jar xxxx-1.0.14-SNAPSHOT.jar &
deploy.yml 配置
apiVersion: apps/v1
kind: {KIND}
metadata:
labels:
app: asset-management #起一个名称随便但不能用下划线
name: asset-management
spec:
replicas: 1
selector:
matchLabels:
app: asset-management
template:
metadata:
labels:
app: asset-management
spec:
containers:
- name: asset-management
imagePullPolicy: IfNotPresent
#ip:端口 为 docker 的ip和端口号 / harbor 上传的地址 {version} 为传递进来的 版本号参数
#ip:端口号/asset_management_pro/asset_management_pro:{version}
image: {IMAGE}
command: ["java", "-jar", "/opt/wy_asset_management_pro/xxxxx-SNAPSHOT.jar"]
restartPolicy: Always