使用 Github 和 Google Kubernetes Engine 管理环境
Manage environments with Github and Google Kubernetes Engine
我有一个 Github 存储库,上面有 2 个分支,develop
和 main
。第一个是“测试”环境,另一个是“生产”环境。我正在使用 Google Kubernetes Engine,并且我已经实现了从 Github 上的推送到 GKE 上的部署的自动化部署。所以我们的工作流程是:
- 拉
develop
- 编写代码并在本地测试
- 当本地一切正常时,继续推送
develop
(它将自动部署到 GKE 工作负载 app_name_develop
)
- QA 测试
app_name_develop
- 如果 QA 测试通过,我们将创建一个拉取请求以将
develop
放入 main
- 在 GKE 工作负载
app_name_production
上自动部署(来自 main
分支)
容器的部署在Dockerfile
中定义,Kubernetes部署在kubernetes/app.yaml
中定义。这两个文件在回购协议中使用 Git 进行跟踪。
这里的问题是当我们创建一个拉取请求将 develop
放入 main
时,它还从 [=14] 中获取了两个文件 app.yaml
和 Dockerfile
=] 到 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
非常感谢您提供的任何帮助!
您不能有选择地忽略拉取请求中的某些文件。但是有两个简单的解决方法:
先-
从“develop”创建一个新分支
替换 'main'
中不需要的文件
从这个新分支创建拉取请求
第二-
从 'main'
创建一个新分支
将所需文件的更改从 'develop'
从这个新分支创建拉取请求
这些方法中的任何一种都可以。哪个更容易取决于要包含/排除多少文件。
示例:
以 main 为目标,dev 为源
root
|-- src
| -- app.py
|-- .gitignore
|-- settings.py
|-- requirements.txt
比方说,我想忽略 settings.py 文件的合并
首先移动到目标分支(要合并更改的分支)
git checkout main
然后您可以使用git checkout 命令选择性地选择您要合并的文件
git checkout dev src/
这只会合并 src/ 文件夹中更改的文件
NOTE: You can also do it selectively for each file.
然后推送到远程仓库
git push origin main
请记住,此解决方案仅在要排除的文件较小时才有用。
注意:“有一些工具专为解决此问题而构建,例如 skaffold 和 kustomize,但在一切正常之前,它们可能需要一些时间并重组您的存储库。因此,与此同时,这是一个简单的解决方案,需要手动工作,但可以在您学习和决定哪种更高级的仪器适合时进行。"
我有一个 Github 存储库,上面有 2 个分支,develop
和 main
。第一个是“测试”环境,另一个是“生产”环境。我正在使用 Google Kubernetes Engine,并且我已经实现了从 Github 上的推送到 GKE 上的部署的自动化部署。所以我们的工作流程是:
- 拉
develop
- 编写代码并在本地测试
- 当本地一切正常时,继续推送
develop
(它将自动部署到 GKE 工作负载app_name_develop
) - QA 测试
app_name_develop
- 如果 QA 测试通过,我们将创建一个拉取请求以将
develop
放入main
- 在 GKE 工作负载
app_name_production
上自动部署(来自main
分支)
容器的部署在Dockerfile
中定义,Kubernetes部署在kubernetes/app.yaml
中定义。这两个文件在回购协议中使用 Git 进行跟踪。
这里的问题是当我们创建一个拉取请求将 develop
放入 main
时,它还从 [=14] 中获取了两个文件 app.yaml
和 Dockerfile
=] 到 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
非常感谢您提供的任何帮助!
您不能有选择地忽略拉取请求中的某些文件。但是有两个简单的解决方法:
先-
从“develop”创建一个新分支
替换 'main'
中不需要的文件从这个新分支创建拉取请求
第二-
从 'main'
将所需文件的更改从 'develop'
从这个新分支创建拉取请求
这些方法中的任何一种都可以。哪个更容易取决于要包含/排除多少文件。
示例:
以 main 为目标,dev 为源
root
|-- src
| -- app.py
|-- .gitignore
|-- settings.py
|-- requirements.txt
比方说,我想忽略 settings.py 文件的合并 首先移动到目标分支(要合并更改的分支)
git checkout main
然后您可以使用git checkout 命令选择性地选择您要合并的文件
git checkout dev src/
这只会合并 src/ 文件夹中更改的文件
NOTE: You can also do it selectively for each file.
然后推送到远程仓库
git push origin main
请记住,此解决方案仅在要排除的文件较小时才有用。
注意:“有一些工具专为解决此问题而构建,例如 skaffold 和 kustomize,但在一切正常之前,它们可能需要一些时间并重组您的存储库。因此,与此同时,这是一个简单的解决方案,需要手动工作,但可以在您学习和决定哪种更高级的仪器适合时进行。"