deploy scripts for openshift

本文介绍了一个自动化部署流程的脚本实现,包括Maven构建、Docker镜像构建与推送、OpenShift资源更新等步骤,实现了从代码构建到部署的全流程自动化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/ksh
#ident "%W%"


ENV=${1:-dev}
APP_SEQ=${2:-1}


ROOT_FOLDER=$(pwd)


function prop {
    grep "${1}" $ROOT_FOLDER/$ENV.properties|cut -d'=' -f2
}
APP_NAME=$(sed -n ${APP_SEQ}p deploy.lst)


echo "Mvn build for app [$(prop 'app.name')]..."
cd $ROOT_FOLDER/$APP_NAME
mvn clean package -Dmaven.test.skip=true


docker build -t $APP_NAME:$ENV-build --build-arg WORK_PATH=$(prop 'root.path') --build-arg SERVICE_NAME=${APP_NAME} --build-arg PORT=$(prop ${APP_NAME}'.service.port') $ROOT_FOLDER
docker tag $APP_NAME:$ENV-build $(prop 'docker.repo')/$APP_NAME:$(prop 'image.tag')


docker login $(prop 'docker.repo') -u xd20319 -p Asdf56jkl@?
docker push $(prop 'docker.repo')/$APP_NAME:$(prop 'image.tag')


docker rmi -f $(docker images | grep $APP_NAME | awk '{print $3;}')




echo "Deploy application [$APP_NAME]..."
echo "PROJECT_NAME=$(prop 'project.name')"
echo "APP_NAME=${APP_NAME}"
echo "TAG=$(prop 'image.tag')"
echo "SERVICE_PORT=$(prop ${APP_NAME}'.service.port')"
echo "REPLICA_COUNT=$(prop 'replica.count')"
echo "HOSTNAME=$(prop 'hostname')"
echo "DOCKER_REPOSITORY=$(prop 'docker.repo')"
echo "ROOT_PATH=$(prop 'root.path')"
echo "ENV_NAME=${ENV}"
echo "APP_ID=${APP_SEQ}"
echo "VOLUME_NAME=$(prop 'volume.name')"
echo "VOLUME_CAPCITY=$(prop 'volume.capcity')"


oc login -u $(prop 'openshift.user') -p $(prop 'openshift.pass')
oc project $(prop 'project.name')
oc process -f $ROOT_FOLDER/deploy.json \
-l app=$APP_NAME \
-l project=$(prop 'project.name') \
-p PROJECT_NAME=$(prop 'project.name') \
-p APP_NAME=${APP_NAME} \
-p TAG=$(prop 'image.tag') \
-p SERVICE_PORT=$(prop ${APP_NAME}'.service.port') \
-p HOSTNAME=$(prop 'hostname') \
-p DOCKER_REPOSITORY=$(prop 'docker.repo') \
-p ROOT_PATH=$(prop 'root.path') \
-p ENV_NAME=${ENV} \
-p APP_ID=${APP_SEQ} \
-p VOLUME_NAME=$(prop 'volume.name') \
-p VOLUME_CAPCITY=$(prop 'volume.capcity') > $ROOT_FOLDER/deploy.json.temp


sed -i s/1116/$(prop ${APP_NAME}'.service.port')/g $ROOT_FOLDER/deploy.json.temp


cat $ROOT_FOLDER/deploy.json.temp | oc apply -f -



rm -f $ROOT_FOLDER/deploy.json.temp




