SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
KAI CHU CHUNG
Cloud GDE
GDG Cloud Taipei co-organizers
@CageChung
https://kaichu.io
Buildpacks
Containers for Everyone
KAI CHU CHUNG
Cloud GDE
GDG Cloud Taipei co-organizers
QNAP
@CageChung
https://kaichu.io
Agenda
● Pack for future
● Build your first buildpack
● Demo
● Q & A
Pack for future
FROM golang:1.14
WORKDIR /go/src/app
COPY . .
RUN go get -d -v ./...
RUN go install -v ./...
CMD ["app"]
$ docker build -t my-golang-app .
$ docker run -it --rm --name my-running-app my-golang-app
Dockerfile
Golang
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./your-daemon-or-script.py" ]
$ docker build -t my-python-app .
$ docker run -it --rm --name my-running-app my-python-app
Dockerfile
Python
https://www.docker.com/blog/intro-guide-to-dockerfile-best-practices/
https://www.docker.com/blog/intro-guide-to-dockerfile-best-practices/
Official Python
Dockerfile
docker-library/python
has a 112 line RUN command
https://github.com/docker-library/python/blob/4bff010c9735707699dd72524c7d1a827f6f5933/3.9/alpine3.13/Dockerfile#L29-L142
Docker != Dockerfile
https://buildpacks.io/
https://buildpacks.io/
2018/10 2020/7
Cloud Next 20’
buildpacks
2011
History of Buildpacks
App image that has
● a reproducible build
● metadata that can be inspected
● logical mapping of layers to components
OS
app
dependencies
https://github.com/buildpacks/spec/blob/main/README.md,
https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
The Result
CNB: An Open Standard
Platform Lifecycle Buildpacks
CNB Specification v3
Platform API 0.6 Buildpack API 0.6
Pack
kpack
Heroku
Tekton
Google Cloud Run Button
Cloud Build
CircleCI
Gitlab Auto DevOps
Distribution API 0.2
https://github.com/buildpacks/spec/blob/main/README.md,
https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
Build
stack
build image run image
build image
lifecycle
buildpack C
buildpack B
buildpack A
builder image
</>
source
run image
dependency B
dependency A
app
app image
pack
dependency C
...
https://github.com/buildpacks/spec/blob/main/README.md,
https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
Lifecycle
Finds an ordered group of buildpacks to use during the build phase.
Restores files that buildpacks may use to optimize the build and export
phases.
Restores layers from the cache.
Transforms application source code into runnable artifacts that can be
packaged into a container.
Creates the final OCI image.
Detect
Analysis
Restore
Build
export
https://github.com/buildpacks/spec/blob/main/platform.md#lifecycle-interface
https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
$ pack builder suggest
Suggested builders:
Google: gcr.io/buildpacks/builder:v1 Ubuntu 18 base image with
buildpacks for .NET, Go, Java,
Node.js, and Python
Heroku: heroku/buildpacks:18 Base builder for Heroku-18
stack, based on ubuntu:18.04
base image
Heroku: heroku/buildpacks:20 Base builder for Heroku-20
stack, based on ubuntu:20.04
base image
Paketo Buildpacks: paketobuildpacks/builder:base Ubuntu bionic base image with
buildpacks for Java, .NET Core,
NodeJS, Go, Ruby, NGINX and Procfile
Paketo Buildpacks: paketobuildpacks/builder:full Ubuntu bionic base image with
buildpacks for Java, .NET Core,
NodeJS, Go, PHP, Ruby, Apache HTTPD,
NGINX and Procfile
Paketo Buildpacks: paketobuildpacks/builder:tiny Tiny base image (bionic build image,
distroless-like run image) with
buildpacks for Java Native Image and
Go
GoogleCloudPlatform/
buildpacks
https://github.com/GoogleCloudPlatform/bu
ildpacks
Builders and buildpacks designed
to run on Google Cloud's container
platforms
1. General purpose for Cloud Run (Cloud Run Button), GKE, Anthos, App Engine, Cloud
functions, 100% compatible with Cloud Native Buildpacks.
2. Supported languages
Runtime App Support Function Support
Go 1.10 + ✓ ✓
Node.js 10 + ✓ ✓
Python 3.7 + ✓ ✓
Java 8, 11 ✓ ✓ (11 only)
.NET Core 3.1 + ✓ ✓
3. Usage: suitable for use with pack, kpack, tekton, skaffold
4. Using with Google Cloud Build / gcloud command
Google Cloud Buildpacks
pack build Usage:
pack build <image-name> [flags]
Examples:
pack build test_img --path apps/test-app --builder cnbs/sample-builder:bionic
Flags:
-B, --builder string Builder image (default "index.docker.io/paketobuildpacks/builder:base")
-b, --buildpack strings Buildpack to use. One of:
a buildpack by id and version in the form of '<buildpack>@<version>',
path to a buildpack directory (not supported on Windows),
path/URL to a buildpack .tar or .tgz file, or
a packaged buildpack image name in the form of '<hostname>/<repo>[:<tag>]'
Repeat for each buildpack in order, or supply once by comma-separated list
-r, --buildpack-registry string Buildpack Registry by name
--cache-image string Cache build layers in remote registry. Requires --publish
Create an image from buildpack
pack build my-golang-app --builder gcr.io/buildpacks/builder:v1 golang-sample
pack build my-golang-app2 --builder paketobuildpacks/builder:base golang-sample
FROM gcr.io/gcp-runtimes/go1-builder:1.14 AS builder
# Set working directory
WORKDIR /go/src/github.com/cage1016/ms-sample/
ENV GO111MODULE=on
ENV PATH="${PATH}:/usr/local/go/bin"
COPY . .
RUN go mod download
RUN GOOS=linux go build -o /exe cmd/add/main.go
FROM gcr.io/distroless/base:latest
COPY --from=builder /exe .
ENTRYPOINT ["/exe"]
apiVersion: skaffold/v2beta13
kind: Config
build:
artifacts:
- image: index.docker.io/cage1016/ms-sample-add
buildpacks:
builder: gcr.io/buildpacks/builder:v1
env:
- GOOGLE_BUILDABLE=cmd/add/main.go
Usage: Skaffold
In Skaffold 1.11 (schema v2beta5), the singular buildpack field was renamed to buildpacks.
- name: build-add
taskRef:
name: buildpacks
params:
- name: APP_IMAGE
value: index.docker.io/cage1016/ms-sample-add
- name: BUILDER_IMAGE
value: gcr.io/buildpacks/builder:v1
- name: ENV_VARS
value:
- GOOGLE_BUILDABLE=cmd/add/main.go
workspaces:
- name: source
Usage: Tekton
https://github.com/tektoncd/catalog/blob/main/task/buildpacks/0.3/README.md
● Tekton v0.17.0 and above
● Platform API 0.4
steps:
- name: gcr.io/cloud-builders/gcloud
args:
- builds
- submit
-
--pack=builder=gcr.io/buildpacks/builder:v1,env=GOOGLE_BUILDABLE=cmd/add/main.go,image=index.
docker.io/cage1016/ms-sample-add
Usage: gcloud command
gcloud builds submit - submit a build using Google Cloud Build
ONLY support pack builder, env, image parameters
steps:
- name: gcr.io/k8s-skaffold/pack
entrypoint: pack
args:
- build
- index.docker.io/cage1016/ms-sample-add // --publish=index.docker.io/cage1016/ms-sample-add
- --builder=gcr.io/buildpacks/builder
- --env=GOOGLE_BUILDABLE=cmd/add/main.go
Usage: Cloud Build
instance by using the pack builder image provided by the Skaffold project
[[build.env]]
name = "GOOGLE_BUILDABLE"
value = "cmd/add/main.go"
Usage: Cloud Run Button
Sample: https://github.com/cage1016/gokit-add-cloud-run
Let anyone deploy your GitHub repos to Google Cloud Run with a
single click
...
- id: setup-pack
uses: buildpacks/github-actions/setup-pack@v4.1.0
- id: package
run: |
#!/usr/bin/env bash
set -euo pipefail
pack build --builder ${BUILDER} --env GOOGLE_BUILDABLE=cmd/add/main.go --publish ${IMAGE}
shell: bash
env:
BUILDER: gcr.io/buildpacks/builder:v1
IMAGE: ghcr.io/${{ github.repository_owner }}/ms-sample-add
Usage: Github Action
buildpacks/github-actions/setup-pack@v4.1.0
Build your first
buildpack
...
Digest: sha256:c3a070ed0eaf8776b66f9f7c285469edccf52
Status: Downloaded newer image for buildpacksio/life
===> DETECTING
[detector] 3 of 6 buildpacks participating
[detector] google.go.runtime 0.9.1
[detector] google.go.build 0.9.0
[detector] google.utils.label 0.0.1
===> ANALYZING
[analyzer] Previous image with name "index.docker.io
===> RESTORING
===> BUILDING
[builder] === Go - Runtime (google.go.runtime@0.9.1)
[builder] Using runtime version from go.mod: 1.14
[builder] Installing Go v1.14
[builder] ------------------------------------------
[builder] Running "bash -c curl --fail --show-error
https://dl.google.com/go/go1.14.linux-amd64.tar.gz |
/layers/google.go.runtime/go --strip-components=1"
[builder] Done "bash -c curl --fail --show-error --s
[builder] === Go - Build (google.go.build@0.9.0) ===
[builder] ------------------------------------------
[builder] Running "go build -o /layers/google.go.bui
(GOCACHE=/layers/google.go.build/gocache)"
....
[builder] go: downloading golang.org/x/text v0.3.3
[builder] Done "go build -o /layers/google.go.build/
[builder] === Utils - Label Image (google.utils.labe
===> EXPORTING
[exporter] Addin
[exporter] Adding layer 'google.go.build:bin'
[exporter] Adding 1/1 app layer(s)
[exporter] Adding layer 'launcher'
[exporter] Adding layer 'config'
[exporter] Adding layer 'process-types'
[exporter] Adding label 'io.buildpacks.lifecycle.met
[exporter] Adding label 'io.buildpacks.build.metadat
[exporter] Adding label 'io.buildpacks.project.metad
[exporter] Setting default process type 'web'
[exporter] *** Images (9056bf23e254):
Build
A single app image build consists of the following phases
1. Detection
2. Analysis
3. Cache Restoration
4. Build
5. Export
https://github.com/buildpacks/spec/blob/a9f64de9c78022aa7a5091077a765f932d7afe42/platform.md#build
├── jq-cnb
│ ├── bin
│ │ ├── build
│ │ └── detect
│ └── buildpack.toml
buildpack.toml
jq-cnb: A Cloud Native Buildpack that include jq
1. builderpack.toml - provides metadata about your buildpack
2. bin/detect - determines whether buildpack should be
applied
3. bin/build - executes buildpack logic
api = "0.4"
[buildpack]
id = "cage1016/jq-cnb"
name = "jq cloud native buildpack"
version = "1.0.0"
[[buildpack.licenses]]
type = "MIT"
[[stacks]]
id = "google"
[[stacks]]
id = "io.buildpacks.stacks.bionic"
[[stacks]]
id = "io.buildpacks.samples.stacks.bionic"
[[stacks]]
id = "heroku-18"
[[stacks]]
#!/usr/bin/env bash
set -eo pipefail
exit 0
#!/usr/bin/env bash
set -eo pipefail
LAYERS_DIR=$1
JQ_VERSION=1.6
JQ_LAYER_DIR="${LAYERS_DIR}/jq"
mkdir -p "${JQ_LAYER_DIR}/bin"
URL="https://github.com/stedolan/jq/releases/down
load/jq-${JQ_VERSION}/jq-linux64"
echo "-----> Download jq ${JQ_VERSION}"
curl -s -L --retry 15 --retry-delay 2 $URL -o
"${JQ_LAYER_DIR}/bin/jq" && chmod +x
"${JQ_LAYER_DIR}/bin/jq"
echo -e 'launch = true' > "${LAYERS_DIR}/jq.toml"
buildpack.toml bin/detect bin/build
Network Mode:
===> DETECTING
======== Results ========
pass: cage1016/jq-cnb@1.0.0
Resolving plan... (try #1)
cage1016/jq-cnb 1.0.0
===> ANALYZING
Previous image with name "test_jq_run" not found
===> RESTORING
===> BUILDING
-----> Download jq 1.6
===> EXPORTING
no project metadata found at path 'project-metadata.toml', project metadata will not be exported
Reusing tarball for layer "cage1016/jq-cnb:jq" with SHA: sha256:89dd798984d744c95941db3ad44ed327866befc9eb6dbd2c98b519d9fd329291
Adding layer 'cage1016/jq-cnb:jq'
Layer 'cage1016/jq-cnb:jq' SHA: sha256:89dd798984d744c95941db3ad44ed327866befc9eb6dbd2c98b519d9fd329291
Layer 'slice-1' SHA: sha256:dfbb65bf60bd2ac9f418a18b9d97f64cafedff2f843c77f49dfe500ba2567d63
Adding 1/1 app layer(s)
Reusing tarball for layer "launcher" with SHA: sha256:576e5f5696c6fcae9b679dca450d7ab127176f5c529bc9790b42abb9e3658cfa
Adding layer 'launcher'
Layer 'launcher' SHA: sha256:576e5f5696c6fcae9b679dca450d7ab127176f5c529bc9790b42abb9e3658cfa
Reusing tarball for layer "config" with SHA: sha256:d6180b5c495b7f052ba8fd433997d6889fe9230de109acfa99accc3dd9aff430
Adding layer 'config'
Layer 'config' SHA: sha256:d6180b5c495b7f052ba8fd433997d6889fe9230de109acfa99accc3dd9aff430
Adding label 'io.buildpacks.lifecycle.metadata'
Adding label 'io.buildpacks.build.metadata'
Adding label 'io.buildpacks.project.metadata'
Setting CNB_LAYERS_DIR=/layers
Setting CNB_APP_DIR=/workspace
Setting CNB_PLATFORM_API=0.4
Setting CNB_DEPRECATION_MODE=quiet
Prepending /cnb/process and /cnb/lifecycle to PATH
Warning: default process type 'web' not present in list []
Setting ENTRYPOINT: '/cnb/lifecycle/launcher'
*** Images (0db07dd2a5c0):
Package packit provides primitives for implementing a Cloud
Native Buildpack according to the specification:
https://github.com/buildpacks/spec/blob/main/buildpack.md.
Buildpacks Utils Library
├── bin
│ ├── build
│ └── detect
├── cmd
│ ├── build
│ │ └── main.go
│ └── detect
│ └── main.go
├── jq
│ ├── build.go
│ └── detect.go
├── buildpack.toml
├── go.mod
└── go.sum
1. paketo-buildpacks/packit
Package packit provides primitives for implementing a Cloud
Native Buildpack according to the specification:
https://github.com/buildpacks/spec/blob/main/buildpack.md.
Bootstrapper
.
├── .bin
│ ├── jam
│ └── pack
├── .github
│ ├── workflows
│ │ ├── auto-merge.yml
│ │ ├── create-draft-release.yml
│ │ ├── lint.yml
│ │ ├── push-buildpackage.yml
│ │ ├── synchronize-labels.yml
│ │ ├── test-pull-request.yml
│ │ └── update-github-config.yml
│ ├── .syncignore
│ ├── dependabot.yml
│ └── labels.yml
├── bin
│ ├── build -> run
│ ├── detect -> run
│ └── run
├── integration
│ ├── testdata
│ │ └── default_app
│ ├── default_test.go
│ └── init_test.go
├── run
│ └── main.go
├── scripts
│ ├── .util
│ │ ├── git.sh
│ │ ├── print.sh
│ │ ├── tools.json
│ │ └── tools.sh
│ ├── build.sh
│ ├── integration.sh
│ ├── package.sh
│ └── unit.sh
├── .gitignore
├── .packit
├── LICENSE
1. paketo-community/bootstrapper
cage1016/jq-cnb
https://github.com/cage1016/jq-cnb
A Cloud Native Buildpack that
include jq
pack build myapp --buildpack
cage1016/jq-cnb@1.1.0
cage1016/github-asset
s-cnb
https://github.com/cage1016/github-assets-
cnb
A Cloud Native Buildpack that that
Download Github Assets
pack build myapp --buildpack
cage1016/github-assets-cnb@1.0.0
Demo
KAI CHU CHUNG
GDE Cloud
GDG Cloud Taipei co-organizers
@CageChung
https://kaichu.io
Q & A

Mais conteúdo relacionado

Mais procurados

Docker & FieldAware
Docker & FieldAwareDocker & FieldAware
Docker & FieldAware
Jakub Jarosz
 

Mais procurados (20)

Continuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCPContinuous Integration & Continuous Delivery with GCP
Continuous Integration & Continuous Delivery with GCP
 
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...
 
Ship your Scala code often and easy with Docker
Ship your Scala code often and easy with DockerShip your Scala code often and easy with Docker
Ship your Scala code often and easy with Docker
 
How to debug the pod which is hard to debug (디버그 하기 어려운 POD 디버그 하기)
How to debug the pod which is hard to debug (디버그 하기 어려운 POD 디버그 하기)How to debug the pod which is hard to debug (디버그 하기 어려운 POD 디버그 하기)
How to debug the pod which is hard to debug (디버그 하기 어려운 POD 디버그 하기)
 
60分鐘完送百萬edm,背後雲端ci/cd實戰大公開
60分鐘完送百萬edm,背後雲端ci/cd實戰大公開60分鐘完送百萬edm,背後雲端ci/cd實戰大公開
60分鐘完送百萬edm,背後雲端ci/cd實戰大公開
 
Kubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with PodmanKubernetes Story - Day 1: Build and Manage Containers with Podman
Kubernetes Story - Day 1: Build and Manage Containers with Podman
 
CI : the first_step: Auto Testing with CircleCI - (MOSG)
CI : the first_step: Auto Testing with CircleCI - (MOSG)CI : the first_step: Auto Testing with CircleCI - (MOSG)
CI : the first_step: Auto Testing with CircleCI - (MOSG)
 
Docker workshop 0507 Taichung
Docker workshop 0507 Taichung Docker workshop 0507 Taichung
Docker workshop 0507 Taichung
 
Fabricio - Docker deploy automation
Fabricio - Docker deploy automationFabricio - Docker deploy automation
Fabricio - Docker deploy automation
 
PuppetConf 2016: Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
PuppetConf 2016:  Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...PuppetConf 2016:  Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
PuppetConf 2016: Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
 
手把手帶你學Docker 03042017
手把手帶你學Docker 03042017手把手帶你學Docker 03042017
手把手帶你學Docker 03042017
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
Ansible Workshop for Pythonistas
Ansible Workshop for PythonistasAnsible Workshop for Pythonistas
Ansible Workshop for Pythonistas
 
Docker & FieldAware
Docker & FieldAwareDocker & FieldAware
Docker & FieldAware
 
開放運算&GPU技術研究班
開放運算&GPU技術研究班開放運算&GPU技術研究班
開放運算&GPU技術研究班
 
Docker 初探,實驗室中的運貨鯨
Docker 初探,實驗室中的運貨鯨Docker 初探,實驗室中的運貨鯨
Docker 初探,實驗室中的運貨鯨
 
Continous delivery with sbt
Continous delivery with sbtContinous delivery with sbt
Continous delivery with sbt
 
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012Gradle build tool that rocks with DSL JavaOne India 4th May 2012
Gradle build tool that rocks with DSL JavaOne India 4th May 2012
 
Hide your development environment and application in a container
Hide your development environment and application in a containerHide your development environment and application in a container
Hide your development environment and application in a container
 
Android presentation - Gradle ++
Android presentation - Gradle ++Android presentation - Gradle ++
Android presentation - Gradle ++
 

Semelhante a Gdg cloud taipei ddt meetup #53 buildpack

Semelhante a Gdg cloud taipei ddt meetup #53 buildpack (20)

DCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best PracticesDCSF19 Dockerfile Best Practices
DCSF19 Dockerfile Best Practices
 
Streamline your development environment with docker
Streamline your development environment with dockerStreamline your development environment with docker
Streamline your development environment with docker
 
Serverless Container with Source2Image
Serverless Container with Source2ImageServerless Container with Source2Image
Serverless Container with Source2Image
 
Serverless containers … with source-to-image
Serverless containers  … with source-to-imageServerless containers  … with source-to-image
Serverless containers … with source-to-image
 
Into to Docker (Central PA Java User Group - 8/14/2017)
Into to Docker (Central PA Java User Group - 8/14/2017)Into to Docker (Central PA Java User Group - 8/14/2017)
Into to Docker (Central PA Java User Group - 8/14/2017)
 
Front-end tools
Front-end toolsFront-end tools
Front-end tools
 
How to Improve Your Image Builds Using Advance Docker Build
How to Improve Your Image Builds Using Advance Docker BuildHow to Improve Your Image Builds Using Advance Docker Build
How to Improve Your Image Builds Using Advance Docker Build
 
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...
Package a PyApp as a Flatpak Package: An HTTP Server for Example @ PyCon APAC...
 
DockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best PracticesDockerCon EU 2018 - Dockerfile Best Practices
DockerCon EU 2018 - Dockerfile Best Practices
 
DCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best PracticesDCEU 18: Dockerfile Best Practices
DCEU 18: Dockerfile Best Practices
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
 
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
 
DevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChungDevFest 2022 - Cloud Workstation Introduction TaiChung
DevFest 2022 - Cloud Workstation Introduction TaiChung
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a pro
 
Develop with docker 2014 aug
Develop with docker 2014 augDevelop with docker 2014 aug
Develop with docker 2014 aug
 
5 Things I Wish I Knew About Gitlab CI
5 Things I Wish I Knew About Gitlab CI5 Things I Wish I Knew About Gitlab CI
5 Things I Wish I Knew About Gitlab CI
 
Using Nix and Docker as automated deployment solutions
Using Nix and Docker as automated deployment solutionsUsing Nix and Docker as automated deployment solutions
Using Nix and Docker as automated deployment solutions
 
Docker for mere mortals
Docker for mere mortalsDocker for mere mortals
Docker for mere mortals
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
Software Packaging for Cross OS Distribution
Software Packaging for Cross OS DistributionSoftware Packaging for Cross OS Distribution
Software Packaging for Cross OS Distribution
 

Mais de KAI CHU CHUNG

Mais de KAI CHU CHUNG (17)

Devfest 2023 - Service Weaver Introduction - Taipei.pdf
Devfest 2023 - Service Weaver Introduction - Taipei.pdfDevfest 2023 - Service Weaver Introduction - Taipei.pdf
Devfest 2023 - Service Weaver Introduction - Taipei.pdf
 
DevFest 2022 - Skaffold 2 Deep Dive Taipei.pdf
DevFest 2022 - Skaffold 2 Deep Dive Taipei.pdfDevFest 2022 - Skaffold 2 Deep Dive Taipei.pdf
DevFest 2022 - Skaffold 2 Deep Dive Taipei.pdf
 
GDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
GDG Cloud Taipei: Meetup #52 - Istio Security: API AuthorizationGDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
GDG Cloud Taipei: Meetup #52 - Istio Security: API Authorization
 
COSCUP 2020 Google 技術 x 公共參與 x 開源 口罩地圖技術開源
COSCUP 2020 Google 技術 x 公共參與 x 開源 口罩地圖技術開源COSCUP 2020 Google 技術 x 公共參與 x 開源 口罩地圖技術開源
COSCUP 2020 Google 技術 x 公共參與 x 開源 口罩地圖技術開源
 
GDG Cloud Taipei meetup #50 - Build go kit microservices at kubernetes with ...
GDG Cloud Taipei meetup #50 - Build go kit microservices at kubernetes  with ...GDG Cloud Taipei meetup #50 - Build go kit microservices at kubernetes  with ...
GDG Cloud Taipei meetup #50 - Build go kit microservices at kubernetes with ...
 
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with easeGDG Devfest 2019 - Build go kit microservices at kubernetes with ease
GDG Devfest 2019 - Build go kit microservices at kubernetes with ease
 
Global GDG Leaders Summit, Google I/O 2018 經驗分享
Global GDG Leaders Summit, Google I/O 2018 經驗分享Global GDG Leaders Summit, Google I/O 2018 經驗分享
Global GDG Leaders Summit, Google I/O 2018 經驗分享
 
Google apps script introduction
Google apps script introductionGoogle apps script introduction
Google apps script introduction
 
Screenshot as a service
Screenshot as a serviceScreenshot as a service
Screenshot as a service
 
Nas 也可以揀土豆
Nas 也可以揀土豆Nas 也可以揀土豆
Nas 也可以揀土豆
 
Django oscar introduction
Django oscar introductionDjango oscar introduction
Django oscar introduction
 
Google apps script introduction
Google apps script introductionGoogle apps script introduction
Google apps script introduction
 
Gae managed vm introduction
Gae managed vm introductionGae managed vm introduction
Gae managed vm introduction
 
Google app engine (gae) 演進史
Google app engine (gae) 演進史Google app engine (gae) 演進史
Google app engine (gae) 演進史
 
痞客趴趴走 Waldo
痞客趴趴走   Waldo痞客趴趴走   Waldo
痞客趴趴走 Waldo
 
Waldo-gcp
Waldo-gcpWaldo-gcp
Waldo-gcp
 
Introduction to chrome extension development
Introduction to chrome extension developmentIntroduction to chrome extension development
Introduction to chrome extension development
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 

Gdg cloud taipei ddt meetup #53 buildpack

  • 1. KAI CHU CHUNG Cloud GDE GDG Cloud Taipei co-organizers @CageChung https://kaichu.io Buildpacks Containers for Everyone
  • 2. KAI CHU CHUNG Cloud GDE GDG Cloud Taipei co-organizers QNAP @CageChung https://kaichu.io
  • 3. Agenda ● Pack for future ● Build your first buildpack ● Demo ● Q & A
  • 5. FROM golang:1.14 WORKDIR /go/src/app COPY . . RUN go get -d -v ./... RUN go install -v ./... CMD ["app"] $ docker build -t my-golang-app . $ docker run -it --rm --name my-running-app my-golang-app Dockerfile Golang
  • 6. FROM python:3 WORKDIR /usr/src/app COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD [ "python", "./your-daemon-or-script.py" ] $ docker build -t my-python-app . $ docker run -it --rm --name my-running-app my-python-app Dockerfile Python
  • 9. Official Python Dockerfile docker-library/python has a 112 line RUN command https://github.com/docker-library/python/blob/4bff010c9735707699dd72524c7d1a827f6f5933/3.9/alpine3.13/Dockerfile#L29-L142
  • 12. https://buildpacks.io/ 2018/10 2020/7 Cloud Next 20’ buildpacks 2011 History of Buildpacks
  • 13. App image that has ● a reproducible build ● metadata that can be inspected ● logical mapping of layers to components OS app dependencies https://github.com/buildpacks/spec/blob/main/README.md, https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588 The Result
  • 14. CNB: An Open Standard Platform Lifecycle Buildpacks CNB Specification v3 Platform API 0.6 Buildpack API 0.6 Pack kpack Heroku Tekton Google Cloud Run Button Cloud Build CircleCI Gitlab Auto DevOps Distribution API 0.2 https://github.com/buildpacks/spec/blob/main/README.md, https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
  • 15. Build stack build image run image build image lifecycle buildpack C buildpack B buildpack A builder image </> source run image dependency B dependency A app app image pack dependency C ... https://github.com/buildpacks/spec/blob/main/README.md, https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
  • 16. Lifecycle Finds an ordered group of buildpacks to use during the build phase. Restores files that buildpacks may use to optimize the build and export phases. Restores layers from the cache. Transforms application source code into runnable artifacts that can be packaged into a container. Creates the final OCI image. Detect Analysis Restore Build export https://github.com/buildpacks/spec/blob/main/platform.md#lifecycle-interface https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
  • 17. $ pack builder suggest Suggested builders: Google: gcr.io/buildpacks/builder:v1 Ubuntu 18 base image with buildpacks for .NET, Go, Java, Node.js, and Python Heroku: heroku/buildpacks:18 Base builder for Heroku-18 stack, based on ubuntu:18.04 base image Heroku: heroku/buildpacks:20 Base builder for Heroku-20 stack, based on ubuntu:20.04 base image Paketo Buildpacks: paketobuildpacks/builder:base Ubuntu bionic base image with buildpacks for Java, .NET Core, NodeJS, Go, Ruby, NGINX and Procfile Paketo Buildpacks: paketobuildpacks/builder:full Ubuntu bionic base image with buildpacks for Java, .NET Core, NodeJS, Go, PHP, Ruby, Apache HTTPD, NGINX and Procfile Paketo Buildpacks: paketobuildpacks/builder:tiny Tiny base image (bionic build image, distroless-like run image) with buildpacks for Java Native Image and Go
  • 19. 1. General purpose for Cloud Run (Cloud Run Button), GKE, Anthos, App Engine, Cloud functions, 100% compatible with Cloud Native Buildpacks. 2. Supported languages Runtime App Support Function Support Go 1.10 + ✓ ✓ Node.js 10 + ✓ ✓ Python 3.7 + ✓ ✓ Java 8, 11 ✓ ✓ (11 only) .NET Core 3.1 + ✓ ✓ 3. Usage: suitable for use with pack, kpack, tekton, skaffold 4. Using with Google Cloud Build / gcloud command Google Cloud Buildpacks
  • 20. pack build Usage: pack build <image-name> [flags] Examples: pack build test_img --path apps/test-app --builder cnbs/sample-builder:bionic Flags: -B, --builder string Builder image (default "index.docker.io/paketobuildpacks/builder:base") -b, --buildpack strings Buildpack to use. One of: a buildpack by id and version in the form of '<buildpack>@<version>', path to a buildpack directory (not supported on Windows), path/URL to a buildpack .tar or .tgz file, or a packaged buildpack image name in the form of '<hostname>/<repo>[:<tag>]' Repeat for each buildpack in order, or supply once by comma-separated list -r, --buildpack-registry string Buildpack Registry by name --cache-image string Cache build layers in remote registry. Requires --publish Create an image from buildpack pack build my-golang-app --builder gcr.io/buildpacks/builder:v1 golang-sample pack build my-golang-app2 --builder paketobuildpacks/builder:base golang-sample
  • 21.
  • 22. FROM gcr.io/gcp-runtimes/go1-builder:1.14 AS builder # Set working directory WORKDIR /go/src/github.com/cage1016/ms-sample/ ENV GO111MODULE=on ENV PATH="${PATH}:/usr/local/go/bin" COPY . . RUN go mod download RUN GOOS=linux go build -o /exe cmd/add/main.go FROM gcr.io/distroless/base:latest COPY --from=builder /exe . ENTRYPOINT ["/exe"]
  • 23. apiVersion: skaffold/v2beta13 kind: Config build: artifacts: - image: index.docker.io/cage1016/ms-sample-add buildpacks: builder: gcr.io/buildpacks/builder:v1 env: - GOOGLE_BUILDABLE=cmd/add/main.go Usage: Skaffold In Skaffold 1.11 (schema v2beta5), the singular buildpack field was renamed to buildpacks.
  • 24. - name: build-add taskRef: name: buildpacks params: - name: APP_IMAGE value: index.docker.io/cage1016/ms-sample-add - name: BUILDER_IMAGE value: gcr.io/buildpacks/builder:v1 - name: ENV_VARS value: - GOOGLE_BUILDABLE=cmd/add/main.go workspaces: - name: source Usage: Tekton https://github.com/tektoncd/catalog/blob/main/task/buildpacks/0.3/README.md ● Tekton v0.17.0 and above ● Platform API 0.4
  • 25. steps: - name: gcr.io/cloud-builders/gcloud args: - builds - submit - --pack=builder=gcr.io/buildpacks/builder:v1,env=GOOGLE_BUILDABLE=cmd/add/main.go,image=index. docker.io/cage1016/ms-sample-add Usage: gcloud command gcloud builds submit - submit a build using Google Cloud Build ONLY support pack builder, env, image parameters
  • 26. steps: - name: gcr.io/k8s-skaffold/pack entrypoint: pack args: - build - index.docker.io/cage1016/ms-sample-add // --publish=index.docker.io/cage1016/ms-sample-add - --builder=gcr.io/buildpacks/builder - --env=GOOGLE_BUILDABLE=cmd/add/main.go Usage: Cloud Build instance by using the pack builder image provided by the Skaffold project
  • 27. [[build.env]] name = "GOOGLE_BUILDABLE" value = "cmd/add/main.go" Usage: Cloud Run Button Sample: https://github.com/cage1016/gokit-add-cloud-run Let anyone deploy your GitHub repos to Google Cloud Run with a single click
  • 28. ... - id: setup-pack uses: buildpacks/github-actions/setup-pack@v4.1.0 - id: package run: | #!/usr/bin/env bash set -euo pipefail pack build --builder ${BUILDER} --env GOOGLE_BUILDABLE=cmd/add/main.go --publish ${IMAGE} shell: bash env: BUILDER: gcr.io/buildpacks/builder:v1 IMAGE: ghcr.io/${{ github.repository_owner }}/ms-sample-add Usage: Github Action buildpacks/github-actions/setup-pack@v4.1.0
  • 30. ... Digest: sha256:c3a070ed0eaf8776b66f9f7c285469edccf52 Status: Downloaded newer image for buildpacksio/life ===> DETECTING [detector] 3 of 6 buildpacks participating [detector] google.go.runtime 0.9.1 [detector] google.go.build 0.9.0 [detector] google.utils.label 0.0.1 ===> ANALYZING [analyzer] Previous image with name "index.docker.io ===> RESTORING ===> BUILDING [builder] === Go - Runtime (google.go.runtime@0.9.1) [builder] Using runtime version from go.mod: 1.14 [builder] Installing Go v1.14 [builder] ------------------------------------------ [builder] Running "bash -c curl --fail --show-error https://dl.google.com/go/go1.14.linux-amd64.tar.gz | /layers/google.go.runtime/go --strip-components=1" [builder] Done "bash -c curl --fail --show-error --s [builder] === Go - Build (google.go.build@0.9.0) === [builder] ------------------------------------------ [builder] Running "go build -o /layers/google.go.bui (GOCACHE=/layers/google.go.build/gocache)" .... [builder] go: downloading golang.org/x/text v0.3.3 [builder] Done "go build -o /layers/google.go.build/ [builder] === Utils - Label Image (google.utils.labe ===> EXPORTING [exporter] Addin [exporter] Adding layer 'google.go.build:bin' [exporter] Adding 1/1 app layer(s) [exporter] Adding layer 'launcher' [exporter] Adding layer 'config' [exporter] Adding layer 'process-types' [exporter] Adding label 'io.buildpacks.lifecycle.met [exporter] Adding label 'io.buildpacks.build.metadat [exporter] Adding label 'io.buildpacks.project.metad [exporter] Setting default process type 'web' [exporter] *** Images (9056bf23e254): Build A single app image build consists of the following phases 1. Detection 2. Analysis 3. Cache Restoration 4. Build 5. Export https://github.com/buildpacks/spec/blob/a9f64de9c78022aa7a5091077a765f932d7afe42/platform.md#build
  • 31. ├── jq-cnb │ ├── bin │ │ ├── build │ │ └── detect │ └── buildpack.toml buildpack.toml jq-cnb: A Cloud Native Buildpack that include jq 1. builderpack.toml - provides metadata about your buildpack 2. bin/detect - determines whether buildpack should be applied 3. bin/build - executes buildpack logic
  • 32. api = "0.4" [buildpack] id = "cage1016/jq-cnb" name = "jq cloud native buildpack" version = "1.0.0" [[buildpack.licenses]] type = "MIT" [[stacks]] id = "google" [[stacks]] id = "io.buildpacks.stacks.bionic" [[stacks]] id = "io.buildpacks.samples.stacks.bionic" [[stacks]] id = "heroku-18" [[stacks]] #!/usr/bin/env bash set -eo pipefail exit 0 #!/usr/bin/env bash set -eo pipefail LAYERS_DIR=$1 JQ_VERSION=1.6 JQ_LAYER_DIR="${LAYERS_DIR}/jq" mkdir -p "${JQ_LAYER_DIR}/bin" URL="https://github.com/stedolan/jq/releases/down load/jq-${JQ_VERSION}/jq-linux64" echo "-----> Download jq ${JQ_VERSION}" curl -s -L --retry 15 --retry-delay 2 $URL -o "${JQ_LAYER_DIR}/bin/jq" && chmod +x "${JQ_LAYER_DIR}/bin/jq" echo -e 'launch = true' > "${LAYERS_DIR}/jq.toml" buildpack.toml bin/detect bin/build
  • 33. Network Mode: ===> DETECTING ======== Results ======== pass: cage1016/jq-cnb@1.0.0 Resolving plan... (try #1) cage1016/jq-cnb 1.0.0 ===> ANALYZING Previous image with name "test_jq_run" not found ===> RESTORING ===> BUILDING -----> Download jq 1.6 ===> EXPORTING no project metadata found at path 'project-metadata.toml', project metadata will not be exported Reusing tarball for layer "cage1016/jq-cnb:jq" with SHA: sha256:89dd798984d744c95941db3ad44ed327866befc9eb6dbd2c98b519d9fd329291 Adding layer 'cage1016/jq-cnb:jq' Layer 'cage1016/jq-cnb:jq' SHA: sha256:89dd798984d744c95941db3ad44ed327866befc9eb6dbd2c98b519d9fd329291 Layer 'slice-1' SHA: sha256:dfbb65bf60bd2ac9f418a18b9d97f64cafedff2f843c77f49dfe500ba2567d63 Adding 1/1 app layer(s) Reusing tarball for layer "launcher" with SHA: sha256:576e5f5696c6fcae9b679dca450d7ab127176f5c529bc9790b42abb9e3658cfa Adding layer 'launcher' Layer 'launcher' SHA: sha256:576e5f5696c6fcae9b679dca450d7ab127176f5c529bc9790b42abb9e3658cfa Reusing tarball for layer "config" with SHA: sha256:d6180b5c495b7f052ba8fd433997d6889fe9230de109acfa99accc3dd9aff430 Adding layer 'config' Layer 'config' SHA: sha256:d6180b5c495b7f052ba8fd433997d6889fe9230de109acfa99accc3dd9aff430 Adding label 'io.buildpacks.lifecycle.metadata' Adding label 'io.buildpacks.build.metadata' Adding label 'io.buildpacks.project.metadata' Setting CNB_LAYERS_DIR=/layers Setting CNB_APP_DIR=/workspace Setting CNB_PLATFORM_API=0.4 Setting CNB_DEPRECATION_MODE=quiet Prepending /cnb/process and /cnb/lifecycle to PATH Warning: default process type 'web' not present in list [] Setting ENTRYPOINT: '/cnb/lifecycle/launcher' *** Images (0db07dd2a5c0):
  • 34. Package packit provides primitives for implementing a Cloud Native Buildpack according to the specification: https://github.com/buildpacks/spec/blob/main/buildpack.md. Buildpacks Utils Library ├── bin │ ├── build │ └── detect ├── cmd │ ├── build │ │ └── main.go │ └── detect │ └── main.go ├── jq │ ├── build.go │ └── detect.go ├── buildpack.toml ├── go.mod └── go.sum 1. paketo-buildpacks/packit
  • 35. Package packit provides primitives for implementing a Cloud Native Buildpack according to the specification: https://github.com/buildpacks/spec/blob/main/buildpack.md. Bootstrapper . ├── .bin │ ├── jam │ └── pack ├── .github │ ├── workflows │ │ ├── auto-merge.yml │ │ ├── create-draft-release.yml │ │ ├── lint.yml │ │ ├── push-buildpackage.yml │ │ ├── synchronize-labels.yml │ │ ├── test-pull-request.yml │ │ └── update-github-config.yml │ ├── .syncignore │ ├── dependabot.yml │ └── labels.yml ├── bin │ ├── build -> run │ ├── detect -> run │ └── run ├── integration │ ├── testdata │ │ └── default_app │ ├── default_test.go │ └── init_test.go ├── run │ └── main.go ├── scripts │ ├── .util │ │ ├── git.sh │ │ ├── print.sh │ │ ├── tools.json │ │ └── tools.sh │ ├── build.sh │ ├── integration.sh │ ├── package.sh │ └── unit.sh ├── .gitignore ├── .packit ├── LICENSE 1. paketo-community/bootstrapper
  • 36. cage1016/jq-cnb https://github.com/cage1016/jq-cnb A Cloud Native Buildpack that include jq pack build myapp --buildpack cage1016/jq-cnb@1.1.0
  • 37. cage1016/github-asset s-cnb https://github.com/cage1016/github-assets- cnb A Cloud Native Buildpack that that Download Github Assets pack build myapp --buildpack cage1016/github-assets-cnb@1.0.0
  • 38. Demo
  • 39. KAI CHU CHUNG GDE Cloud GDG Cloud Taipei co-organizers @CageChung https://kaichu.io Q & A