跳到主要内容

镜像构建与部署

1. 镜像构建

默认工作空间为当前代码库根目录,指定 Dockerfile 构建镜像,并将镜像推送到远程镜像仓库。

  • 可视化配置 镜像构建
- step: build@docker
name: build_docker
displayName: 镜像构建
# Docker 镜像仓库地址,如 hub.docker.com
repository:
# 仓库用户名
username:
# 仓库密码
password:
# 镜像Tag,如tomcat:v1.${GITEE_PIPELINE_BUILD_NUMBER},支持支持系统参数或流水线自定义参数,了解系统参数 (https://gitee.com/help/articles/4358#article-header9)
tag: tomcat:v1.${GITEE_PIPELINE_BUILD_NUMBER}
# 相对于代码库根目录所在路径,如./Dockerfile
dockerfile: ./Dockerfile
# 拉取上游产出,可配置多个,默认 ${BUILD_ARTIFACT}。支持系统参数,也支持直接输入一个产出地址
artifacts:
- ${BUILD_ARTIFACT}
- http://xxxxx.xxxxx/output.tar.gz
# 不使用缓存,docker build 将使用--no-cache=true 参数进行镜像构建
isCache: false
  • 参数输出 镜像构建成功后,会自动输出一个参数 GITEE_DOCKER_IMAGE 传递给下游,用来表示镜像地址,您可以在下游直接引用。

    docker pull ${GITEE_DOCKER_IMAGE}

2. K8S 部署

默认工作空间为当前代码库根目录,根据指定的 yaml 文件进行部署,采用 apply 模式。

  • 可视化配置 K8S 部署
- step: deploy@k8s
name: deploy_k8s
displayName: K8S 部署
# kubectl 版本为当前步骤中使用的 kubectl 客户端版本。请选择与集群适配的 Kubectl 版本,默认版本 v1.16.4
version: v1.16.4
# 证书标识,您可以点击此处了解凭证管理(http://https://gitee.com/help/articles/4377)
certificate: k8s-test
# k8s 集群命名空间,默认 default
namespace: default
# YAML 路径为需要部署的 YAML 文件或者目录在源码中的相对路径。例如:'manifests'
yaml: ./deployment.yaml
# 适用于首次部署应用时使用了 kubectl install 时,kubectl apply 可能无法正确的计算 diff 并更新应用的场景。replace 模式只支持证书导入的 Kubernetes 集群
isReplace: false
  • 小技巧 K8S 部署插件可以搭配“镜像构建”插件一起使用,上游为“镜像构建”任务,下游为“K8S 部署”任务,其中 K8S 插件中所需要的 yaml,可以使用如下方式编写来获取镜像。

    spec:
    template:
    spec:
    containers:
    - name: gitee-go
    # 此处为上游镜像构建插件产出的参数
    image: ${GITEE_DOCKER_IMAGE}
    ports:
    - containerPort: 80

3. Helm 部署

默认工作空间为当前代码库根目录,根据指定的 chart 文件目录和 values 文件目录部署。首次部署会采用 install 模式,后续部署采用 upgrade 模式。

  • 可视化配置 Helm 部署
- step: deploy@helm
name: deploy_helm
displayName: Helm Chart 部署
# Helm 客户端版本,支持 2.17.0、3.4.0 两个版本,默认值 3.4.0
version: 3.4.0
# 证书标识,您可以点击此处了解凭证管理(http://https://gitee.com/help/articles/4377)
certificate: k8s-test
# k8s 集群命名空间,默认 default
namespace: default
# 应用名称
appName:
# Chart 文件目录,默认代码库根目录
chartPath: ./
# values.yml 路径,默认 ./values.yml。valuesPath 是相对于 chart 包目录的路径,而非相对于代码库的路径
valuesPath: ./values.yml