创建一个应用模板


概述

应用模板是将同类型应用的代码库结构整理成模板,用于创建应用时能引用相应模板快速创建初始代码库。您也可以根据实际情况自定义应用模板。

目标

本章节将以应用模板“猪齿鱼应用模板”的创建为例展开介绍,让读者能够熟悉使用Choerodon创建应用模板的步骤和流程。

前置条件

1. 在操作之前保证系统配置已经配置完全。

2. 用户须属于组织层,且为组织管理员角色。

创建应用模板

具体操作步骤如下:

第一步: 使用组织管理员的角色登录Choerodon系统,此时进入平台Dashboard界面,点击选择项目,弹出组织/项目选择界面。

第二步: 点击选择组织,例如 Choerodon

第三步: 进入应用管理后,点击应用模板

enter app template

第四步: 进入应用模板页面后,点击创建应用模板,系统会从右侧滑出创建应用模板页面,输入应用模板编码、应用模板名称、应用模板描述和选择应用模板的来源模板。

例如,

  • 编码:choerodon-app-temp
  • 名称:猪齿鱼应用模板
  • 描述:猪齿鱼应用模板示例

fill app template

字段说明 :

  • 编码:应用模板的编码
  • 名称:应用模板的名称
  • 描述:应用模板的描述
  • 复制于:应用模板的来源模板,选择并复制当前列表内的一个已有模板
    第五步: 当应用模板创建成功,可在应用管理模块,点击应用模板 界面查看到新建的应用模板。

第六步: 在创建应用的同时,系统会对应在Gitlab中创建一个仓库,选择应用管理点击应用模板,找到创建好的应用模板,点击地址,链接到Gitlab新建的仓库。

check app template

开发应用模板

应用创建完成之后,可以视具体情况修改模板内容。以后端模板为例。

请务熟练掌握 Docker、Kubernetes、Helm、Gitlab-CI 等知识。

具体的操作步骤如下:

第一步: 编写一个 Dockerfile文件:

目录结构如下:

  1. |--src
  2. |--main
  3. |--docker
  4. |--Dockerfile

Dockerfile 文件内容

  1. FROM registry.cn-hangzhou.aliyuncs.com/choerodon-tools/javabase:0.6.0
  2. COPY app.jar /{{service.code}}.jar
  3. ENTRYPOINT exec java $JAVA_OPTS -jar /{{service.code}}.jar
service.code是根据该模板创建应用时会使用服务编码替换

此为Java后端模板的 Dockerfile,应视模板具体语言的对其进行修改。

第二步: 项目根部录下编写 .gitlab-ci.yml 文件

  1. image: registry.cn-hangzhou.aliyuncs.com/choerodon-tools/cibase:0.6.0
  2. stages:
  3. - mvn-package # mvn-package 这一阶段为后端应用需要的 ci 阶段,可根据模板具体情况进行修改
  4. - docker-build # docker-build 为 Choerodon 构建镜像版本等的必要步骤,不建议修改
  5. maven-test-build:
  6. stage: mvn-package
  7. script:
  8. - update_pom_version
  9. - mvn package -U -DskipTests=false
  10. - mkdir -p /cache/${CI_PROJECT_NAME}-${CI_PROJECT_ID}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
  11. - cp target/app.jar /cache/${CI_PROJECT_NAME}-${CI_PROJECT_ID}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}/app.jar
  12. docker-build:
  13. stage: docker-build
  14. script:
  15. - docker_build
  16. - chart_build
  17. only:
  18. - master
  19. - tags
  20. - develop
  21. - /^hotfix-.*$/
  22. - /^release-.*$/
  23. .auto_devops: &auto_devops |
  24. curl -o .auto_devops.sh \
  25. "${CHOERODON_URL}/devops/ci?token=${Token}&type=microservice"
  26. if [ $? -ne 0 ];then
  27. cat .auto_devops.sh
  28. exit 1
  29. fi
  30. source .auto_devops.sh
  31. function docker_build(){
  32. cp /cache/${CI_PROJECT_NAME}-${CI_PROJECT_ID}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}/app.jar ${1:-"src/main/docker"}/app.jar || true
  33. docker build --pull -t ${DOCKER_REGISTRY}/${GROUP_NAME}/${PROJECT_NAME}:${CI_COMMIT_TAG} ${1:-"src/main/docker"}
  34. docker push ${DOCKER_REGISTRY}/${GROUP_NAME}/${PROJECT_NAME}:${CI_COMMIT_TAG}
  35. rm -rf /cache/${CI_PROJECT_NAME}-${CI_PROJECT_ID}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
  36. }
  37. before_script:
  38. - *auto_devops

