前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >openshift镜像构建

openshift镜像构建

原创
作者头像
用户1470379
修改2018-03-27 14:59:52
2K7
修改2018-03-27 14:59:52
举报
文章被收录于专栏:openshift持续集成

build是如何工作的?

什么是build?

OpenShift Origin中的构建是将输入参数转换为结果对象的过程。 大多数情况下,构建用于将源代码转换为可运行的容器映像。

build configuration或BuildConfig的特点是strategy和一个或多个source。strategy决定了构建过程,而source提供其输入。

openshift的构建策略有:

  • Source-to-image(S2I)
  • Pipeline
  • Docker
  • Custom

下面这6中source可以作为构建输入:

  • Git
  • Dockerfile
  • Binary
  • Image
  • Input secrets
  • External artifacts

每个构建策略都要考虑采用或忽略某种source,并确定如何使用它。 Binary和Git是互斥的类型。 Dockerfile和Image可以彼此独立使用,也可以与Git或Binary一起使用。Binary类型在其指定给系统的其他选项中是唯一的。

什么是build config?

build config描述了应该创建新构建时的单个构建定义和一组触发器。 构建配置由BuildConfig定义,它是一个REST对象,可以在POST中用于创建新实例的API服务器。

根据您选择使用OpenShift Origin创建应用程序的方式,如果使用Web控制台或CLI,BuildConfig通常会自动为您生成,并且可以随时对其进行编辑。 如果您选择稍后手动调整配置,那么理解组成BuildConfig的部件及其可用选项可以提供帮助。

BuildConfig Object Definition

代码语言:javascript
复制
kind: "BuildConfig"
apiVersion: "v1"
metadata:
  name: "ruby-sample-build"       #1
spec:
  runPolicy: "Serial"             #2
  triggers:                       #3
    -
      type: "GitHub" 
      github:
        secret: "secret101"
    - type: "Generic"
      generic:
        secret: "secret101"
    -
      type: "ImageChange"
  source:                         #4
    git:
      uri: "https://github.com/openshift/ruby-hello-world"
  strategy:                       #5
    sourceStrategy:
      from:
        kind: "ImageStreamTag"
        name: "ruby-20-centos7:latest"
  output:                         #6
    to:
      kind: "ImageStreamTag"
      name: "origin-ruby-sample:latest"
  postCommit:                     #7
      script: "bundle exec rake test"

#1 创建了一个名为"ruby-sample-build"的新BuildConfig

#2 runPolicy字段控制是否可以同时运行由此构建配置创建的构建。 默认值是Serial,这意味着新版本将按顺序运 行,而不是同时运行。

#3 可以指定一系列的触发器,这会导致创建新的构建。

#4 source部分定义了构建的来源。 source类型决定了输入的主要来源,可以是Git,指向代码库位置; Dockerfile,从inline Dockerfile或Binary构建,接受二进制有效内容。 一次可以有多个source,详情请参阅每 种来源类型的文件。

#5 strategy部分描述了构建image的策略。你可以在这儿指定source,Docker或自定义策略。上面的例子使用 了"ruby-20-centos7:latest"这个容器镜像,这个镜像构建的时候使用的是s2i策略。

#6 容器镜像成功构建后,它将被推入output部分中描述的存储库。

#7 postCommit部分定义了一个可选的构建hook。

build基础操作

开始构建

使用以下命令在当前项目中从已经存在的build configuration手动构建:

代码语言:javascript
复制
$ oc start-build <buildconfig_name>

使用--from-build选项重新运行构建:

代码语言:javascript
复制
$ oc start-build --from-build=<build_name>

指定--follow选项,输出构建时的log:

代码语言:javascript
复制
$ oc start-build <buildconfig_name> --follow

指定--env选项,为构建设置任何需要的环境变量:

代码语言:javascript
复制
$ oc start-build <buildconfig_name> --env=<key>=<value>

您可以通过直接推送源代码来开始构建,而不必依赖Git源代码或Dockerfile构建源代码,这可能是Git或SVN工作目录的内容,即一组您希望的预构建二进制产物部署或单个文件。 这可以通过为start-build命令指定以下选项之一来完成:

Option

Description

--from-dir=<directory>

指定将被存档并用作构建的二进制输入的目录

--from-file=<file>

指定一个文件,做为构建source中唯一文件。 该文件被放置在与提供的原始文件具有相同文件名的空目录的根目录中。

--from-repo=<local_source_repo>

指定本地存储库的路径,以用作构建的二进制输入。 添加--commit选项以控制构建使用哪个分支,标记或提交。

将这些选项中的任何一个直接传递给构建时,内容将流式传输到构建并覆盖当前的构建source设置。

由二进制输入触发的构建不会保留服务器上的source,因此基础镜像更改触发的重建将使用构建配置中指定的源。

例如,以下命令将标签v2中的本地Git存储库的内容作为档案发送并开始构建:

代码语言:javascript
复制
$ oc start-build hello-world --from-repo=../hello-world --commit=v2

取消构建

使用命令手动取消构建:

代码语言:javascript
复制
$ oc cancel-build <build_name>

多个构建取消:

代码语言:javascript
复制
$ oc cancel-build <build1_name> <build2_name> <build3_name>

取消所有基于某个build configuration的构建:

代码语言:javascript
复制
$ oc cancel-build bc/<buildconfig_name>

取消给定状态下的所有构建(例如,新建或挂起),忽略其他状态下的构建:

代码语言:javascript
复制
$ oc cancel-build bc/<buildconfig_name>  --state=<state>

删除build config

删除某个build config使用如下命令:

代码语言:javascript
复制
$ oc delete bc <BuildConfigName>

未完待续

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • build是如何工作的?
    • 什么是build?
      • 什么是build config?
      • build基础操作
        • 开始构建
          • 取消构建
            • 删除build config
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档