0

我们正在为CI/CD使用Gitlab。我将包括我们正在使用的脚本gitlab ci-cd文件

服务:-码头工人:2011年3月19日before_script之前:-apk更新&&apk添加bash-apk更新&&apk添加gettext工作流程:规则:-如果:$CI_COMMIT_BRANCH==$CI_DEFAULT_BRANCH | |$CI_CCOMMIT_BRAN CH==“开发人员”| |$CID_COMMIT_BRANCH==“阶段”| |($CI_COMMIT_BRANCH=~(/^([A-Z]([0-9][-_])?)?弹簧(([-_][A-Z][0-9])?)+/i) )时间:始终-如果:$CI_COMMIT_BRANCH!=$CI_DEFAULT_BRANCH||$CI_COMMIT_BRANCH!=“开发人员”||$CI_COMMIT_BRANCH!=“阶段”||($CI_COMMIT_BRANCH!~(/^([A-Z]([0-9][-_])?)?弹簧(([-_][A-Z][0-9])?)+/i) )时间:从不阶段:-建造-发布-部署隐藏物:路径:-.m2/仓库-目标build_jar:图片:maven:3.8.3-jdk-11阶段:构建脚本:-mvn clean安装包-DskipTests=true人工产品:路径:-target/*.jardocker_build_dev:阶段:发布图片:docker:19.03.11服务:-码头工人:19.03.11-dind变量:IMAGE_TAG:$CI_REGISTRY-IMAGE:$CI_COMMIT_SHORT_SHA脚本:-docker登录-u$CI_REGISTRY_USER-p$CI_REGISTRY_PASSWORD$CI_RECISTRY-docker构建-t$IMAGE_TAG。-docker推$IMAGE_TAG仅限:-/^([A-Z]([0-9][-_])?)?弹簧(([-_][A-Z][0-9])?)+/-开发人员码头建造阶段:阶段:发布图片:docker:19.03.11服务:-码头工人:19.03.11-dind变量:IMAGE_TAG:$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA脚本:-docker登录-u$CI_REGISTRY_USER-p$CI_REGISTRY_PASSWORD$CI_RECISTRY-docker构建-t$IMAGE_TAG。-docker推$IMAGE_TAG仅限:-阶段部署_开发:阶段:部署图片:stellacenter/aws-helm-kubectl变量:ENV_VAR_NAME:开发before_script之前:-aws配置集aws_access_key_id${DEV_aws_access_key_id}-aws配置集aws_secret_access_key${DEV_aws_secret_access_key}-aws配置集合区域${DEV_aws_DEFAULT_region}脚本:-sed-i“s/<VERSION>/${CI_COMMIT_SHORT_SHA}/g”患者服务.yml-mkdir-p$主页/.kube-cp$KUBE_CONFIG_DEV$HOME/.KUBE/CONFIG-chown$(id-u):$(id-g)$HOME/.kube/config-export KUBECONFIG=$HOME/.kube/config-cat patient service.yml|envsubst|kubectl apply-f patient-service.yml-n${KUBE_NAMESPACE_DEV}仅限:-/^([A-Z]([0-9][-_])?)?弹簧(([-_][A-Z][0-9])?)+/-开发人员部署阶段(_S):阶段:部署图片:stellacenter/aws-helm-kubectl变量:ENV_VAR_NAME:阶段before_script之前:-aws配置集aws_access_key_id${DEV_aws_access_key_id}-aws配置集aws_secret_access_key${DEV_aws_secret_access_key}-aws配置集合区域${DEV_aws_DEFAULT_region}脚本:-sed-i“s/<VERSION>/${CI_COMMIT_SHORT_SHA}/g”患者服务.yml-mkdir-p$主页/.kube-cp$KUBE_CONFIG_STAGE$HOME/.KUBE/CONFIG-chown$(id-u):$(id-g)$HOME/.kube/config-export KUBECONFIG=$HOME/.kube/config-cat patient service.yml|envsubst|kubectl apply-f patient-service.yml-n${KUBE_NAMESPACE_STAGE}仅限:-阶段

根据脚本,我们只是合并了脚本,以便在部署时不面临阶段和开发的冲突/冲突。以前,我们有每个环境(阶段和开发人员)的每个docker文件。现在我也想合并dockerfile,我合并了,但dockerfiles没有抓取。在Kubernetes中发生冲突(管道成功后显示警告)。我不知道如何清除Kubernetes的警告。我将附上我合并的docker文件。

来自maven:3.8.3-jdk-11 AS maven_BUILD复制pom.xml/build/复制src/build/src/工作目录/构建/RUN mvn clean安装包-DskipTests=true来自openjdk:11ARG环境名称工作目录/应用程序副本--来自=MAVEN_BUILD/BUILD/target/patient-service-*.jar/app/patient-service.jarENV端口8094ENV ENV_var_name=$环境名称公开$PORTENTRYPOINT[“java”,“-Dspring.profiles.active=$env_var_name”,“-jar”,“/app/patient-service.jar”]

我们以前用过的最后一行,

ENTRYPOINT[“java”,“-Dspring.profiles.active=development”,“-jar”,“/app/patient-service.jar”]-用于开发人员dockerfileENTRYPOINT[“java”,“-Dspring.profiles.active=stage”,“-jar”,“/app/pientity-service.jar”]-用于stage dockerfile

当时,它运行良好,我在Kubernetes上没有遇到任何问题。我只需要添加环境变量来处理开发或阶段。你可以在docker构建后检查我的脚本。仅添加变量后,我们开始面临冲突。请帮我解决这个问题。提前谢谢。

Yaml文件

api版本:apps/v1种类:部署元数据:姓名:patient-app标签:应用程序:patient-app规格:副本:1选择器:匹配标签:应用程序:患者应用程序模板:元数据:标签:应用程序:patient-app规格:容器:-姓名:patient-app图片:registry.gitlab.com/stella-center/backend-services/patient-service:<VERSION>imagePullPolicy:始终端口:-集装箱港口:8094imagePullSecrets:-名称:gitlab-registry-token-auth---api版本:v1种类:服务元数据:名称:患者服务规格:类型:节点端口选择器:应用程序:patient-app端口:-端口:8094目标端口:8094
6
  • 你测试了什么?
    – B猜
    评论 2022年5月23日10:52
  • 我只是通过ci-cd yaml脚本运行管道。Pipeline成功了,但在检查pods时,它显示了两个环境(开发人员和阶段)@bguess之间的一些类似警告的冲突 评论 2022年5月23日11:23
  • 首先用env检查docker-build是否在本地工作,如果是这样的话;通过传递环境在本地工作,您可以检入k8s,您在yaml配置中缺少env,如答案中所建议的那样。 评论 2022年5月25日8:36
  • 是的,但如果我也加进去,那对我来说不管用!请检查我尝试过的以下答案 评论 2022年5月25日9:41
  • 管道已通过,但在k8(吊舱)中显示了一些警告 评论 2022年5月25日10:09

1答案1

重置为默认值
0

据我所知,您希望在两个环境中使用docker文件中的变量运行从该docker文件构建的相同图像,我建议如下:

1-删除“ENV ENV_var_name=$environment_name”并直接在ENTRYPOIT中添加ENV_var_name(确保变量为大写),如下所示。

ENV端口8094曝光$端口ENTRYPOINT[“java”,“-Dspring.profiles.active=$ENV_VAR_NAME”,“-jar”,“/app/patient service.jar”]

2-将此变量添加为patient-service.yml中的环境变量:

...api版本:apps/v1种类:部署元数据:姓名:patient-app标签:应用程序:patient-app规格:副本:1选择器:匹配标签:应用程序:patient-app模板:元数据:标签:应用程序:patient-app规格:容器:-姓名:patient-app图片:registry.gitlab.com/stella-center/backend-services/patient-service:<VERSION>imagePullPolicy:始终端口:-集装箱港口:8094环境:-名称:ENV_VAR_name值:“${ENV_VAR_NAME}”imagePullSecrets:-名称:gitlab-registry-token-auth

3-在GitLab ciyml文件的每个阶段中指定变量及其值和用法环境子系统使用部署命令:

部署_版本:阶段:部署图片:stellacenter/aws-helm-kubectl变量:ENV_VAR_NAME:开发before_script之前:-apk更新&&apk添加gettext..脚本:..-猫患者服务.yml|envsubst|kubectl apply-f-n${KUBE_NAMESPACE_STAGE}-...
12
  • 在docker build中,阶段:发布,我应该提供什么?在脚本中@莫哈拉哈迈德 评论 2022年5月23日12:18
  • “-docker build--build arg environment_name=development-t$IMAGE_TAG。”“-docker build--build arg environment_name=stage-t$IMAGE_TAG。”在发布阶段,这一行要做什么更改 评论 2022年5月23日12:32
  • 在yaml文件中,(kind:deployment)和(kind:service)我都想更新env还是一个? 评论 2022年5月23日12:40
  • 请帮助我在我插入的yml文件中添加规范内容 评论 2022年5月24日5:20
  • 1
    对于build,不需要通过env with build命令来保持图像的通用性,并且您可以在开发和阶段环境中使用它,这也只需要一个构建阶段,而不是两个,这将使cicd更快。关于只在部署中添加env的YAML文件,我已经根据您添加的YAML文件编辑了我的答案。 评论 2022年5月24日5:50

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.