第三步:编写 charts 模块

目录结构如下:

  1. |--src
  2. |--charts
  3. |--model-service
  4. |--templates #为模板文件,将模板文件渲染成实际文件,然后发送给 Kubernetes。
  5. |--_helper.tpl #放置模板助手的地方,您可以在整个 chart 中重复使用。
  6. |--deplopment.yaml #创建 Kubernetes 部署的基本清单。
  7. |--.helmignore
  8. |--Chart.yaml #包含 chart 的版本信息说明,您可以从模板中访问它。
  9. |--values.yaml #为模板的预定义变量。

_helper.tpl:

  1. {{/* vim: set filetype=mustache: */}}
  2. {{- /*
  3. service.labels.standard prints the standard service Helm labels.
  4. The standard labels are frequently used in metadata.
  5. */ -}}
  6. {{- define "service.labels.standard" -}}
  7. choerodon.io/release: {{ .Release.Name | quote }}
  8. {{- end -}}

deplopment.yaml:

  1. apiVersion: apps/v1beta2
  2. kind: Deployment
  3. metadata:
  4. name: {{ .Release.Name }}
  5. labels:
  6. {{ include "service.labels.standard" . | indent 4 }}
  7. spec:
  8. replicas: {{ .Values.replicaCount }}
  9. selector:
  10. matchLabels:
  11. {{ include "service.labels.standard" . | indent 6 }}
  12. template:
  13. metadata:
  14. labels:
  15. {{ include "service.labels.standard" . | indent 8 }}
  16. spec:
  17. containers:
  18. - name: {{ .Release.Name }}
  19. image: "{{ .Values.image.repository }}:{{ .Chart.Version }}"
  20. imagePullPolicy: {{ .Values.image.pullPolicy }}
  21. env:
  22. {{- range $name, $value := .Values.env.open }}
  23. {{- if not (empty $value) }}
  24. - name: {{ $name | quote }}
  25. value: {{ $value | quote }}
  26. {{- end }}
  27. {{- end }}
  28. ports:
  29. - name: http
  30. containerPort: {{ .Values.service.port }}
  31. protocol: TCP
  32. resources:
  33. {{ toYaml .Values.resources | indent 12 }}

Chart.yaml:

  1. apiVersion: v1
  2. appVersion: "1.0"
  3. description: A Helm chart for Kubernetes
  4. name: {{service.code}}
  5. version: 0.1.0

values.yaml:

  1. # This is a YAML-formatted file.
  2. # Declare variables to be passed into your templates.
  3. replicaCount: 1
  4. image:
  5. repository: registry.choerodon.com.cn/choerodon/example-front
  6. pullPolicy: Always
  7. service:
  8. port: 80
  9. env:
  10. open:
  11. PRO_API_HOST: api.example.com
  12. resources:
  13. # We usually recommend not to specify default resources and to leave this as a conscious
  14. # choice for the user. This also increases chances charts run on environments with little
  15. # resources,such as Minikube. If you do want to specify resources,uncomment the following
  16. # lines,adjust them as necessary,and remove the curly braces after 'resources:'.
  17. limits:
  18. # cpu: 100m
  19. # memory: 2Gi
  20. requests:
  21. # cpu: 100m
  22. # memory: 1Gi

Choerodon 会在使用模板创建应用时,对文档的相关变量进行替换。例如,charts 文件夹下的 model-service 文件夹的名称,会替换为对应的应用名称。

第四步: 编写pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>{{group.name}}</groupId>
  6. <artifactId>{{service.code}}</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <packaging>jar</packaging>
  9. <parent>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-parent</artifactId>
  12. <version>2.0.2.RELEASE</version>
  13. <relativePath/> <!-- lookup parent from repository -->
  14. </parent>
  15. <properties>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  18. <java.version>1.8</java.version>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-web</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-starter-test</artifactId>
  28. <scope>test</scope>
  29. </dependency>
  30. </dependencies>
  31. <build>
  32. <plugins>
  33. <plugin>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-maven-plugin</artifactId>
  36. </plugin>
  37. </plugins>
  38. <finalName>app</finalName>
  39. </build>
  40. </project>
maven打包时指定文件名为app,与ci文件中一致。

第五步: 提交改动至 master 分支。通过这些步骤,便能快速的在Choerodon里创建应用模板了。

相关文档