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

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手动构建:

$ oc start-build <buildconfig_name>

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

$ oc start-build --from-build=<build_name>

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

$ oc start-build <buildconfig_name> --follow

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

$ 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存储库的内容作为档案发送并开始构建:

$ oc start-build hello-world --from-repo=../hello-world --commit=v2

取消构建

使用命令手动取消构建:

$ oc cancel-build <build_name>

多个构建取消:

$ oc cancel-build <build1_name> <build2_name> <build3_name>

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

$ oc cancel-build bc/<buildconfig_name>

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

$ oc cancel-build bc/<buildconfig_name>  --state=<state>

删除build config

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

$ oc delete bc <BuildConfigName>

未完待续

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏写写代码吃吃瓜

Ubuntu环境下Tornado环境部署

1817
来自专栏北京马哥教育

19个Linux备份压缩命令

? 文 | 云豆 来源 | 菜鸟教程 ? 云豆贴心提醒,本文阅读时间5分钟,文末有秘密! Linux ar命令 Linux ar命令用于建立或修改备存...

4246
来自专栏编程坑太多

『中级篇』 容器之间的Link(27)

PS:用户自定义的bridge 和 docker0 这个bridge他们之前的区别,docker0 如果通过名称想找到需要通过link,实际的项目中很少使用li...

731
来自专栏三木的博客

操作系统级虚拟化概述

操作系统级虚拟化 KVM、XEN等虚拟化技术允许各个虚拟机拥有自己独立的操作系统。与KVM、XEN等虚拟化技术不同,所谓操作系统级虚拟化,也被称作容器化,是操作...

3166
来自专栏实战docker

实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署

最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的web...

6145
来自专栏Samego开发资源

JDK的安装与配置 | Linux&Windows

2633
来自专栏一英里广度一英寸深度的学习

No zuo no die ,用Docker安装Mysql

回显,GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs

1694
来自专栏运维

RHEL4.4老版本YUM安装

Red Hat Enterprise Linux AS release 4 (Nahant Update 4)

2552
来自专栏LuckQI

微服务重要的容器技术Docker的核心实现技术

Docker 作为一种容器虚拟化技术,应用了操作系统的多项底层支持技术。其中的技术层包含Linux操作系统的命名空间Namespace,控制组,联合文件系统,...

1373
来自专栏漫漫全栈路

.NET Core 实战笔记2-从命令开始

上一篇简要介绍了 .NET Core平台,本篇对dotnet命令进行讲解。 .NET Core作为跨平台产品,不再只依赖于Windows的图形化界面系统,因而...

40811

扫码关注云+社区

领取腾讯云代金券