Giter VIP home page Giter VIP logo

builder's Introduction

Build Status

Builder

该项目为Rainbond项目的子项目。 借助于 DockerBuildpacks 来生成 Heroku 风格的 slug 为app提供运行环境。

组件做了哪那些事呢?

源码会通过 buildpacks 运行, 如果源码被检测是被支持的app则就会进行编译,生成gzip的压缩包形式,以备在各处运行。

本地构建 Builder 镜像

首先, 你需要有Docker,:

$ ./release.sh local

本地调试

以 Java 代码为例: code 目录保存代码 slug 目录保存slug.tgz

docker run -ti --rm --name=builder \
-e LANG_GOODRAIN_ME="https://buildpack.oss-cn-shanghai.aliyuncs.com" \
-e RUNTIME=1.8 \
-e LANGUAGE=Java-maven \
-e SLUG_VERSION=demo \
-e DEBUG_INFO=true \
-e MAVEN_MIRROR_URL="http://mirrors.163.com/maven/repository/maven-public/" \
-v $(pwd)/slug:/tmp/slug/ \
-v $(pwd)/code:/tmp/app \
goodrain.me/builder local

标准输出输入用法

当容器运行起来后,它准备通过标准输入设备接收app源码包。所以让我们通过git archive 来得到源码包:

	$ id=$(git archive master | docker run -i -a stdin goodrain.me/builder)
	$ docker wait $id
	$ docker cp $id:/tmp/slug.tgz .

我们运行 builder容器,docker等待其正常退出,然后将只做好的slug包复制到当期目录。如果我们通过 docker attach 连接到容器可以看到Heroku的build日志。当然也可以通过下面的方式 查看build的输出信息:

	$ git archive master | docker run -i -a stdin -a stdout goodrain.me/builder

我们也可以查找id,将slug复制到容器外面来,通过如下简单的方式来实现!

	$ git archive master | docker run -i -a stdin -a stdout goodrain.me/builder - > myslug.tgz

上面的 - 参数,它会发送所有build的stderr输出(在这里我们无法连接)stdout输出的内容就是slug,可以看到可以轻松的将输出重定向到一个压缩包文件。

最后, 你也可以将压缩包文件PUT到指定的htpt服务器上,http地址作为builder的参数即可,如下:

$ git archive master | docker run -i -a stdin -a stdout goodrain.me/builder http://fileserver/path/for/myslug.tgz

缓存

为了加快building速度,最好在building的时候挂载一个持久化存储目录到/tmp/cache,这样在第一次build时就可以可缓存的文件存在这个目录中,下次构建时可以直接使用。例如我希望挂载 /cache/abc 目录,构建时添加 -v /tmp/app-cache:/tmp/cache:rw 选项:

docker run -v /tmp/app-cache:/tmp/cache:rw -i -a stdin -a stdout goodrain.me/builder

注意:挂载的目录需要为 rain 属主,否则构建会出错!

Buildpacks

如你所见,builder支持heroku官方的buildpacks和众多的第三方buildpacks。当然你也可以添加自定义buildpack然后重新生成builder镜像。

基础环境

builder环境基于 cedarish 创建,它模拟了 Heroku Cedar stack 环境。所有的 buildpacks 都运行在这个镜像中,如果某些buildpack出错,需要对该镜像进行修改。

builder's People

Contributors

1909490139 avatar aaron-23 avatar barnettzqg avatar dazuimao1990 avatar dependabot[bot] avatar dinghui40 avatar dokidoki1103 avatar fanyangyang avatar golangav avatar sycki avatar yangkaa avatar yiduzui avatar ysbot-ergo avatar ysicing avatar zhangsetsail avatar zhengxianlin avatar zhouyq avatar zzzhangqi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.