Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/goodrain/builder
builder for rainbond
https://github.com/goodrain/builder
builder buildpack docker rainbond rainbond-environment
Last synced: about 2 months ago
JSON representation
builder for rainbond
- Host: GitHub
- URL: https://github.com/goodrain/builder
- Owner: goodrain
- Created: 2018-01-04T02:39:20.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-08-08T07:59:40.000Z (5 months ago)
- Last Synced: 2024-08-08T09:34:30.649Z (5 months ago)
- Topics: builder, buildpack, docker, rainbond, rainbond-environment
- Language: Shell
- Homepage: http://www.rainbond.com
- Size: 10 MB
- Stars: 12
- Watchers: 9
- Forks: 31
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: changelog.md
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.org/goodrain/builder.svg?branch=v5.1)](https://travis-ci.org/goodrain/builder)
# Builder
该项目为[Rainbond](https://github.com/goodrain/rainbond)项目的子项目。
借助于 [Docker](http://docker.io) 和 [Buildpacks](https://devcenter.heroku.com/articles/buildpacks) 来生成 Heroku 风格的 [slug](https://devcenter.heroku.com/articles/slug-compiler) 为app提供运行环境。## 组件做了哪那些事呢?
源码会通过 buildpacks 运行, 如果源码被检测是被支持的app则就会进行编译,生成gzip的压缩包形式,以备在各处运行。
## 本地构建 Builder 镜像
首先, 你需要有Docker,:
```bash
$ ./release.sh local
```## 本地调试
以 Java 代码为例:
code 目录保存代码
slug 目录保存slug.tgz
```bash
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](https://github.com/progrium/cedarish) 创建,它模拟了 Heroku Cedar stack 环境。所有的 buildpacks 都运行在这个镜像中,如果某些buildpack出错,需要对该镜像进行修改。