IaC

CloudNativeBuild使用及总结

Posted by Shi Hai's Blog on September 2, 2022

一、基本概念介绍

Cloud Native Buildpacks可以将你的应用源码转换为在任意云上运行的容器镜像。

  • buildpack:buildpack的职责是收集你的应用在buildrun阶段所需的所有要素;
  • builder:builder是一个包含执行build所需所有组件的镜像。

buildpack

二、安装及使用

下载示例代码。

git clone https://github.com/buildpacks/samples

cd到示例代码的一个应用。

cd samples/apps/java-maven

通过pack构建应用。

pack build myapp --builder cnbs/sample-builder:bionic

或者到buildpack路径中进行build构建。

cd buildpacks/java-maven
pack build sample-java-maven-app --builder cnbs/sample-builder:bionic --buildpack . --path ../../apps/java-maven

执行过程如下所示,由于我司有网络限制,具体的错误后面有时间在自己个人虚拟机上再执行试试。 ![](/img/2022/Q3/2022090201 pack build.png)

三、生命周期

从上面的执行图中除了拉取cnbs/sample-builder构建容器外,你会发现还有ANALYZINGDETECTINGRESTORINGBUILDINGBUILDING过程。这其实是云原生应用的完整的生命周期,详情

3.1 Build

  • analyzer:从上一个应用镜像中读取metadata信息;
  • detector:通过/bin/detect选择buildpacks并且生成一个build计划;
  • restorer:从上一个应用镜像和缓存中恢复layer metadatacached layers
  • builder:通过/bin/build执行buildpacks
  • exporter:创建镜像和caches layers
    或者
  • creator:运行上面的五个阶段,代码执行详情 命令行参数传入creator

3.2 Run

  • launcher:调用目标进程。

3.3 Rebase

  • rebaser:从上一个更新基础layers的image上创建image。

四、FAQ

  • Q1:samples/buildpacks中的build、detect脚本在哪个代码里面被调用?
    A1:最开始的pack版本模块没有拆分,调用代码在pack工具中,现在最新版本的执行代码在lifecycle中。

五、参考文档

Creating container images with Cloud Native Buildpacks using AWS CodeBuild and AWS CodePipeline
buildpack: build an app