. 确保您已经正确安装了 GitLab Runner,并在 GitLab 上创建了 CI/CD 配置文件。您可以创建一个名为 .gitlab-ci.yml 的文件,将其放在您的 GitLab 存储库的根目录下。在该文件中,您需要定义一个或多个阶段,每个阶段都会执行一组任务来构建、测试和部署您的应用程序。以下是一个示例 .gitlab-ci.yml 配置文件:
image: docker:19
services:
- name: docker:dind
command: ["--insecure-registry=registry.example.com:5000"]
stages:
- build
- test
- deploy
build:
stage: build
script:
- docker build -t registry.example.com:5000/my-app:$CI_COMMIT_SHA .
- docker push registry.example.com:5000/my-app:$CI_COMMIT_SHA
artifacts:
expire_in: 1 week
paths:
- Dockerfile
- src/
test:
stage: test
script:
- docker run --rm registry.example.com:5000/my-app:$CI_COMMIT_SHA ./vendor/bin/phpunit
deploy:
stage: deploy
script:
- helm upgrade --install --namespace my-namespace my-release charts/my-app
only:
- master
在上面的示例中,Docker 构建了应用程序镜像,并推送到名为 registry.example.com:5000 的 Docker Registry。该文件还包括在 Kubernetes 集群上使用 Helm 部署应用程序的命令。
使用 Helm 部署应用程序。您可以使用以下命令将 Helm chart 部署到 Kubernetes 集群中:
helm upgrade --install MY_RELEASE MY_CHART --namespace MY_NAMESPACE --set image.tag=MY_IMAGE_TAG
其中,MY_RELEASE 是您要部署的应用程序的发行版本,MY_CHART 是包含应用程序 Kubernetes 资源的 Helm chart 文件,MY_NAMESPACE 是指定的 Kubernetes 命名空间,MY_IMAGE_TAG 是应用程序的镜像标记。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- host: mydomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app
port:
name: http
在这个示例中,Ingress 资源将应用程序公开到 mydomain.com 的根路径下。您可以根据需要在 rules 部分中添加更多的主机和路径规则,或使用其他 Ingress 控制器的注释。
apiVersion: v1
kind: Service
metadata:
name: my-app
spec:
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8080
在这个示例中,Service 资源将应用程序暴露在集群的 IP 地址上的端口 80 上。 targetPort 字段定义了应用程序容器使用的端口。如果您的应用程序在容器中使用的端口不同,请根据需要修改此字段。
最后,您需要创建一个配合您的 GitLab CI/CD 配置文件,包含部署 Helm chart 和 Kubernetes 资源的命令。以下是一个示例:
deploy:
stage: deploy
script:
- kubectl config use-context my-cluster
- kubectl create namespace my-namespace
- helm upgrade --install --namespace my-namespace my-release charts/my-app
- kubectl expose deployment my-app --namespace my-namespace --type=ClusterIP --port=80
- kubectl apply -f ingress.yaml --namespace my-namespace
在这个示例中,CI/CD 配置文件包括使用 kubectl 命令创建 Kubernetes 命名空间、使用 Helm 部署应用程序、以及使用 kubectl 命令创建 ClusterIP 类型的 Service 和 Ingress 资源。
以上就是可能涉及到的流程和步骤,您可以根据您的实际情况进行调整。希望对您有所帮助!