You need to enable JavaScript to run this app.
文档中心
镜像仓库

镜像仓库

复制全文
下载 pdf
DevOps 交付
基于持续交付的云原生 DevOps
复制全文
下载 pdf
基于持续交付的云原生 DevOps
容器化场景下的一站式 DevOps 可以有效的实现持续集成和持续部署,显著提升业务应用创建和交付效率。本文通过 Python 容器应用部署的流程,为您介绍如何在火山引擎生态中实现容器化 DevOps。​
场景介绍​
使用容器镜像的方式交付 Python 应用,并将其部署在 Kubernetes 集群中,并当代码变更后自动触发应用部署。​
操作流程​
​alt​​
相关产品​
  • 持续交付:持续交付(Code Pipeline,CP)提供开发者友好的云原生应用交付平台和灵活易用的一站式流水线,帮助企业打通研发运维工程的各个环节,高质量、高效率完成业务的持续集成、持续验证和持续发布。产品详情参见 持续交付。​
  • 镜像仓库:火山引擎镜像仓库(Container Registry,CR)提供安全高可用的容器镜像、Helm Chart 等符合 OCI 标准的云原生制品托管服务,方便企业用户管理容器镜像和 Helm Chart 的全生命周期。产品详情参见 镜像仓库。​
  • 容器服务:容器服务(Volcengine Kubernetes Engine,VKE)通过深度融合新一代云原生技术,提供以容器为核心的高性能 Kubernetes 容器集群管理服务,助力用户快速构建容器化应用。产品详情参见 容器服务。​
操作步骤​
步骤一:获取代码仓库 HTTPS 地址和 Token​
使用代码仓库存储代码源并使用持续交付实现 DevOps,首先您需要在代码仓库中准备一份代码源。本文以 Gitee 代码仓库为例为您介绍。​
说明​
持续交付支持 Gitee、Gitlab、Github、Codeup、Gerrit 等代码仓库托管的代码源,同时也指手动输入代码作为代码源。​
  1. 注册 Gitee 账号,详情参见 Gitee 官网。​
  1. 在新建 Gitee 仓库。​
  • ​alt​​
  1. 在新建仓库页面填写仓库名称、路径,完成后单击 创建。本示例仓库名称和路径均为 projects-zhangsan2022。​
  • ​alt​​
  1. 单击 初始化 readme 文件 创建项目的 Readme 文件。​
  • ​alt​​
  1. 单击 文件 > 新建文件,新建代码文件。​
  • ​alt​​
  1. 新建 Python 文件 app.py,完成后单击页面底部的 提交。示例代码如下。​
  • ​
    from flask import Flask​
    app = Flask(__name__)​
    @app.route('/')​
    def hello_world():​
    return 'Hello, World!'​
    if __name__ == '__main__':​
    app.run(host="0.0.0.0", port=5050)​
    ​
  1. 获取代码源的 HTTPS 地址。​
  • ​alt​​
  1. 在 设置 > 私人令牌 > 创建私人令牌 创建并获取私人令牌(Token)。​
  • ​alt​​
注意​
必须选择 user_info、projects、hook。​
步骤二:获取 OCI 制品仓库的地址​
持续交付产品的流水线输出的最终产物为符合 OCI 规范容器镜像,需要保存到镜像仓库的 OCI 制品仓库中。镜像仓库提供了对原生 OCI 制品仓库的全生命周期管理能力。​
  1. 创建标准版实例。操作详情参见 创建标准版实例。​
  • ​alt​​
  1. 创建命名空间。操作详情参见 命名空间管理。​
  • ​alt​​
  1. 创建 OCI 制品仓库。操作详情参见 OCI 制品仓库管理。​
  • ​alt​​
  1. 获取 OCI 制品仓库的网络地址。​
  • ​alt​​
步骤三:创建部署资源的容器集群​
镜像完成构建后,需要创建部署环境,即容器服务 VKE 集群,部署流水线中的应用。​
  1. 创建 VPC。操作详情参见 创建私有网络。​
  • ​alt​​
  1. 创建集群,操作详情参见 创建集群。​
  • ​alt​​
  1. 在 运维管理 > 组件管理 中安装容器镜像免密组件 cr-credential-controller。​
说明​
镜像仓库中的 OCI 制品可以被设置成为私有或公开。处于私有状态时,拉取需要提供认证。cr-credential-controller 组件可以为当前集群自动配置拉取对应镜像仓库的认证信息,实现私有镜像免密拉取。​
  • ​alt​​
步骤四:创建持续交付流水线​
  1. 创建持续交付工作区。操作详情参加 创建工作区。​
  • ​alt​​
  1. 创建持续交付代码源。操作详情参见 创建代码源。​
