diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7a783f2 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base +WORKDIR /app +EXPOSE 80 +EXPOSE 443 + +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build +WORKDIR /src +COPY ["BPA.KitChen.GroupMeal/BPA.KitChen.GroupMeal.csproj", "BPA.KitChen.GroupMeal/"] +COPY ["BPA.KitChen.GroupMeal.Application/BPA.KitChen.GroupMeal.Application.csproj", "BPA.KitChen.GroupMeal.Application/"] +COPY ["BPA.KitChen.GroupMeal.Core/BPA.KitChen.GroupMeal.Core.csproj", "BPA.KitChen.GroupMeal.Core/"] +COPY ["BPA.KitChen.GroupMeal.SqlSugar/BPA.KitChen.GroupMeal.SqlSugar.csproj", "BPA.KitChen.GroupMeal.SqlSugar/"] +RUN dotnet restore "BPA.KitChen.GroupMeal/BPA.KitChen.GroupMeal.csproj" +COPY . . +WORKDIR "/src/BPA.KitChen.GroupMeal" +RUN dotnet build "BPA.KitChen.GroupMeal.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "BPA.KitChen.GroupMeal.csproj" -c Release -o /app/publish /p:UseAppHost=false + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "BPA.KitChen.GroupMeal.dll"] \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..2f67679 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,126 @@ + +pipeline{ + agent any + parameters { + choice( + description: 'dev1:开发环境1 \n dev2:开发环境2 \n dev3:生产环境', + name: 'environment', + choices: ['dev1', 'dev2', 'dev3'] + ) + + choice( + description: '执行操作(发布|回滚)', + name: 'operation', + choices: ['develop', 'rollback'] + ) + + choice( + description: '分支名', + name: 'branchName', + choices: ['master'] + ) + + string( + name: 'tag', + defaultValue: '', + description: '版本tag' + ) + + } + + stages + { + stage('Prepare') { + steps { + script{ + echo "1.Prepare Stage" + echo "当前环境${params.environment}" + if(params.operation=='develop') + { + checkout scm + script { + build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim() + if (env.BRANCH_NAME != 'master') { + build_tag = "${env.BRANCH_NAME}-${build_tag}" + } + } + } + else{ + script { + if(params.branchName!= 'master') + { + build_tag = "${params.branchName}-${params.tag}" + } + else + { + build_tag="${params.tag}" + } + } + } + } + } + } + stage('Test') { + steps { + script{ + echo "2.Test Stage" + } + } + + } + stage('Build') { + steps { + script{ + echo "3.Build Docker Image Stage" + if(params.operation=='develop') + { + + sh "docker build -t 10.2.1.24:10242/bpa/groupmeal:${build_tag} ." + + } + } + } + } + + + stage('Push') { + steps { + script{ + echo "4.Push Docker Image Stage" + withCredentials([usernamePassword(credentialsId: 'harbor', passwordVariable: 'harborPassword', usernameVariable: 'harborUser')]) { + sh "docker login -u ${harborUser} -p ${harborPassword} 10.2.1.24:10242" + if(params.operation=='develop') + { + sh "docker push 10.2.1.24:10242/bpa/groupmeal:${build_tag}" + + } + } + } + } + + + + + } + stage('Deploy') { + + steps { + script{ + echo "5. Deploy Stage" + // if(params.environment=='test') + // { + // input "确认要部署线上环境吗?" + // } + +sh "sed -i 's//${build_tag}/' k8s_groupmeal.yaml" + sh "sed -i 's//${env.BRANCH_NAME}/' k8s_groupmeal.yaml" + sh "sed -i 's//${params.environment}/' k8s_groupmeal.yaml" + sh "kubectl apply -f k8s_groupmeal.yaml --record" + + + + } + } + } + } +} diff --git a/NuGet.config b/NuGet.config new file mode 100644 index 0000000..b149801 --- /dev/null +++ b/NuGet.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/k8s_groupmeal.yaml b/k8s_groupmeal.yaml new file mode 100644 index 0000000..ca53393 --- /dev/null +++ b/k8s_groupmeal.yaml @@ -0,0 +1,64 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: groupmeal + namespace: kube- +spec: + + selector: + matchLabels: + app: groupmeal + replicas: 1 + template: + metadata: + labels: + app: groupmeal + spec: + containers: + - image: 10.2.1.24:10242/bpa/groupmeal: + imagePullPolicy: IfNotPresent + name: groupmeal + env: + - name: branch + value: + - name: TZ + value: Asia/Shanghai + ports: + - containerPort: 80 + protocol: TCP + volumeMounts: + - mountPath: "/app/appsettings.json" + name: groupmeal-config + readOnly: true + subPath: appsetting + - mountPath: "/etc/localtime" + name: timezone + resources: + requests: + cpu: "100m" + memory: "112Mi" + limits: + cpu: "500m" + memory: "512Mi" + volumes: + - name: groupmeal-config + configMap: + name: groupmeal-config + - name: timezone + hostPath: + path: /usr/share/zoneinfo/Asia/Shanghai +--- +kind: Service +apiVersion: v1 +metadata: + labels: + app: groupmeal + name: groupmeal + namespace: kube- +spec: + type: ClusterIP + ports: + - port: 80 + name: http + selector: + app: groupmeal