{
    "kind": "Template",
    "apiVersion": "v1",
    "parameters": [
      {
         "name": "PROJECT_NAME",
         "displayName": "Project Name",
         "description": "The name for the project."
      },
      {
         "name": "APP_NAME",
         "displayName": "App Name",
         "description": "The name for the project."
      },
      {
         "name": "TAG",
         "displayName": "project Name",
         "description": "The name for the project."
      },      
      {
         "name": "SERVICE_PORT",
         "displayName": "Service Port",
         "description": "Service Port"
      },
      {
         "name": "HOSTNAME",
         "displayName": "Host Name",
         "description": "The host name for the project."
      },
      {
         "name": "REPLICA_COUNT",
         "displayName": "Replica Count",
         "description": "Number of replicas to run.",
         "value": "2",
         "required": true
      },
      {
         "name": "SSH_SECRET",
         "displayName": "SSH Secret",
         "description": "Openshift Secret for Git SSH.",
         "value": "repo-at-bitbucket",
         "required": true
      },
      {
         "name": "DOCKER_REPOSITORY",
         "displayName": "Docker Artifactory Repository",
         "description": "Docker Artifactory Repository."
      },
      {
         "name": "ROOT_PATH",
         "displayName": "Path of volume",
         "description": "Path of volume"
      }
      ,
      {
         "name": "ENV_NAME",
         "displayName": "Env Name",
         "description": "Env Name"
      },
      {
         "name": "APP_ID",
         "displayName": "App ID",
         "description": "App ID"
      },
      {
         "name": "VOLUME_NAME",
         "displayName": "NFS Volume Name",
         "description": "NFS Volume Name"
      },
      {
         "name": "VOLUME_CAPCITY",
         "displayName": "NFS Volume Capcity",
         "description": "NFS Volume Capcity"
      }
    ],
    "objects": [
      {
        "apiVersion": "v1",
        "kind": "PersistentVolumeClaim",
        "metadata": {
            "name": "claim1"
        },
        "spec": {
            "accessModes": [ "ReadWriteOnce" ],
            "resources": {
                "requests": {
                    "storage": "${VOLUME_CAPCITY}"
                },
            "volumeName": "${VOLUME_NAME}"
            }
        }
        },
      {
         "kind": "DeploymentConfig",
         "apiVersion": "v1",
         "metadata": {
            "name": "${APP_NAME}",
            "labels": {
                "app": "${APP_NAME}",
                "project": "${PROJECT_NAME}"
            }
         },
         "spec": {
            "replicas": "${{REPLICA_COUNT}}",
            "selector": {
                "app": "${APP_NAME}",
                "project": "${PROJECT_NAME}"
            },
            "strategy": {
              "type": "Rolling"
            },
            "template": {
               "metadata": {
                  "name": "${APP_NAME}",
                  "labels": {
                      "app": "${APP_NAME}",
                      "project": "${PROJECT_NAME}"
                  }
               },
               "spec": {
                  "containers": [
                     {
                        "name": "${APP_NAME}",
                        "image": "${DOCKER_REPOSITORY}/${APP_NAME}:${TAG}",
                        "imagePullPolicy": "Always",
                        "env": [


                        ],
                        "ports": [
                           {
                              "containerPort": "${SERVICE_PORT}",
                              "protocol": "TCP"
                           }
                        ],
                        "volumeMounts": [
                             {
                                "name": "${APP_NAME}-vo",
                                "mountPath": "${ROOT_PATH}"
                             }
                          ]
                     }
                  ],
                  "volumes": [
                       {
                          "name": "${APP_NAME}-vo",
                          "persistentVolumeClaim": {
                              "claimName": "claim1"
                          }
                       }
                    ],
                  "restartPolicy": "Always"
               }
            }
         }
      },
      {
         "kind": "Route",
         "apiVersion": "v1",
         "metadata": {
            "name": "${APP_NAME}",
            "labels": {
              "app": "${APP_NAME}",
              "project": "${PROJECT_NAME}"
            }
         },
         "spec": {
            "host": "${APP_NAME}.${HOSTNAME}",
            "to": {
               "kind": "Service",
               "name": "${APP_NAME}"
            }
         }
      },
      {
         "kind": "Service",
         "apiVersion": "v1",
         "metadata": {
            "name": "${APP_NAME}",
            "labels": {
              "app": "${APP_NAME}",
              "project": "${PROJECT_NAME}"
            }
         },
         "spec": {
            "ports": [
               {
                  "name": "${APP_NAME}-port",
                  "port": "${SERVICE_PORT}",
                  "protocol": "TCP",
                  "targetPort": "${{SERVICE_PORT}}"
               }
            ],
            "selector": {
                "app": "${APP_NAME}",
                "project": "${PROJECT_NAME}"
            }
         }
      }
    ]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值