说明​
支持交付代码源配置页面,填写 Gitee 中已获取的代码仓库 HTTPS 地址和 Token。​
  • ​alt​​
  1. 创建 Python-镜像构建推送至镜像仓库服务 流水线。操作详情参见 创建流水线。​
  • ​alt​​
  1. 配置输入源,选择已配置的代码源。操作详情参见 配置代码源。​
说明​
在 Webhook 设置中开启 代码提交 事件触发,当 Gitee 中代码源有变更提交后,即可触发流水线的自动运行。​
  • ​alt​​
  1. 编辑任务。其中 镜像打包推送至镜像仓库服务 区域中的 镜像版本 和 dockfile 填写说明如下,其他配置保持默认或者选择前置步骤中已创建的资源。​
  • ​alt​​
  • 镜像版本 本示例填写 v1。​
  • dockfile:选择 自定义文件,本示例中代码如下。​
  • ​
    FROM python:3​
    RUN mkdir app​
    ADD app.py /app/app.py​
    WORKDIR app​
    #Install other libs​
    RUN pip3 install flask -i https://pypi.org/simple​
    EXPOSE 5050​
    CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0", "--port=5050"]​
    ​
  1. 添加 Kubectl 发布。操作详情参见 Kubectl 发布。​
  • ​alt​​
  • 部署资源:将已创建的容器集群设置为部署资源,部署资源的创建方法参见 接入容器服务集群。​
  • YAML 文件:选择 自定义文件 的方式。示例代码如下,需要将示例代码中镜像地址 cr-zhangsan2022-cn-beijing.cr.volces.com/namespace-zhangsan2022/oci-zhangsan2022:v1 替换为 {已获取的 OCI 制品仓库的地址}:v1。​
  • ​
    apiVersion: v1​
    kind: Service​
    metadata:​
    name: demo​
    namespace: default​
    spec:​
    externalTrafficPolicy: Cluster​
    ports:​
    - name: port1​
    port: 5050​
    protocol: TCP​
    targetPort: 5050​
    selector:​
    app: demo​
    sessionAffinity: None​
    type: LoadBalancer​
    ---​
    apiVersion: apps/v1​
    kind: Deployment​
    metadata:​
    name: demo​
    namespace: default​
    spec:​
    progressDeadlineSeconds: 600​
    replicas: 1​
    revisionHistoryLimit: 10​
    selector:​
    matchLabels:​
    app: demo​
    strategy:​
    rollingUpdate:​
    maxSurge: 25%​
    maxUnavailable: 25%​
    type: RollingUpdate​
    template:​
    metadata:​
    annotations:​
    kubectl.kubernetes.io/restartedAt: "2022-03-30T14:37:35Z"​
    creationTimestamp: null​
    labels:​
    app: demo​
    spec:​
    containers:​
    - image: cr-zhangsan2022-cn-beijing.cr.volces.com/namespace-zhangsan2022/oci-zhangsan2022:v1​
    imagePullPolicy: IfNotPresent​
    name: demo​
    ports:​
    - containerPort: 5050​
    protocol: TCP​
    resources:​
    limits:​
    cpu: 300m​
    memory: 64Mi​
    requests:​
    cpu: 300m​
    memory: 64Mi​
    terminationMessagePath: /dev/termination-log​
    terminationMessagePolicy: File​
    dnsPolicy: ClusterFirst​
    restartPolicy: Always​
    schedulerName: default-scheduler​
    securityContext: {}​
    terminationGracePeriodSeconds: 30​
    ​
  1. 单击 保存,完成流水线创建。​
步骤五:发布应用​
运行流失水后即可实现应用的发布。​
  1. 在已创建的流水线页面,单击 运行。​
  • ​alt​​
  1. 选择运行目标为 master 分支。​
  1. 运行完成后,即完成了应用发布。​
  • ​alt​​
操作结果​
完成应用部署后,即可通过外网地址访问应用。​
  1. 在 VKE 集群 服务 列表中查看已部署的服务的外网地址。​
  • ​alt​​
  1. 在浏览器输入外网地址即可访问应用。​
  • ​alt​​
步骤六:持续发布​
本示例在持续交付代码源的 Webhook 设置中开启 代码提交 事件触发,即在 Gitee 代码源中更新代码后,会自动触达流水钱的运行,部署更新后的应用。​
  1. 在 Gitee 中更新代码源。​
  • ​alt​​
  1. 流水线自动触发运行,部署更新后的应用。刷新浏览器即可查看新的应用。​
  • ​alt​​
相关文档​
更多容器 DevOps 相关内容请参见 持续交付帮助文档 中的 最佳实践 章节。​
最近更新时间:2026.07.08 10:45:38
这个页面对您有帮助吗?
有用
有用
无用
无用