• 创建一个应用模板
    • 概述
    • 目标
    • 前置条件
    • 创建应用模板
    • 开发应用模板
    • 相关文档

    创建一个应用模板


    概述

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

    目标

    本章节将以应用模板“猪齿鱼应用模板”的创建为例展开介绍,让读者能够熟悉使用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里创建应用模板了。

    相关文档

    • 系统配置

    • 应用模板

    • 编写 charts 模块

    • GitLab Continuous Integration (GitLab CI/CD)