我有一个Github repo,上面有两个分支,develop
和main
。第一个是";测试";另一个是"环境";生产";环境我正在使用Google Kubernetes引擎,从Github上的推送到GKE上的部署,我都实现了自动化部署。所以我们的工作流程是:
- 拉动
develop
- 编写代码并在本地进行测试
- 当本地一切正常时,在
develop
上推送(它将自动部署在GKE工作负载app_name_develop
上( app_name_develop
的QA测试- 如果QA测试通过,我们创建一个拉请求,将
develop
放入main
- 在GKE工作负载
app_name_production
上自动部署(来自main
分支(
容器的部署在Dockerfile
中定义,Kubernetes部署在kubernetes/app.yaml
中定义。这两个文件在repo中使用Git进行跟踪。
这里的问题是,当我们创建一个拉请求将develop
放入main
时,它还将两个文件app.yaml
和Dockerfile
从develop
带到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,但在一切正常之前,它们可能需要一些时间和对存储库的重组。因此,同时,这是一个简单的解决方案,需要手动操作,但可以在研究和决定哪种更先进的仪器适用时进行">