{"id":19086157,"url":"https://github.com/goodrain/builder","last_synced_at":"2025-04-15T10:49:58.032Z","repository":{"id":41523141,"uuid":"116205659","full_name":"goodrain/builder","owner":"goodrain","description":"builder for rainbond","archived":false,"fork":false,"pushed_at":"2025-04-07T09:52:02.000Z","size":10536,"stargazers_count":16,"open_issues_count":0,"forks_count":34,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-07T10:33:35.686Z","etag":null,"topics":["builder","buildpack","docker","rainbond","rainbond-environment"],"latest_commit_sha":null,"homepage":"http://www.rainbond.com","language":"Shell","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/goodrain.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-01-04T02:39:20.000Z","updated_at":"2025-04-07T09:52:08.000Z","dependencies_parsed_at":"2023-01-27T13:31:40.265Z","dependency_job_id":"d7a7e550-6d45-4b5c-8528-3f066c893701","html_url":"https://github.com/goodrain/builder","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goodrain%2Fbuilder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goodrain%2Fbuilder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goodrain%2Fbuilder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goodrain%2Fbuilder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/goodrain","download_url":"https://codeload.github.com/goodrain/builder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249057400,"owners_count":21205904,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["builder","buildpack","docker","rainbond","rainbond-environment"],"created_at":"2024-11-09T02:58:35.825Z","updated_at":"2025-04-15T10:49:58.006Z","avatar_url":"https://github.com/goodrain.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/goodrain/builder.svg?branch=v5.1)](https://travis-ci.org/goodrain/builder)\n\n# Builder\n该项目为[Rainbond](https://github.com/goodrain/rainbond)项目的子项目。\n借助于 [Docker](http://docker.io) 和 [Buildpacks](https://devcenter.heroku.com/articles/buildpacks) 来生成 Heroku 风格的 [slug](https://devcenter.heroku.com/articles/slug-compiler) 为app提供运行环境。\n\n## 组件做了哪那些事呢？\n\n源码会通过 buildpacks 运行, 如果源码被检测是被支持的app则就会进行编译，生成gzip的压缩包形式，以备在各处运行。\n\n## 本地构建 Builder 镜像\n\n首先, 你需要有Docker，:\n```bash\n$ ./release.sh local\n```\n\n## 本地调试\n\n以 Java 代码为例：\ncode 目录保存代码\nslug 目录保存slug.tgz\n```bash\ndocker run -ti --rm --name=builder \\\n-e LANG_GOODRAIN_ME=\"https://buildpack.oss-cn-shanghai.aliyuncs.com\" \\\n-e RUNTIME=1.8 \\\n-e LANGUAGE=Java-maven \\\n-e SLUG_VERSION=demo \\\n-e DEBUG_INFO=true \\\n-e MAVEN_MIRROR_URL=\"http://mirrors.163.com/maven/repository/maven-public/\" \\\n-v $(pwd)/slug:/tmp/slug/ \\\n-v $(pwd)/code:/tmp/app \\\ngoodrain.me/builder local\n```\n\n## 标准输出输入用法\n\n当容器运行起来后，它准备通过标准输入设备接收app源码包。所以让我们通过`git archive` 来得到源码包:\n```\n\t$ id=$(git archive master | docker run -i -a stdin goodrain.me/builder)\n\t$ docker wait $id\n\t$ docker cp $id:/tmp/slug.tgz .\n```\n\n我们运行 builder容器,docker等待其正常退出，然后将只做好的slug包复制到当期目录。如果我们通过 `docker attach` 连接到容器可以看到Heroku的build日志。当然也可以通过下面的方式 *只* 查看build的输出信息：\n```\n\t$ git archive master | docker run -i -a stdin -a stdout goodrain.me/builder\n```\n\n我们也可以查找id，将slug复制到容器外面来，通过如下简单的方式来实现！\n```\n\t$ git archive master | docker run -i -a stdin -a stdout goodrain.me/builder - \u003e myslug.tgz\n```\n\n上面的 `-` 参数，它会发送所有build的stderr输出(在这里我们无法连接)stdout输出的内容就是slug，可以看到可以轻松的将输出重定向到一个压缩包文件。\n\n最后, 你也可以将压缩包文件PUT到指定的htpt服务器上，http地址作为builder的参数即可，如下：\n\n\t$ git archive master | docker run -i -a stdin -a stdout goodrain.me/builder http://fileserver/path/for/myslug.tgz\n\n## 缓存\n\n为了加快building速度，最好在building的时候挂载一个持久化存储目录到`/tmp/cache`，这样在第一次build时就可以可缓存的文件存在这个目录中，下次构建时可以直接使用。例如我希望挂载 /cache/abc 目录，构建时添加 `-v /tmp/app-cache:/tmp/cache:rw` 选项:\n\n\tdocker run -v /tmp/app-cache:/tmp/cache:rw -i -a stdin -a stdout goodrain.me/builder\n\n`注意`：挂载的目录需要为 rain 属主，否则构建会出错！\n\n\n## Buildpacks\n\n如你所见，builder支持heroku官方的buildpacks和众多的第三方buildpacks。当然你也可以添加自定义buildpack然后重新生成builder镜像。\n\n## 基础环境\n\nbuilder环境基于 [cedarish](https://github.com/progrium/cedarish) 创建，它模拟了 Heroku Cedar stack 环境。所有的 buildpacks 都运行在这个镜像中，如果某些buildpack出错，需要对该镜像进行修改。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoodrain%2Fbuilder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoodrain%2Fbuilder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoodrain%2Fbuilder/lists"}