使用Github和Google Kubernetes引擎管理环境



我有一个Github repo,上面有两个分支,developmain。第一个是";测试";另一个是"环境";生产";环境我正在使用Google Kubernetes引擎,从Github上的推送到GKE上的部署,我都实现了自动化部署。所以我们的工作流程是:

  1. 拉动develop
  2. 编写代码并在本地进行测试
  3. 当本地一切正常时,在develop上推送(它将自动部署在GKE工作负载app_name_develop上(
  4. app_name_develop的QA测试
  5. 如果QA测试通过,我们创建一个拉请求,将develop放入main
  6. 在GKE工作负载app_name_production上自动部署(来自main分支(

容器的部署在Dockerfile中定义,Kubernetes部署在kubernetes/app.yaml中定义。这两个文件在repo中使用Git进行跟踪。

这里的问题是,当我们创建一个拉请求将develop放入main时,它还将两个文件app.yamlDockerfiledevelop带到main。我们最终在main中使用了来自develop的设置,这会把整个事情搞砸。

我无法在这些文件中定义环境变量,因为它可能会出现在错误的分支中。我的问题是:如何将这些文件从提取请求中排除?或者,有没有任何方法可以管理多个环境,而不必在每次拉取请求后手动修改文件?

我不知道它是否可以hlphere是我的Dockerfile:

FROM python:3.8
RUN apt-get update && apt-get install -y --no-install-recommends
RUN python -m pip install --upgrade pip
WORKDIR /app/
COPY requirements.txt .
RUN python -m pip install -r requirements.txt
COPY . .
EXPOSE 8080
CMD ["gunicorn", "-b", ":8080", "main:app"]

这是我要在GKE上部署的YAML文件(实际上,我在创建自动部署时采用了GKE建议的文件(:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: app_name-api
name: app_name-api
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: app_name-api
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: app_name-api
spec:
containers:
- image: gcr.io/path_to_image/github.com/company_name/app_name
imagePullPolicy: IfNotPresent
name: app_name-1
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
labels:
app: app_name-api
name: app_name-api-pod-autoscaler
namespace: default
spec:
maxReplicas: 3
metrics:
- resource:
name: cpu
targetAverageUtilization: 80
type: Resource
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app_name-api

非常感谢您提供的任何帮助!

您不能选择性地忽略拉取请求中的一些文件。但有两个简单的解决方法:

第一-
从"开发"创建一个新分支

替换"主"中的非必需文件

从这个新分支创建拉取请求

第二个-
从"主"创建一个新分支

从"开发"中放入所需文件的更改

从这个新分支创建拉取请求

这些方法中的任何一种都会起作用。哪个更容易取决于要包含/排除的文件数量。

示例:
将main视为目标,将dev视为源

root 
|-- src 
| -- app.py 
|-- .gitignore 
|-- settings.py 
|-- requirements.txt

比方说,我想忽略正在合并的settings.py文件首先移动到目标分支(要将更改合并到的分支(

git checkout main

然后,您可以使用gitcheckout命令选择性地选择要合并的文件

git checkout dev src/

这只会合并src/文件夹内更改的文件

NOTE: You can also do it selectively for each file. 

然后推送到远程存储库

git push origin main

请记住,只有当要排除的文件很小时,此解决方案才有用。

注意:";有一些工具可以解决这个问题,比如skaffold和kustomize,但在一切正常之前,它们可能需要一些时间和对存储库的重组。因此,同时,这是一个简单的解决方案,需要手动操作,但可以在研究和决定哪种更先进的仪器适用时进行">

最新更新