7.2 在 Deis 上 Hacking
我们尝试使得在 Deis 上 hack 更简单。尽管如此,这里有一些必要的变化因素和一些必要的设置。我们欢迎任何可以自动化或者是简化该过程的建议。
如果你是刚进入 Deis 代码基线,使用 easy-fix 标签寻找 GitHub issues。这有很多直接或者是低风险的 issues,这是一种变得对 Deis 更熟悉的方式。
先决条件
你可以在任何支持平台开发,包括你的笔记本,云厂商或者是在裸机上。我们强烈建议最小的 3 节点集群。
开发工作流要求一个 Docker Registry,它对你和你集群的所有主机来说是可访问的。
你也将需要一个 deisctl 客户端来更新镜像以及存储组件。
Fork the Repository
为了得到 Deis 来开发,首先 fork the Deis repository,然后 clone 你 fork 的这个 repository:
$ git clone git@github.com:<username>/deis.git
$ cd deis
$ export DEIS_DIR=`pwd` # to use in future commands
安装客户端
在一个开发环境,你将想使用最新版本的客户端。通过使用 Makefile 和符号链接 client/deis.py
到你本地工作环境的 deis 来安装它的依赖。
$ cd $DEIS_DIR/client
$ make install
$ sudo ln -fs $DEIS_DIR/client/deis.py /usr/local/bin/deis
$ deis
Usage: deis <command> [<args>...]
配置 SSH 隧道
为了使用 deisctl
连接集群,你必须添加私钥到 ssh-agent
。例如,当使用 Vagrant:
$ ssh-add ~/.vagrant.d/insecure_private_key
设置 DEISCTL_TUNNEL
,因此你工作环境中的 deisctl 客户端可以连接到你集群中的其中一台主机:
$ export DEISCTL_TUNNEL=172.17.8.100
使用 deisctl list
测试连通性:
$ deisctl list
配置一个 Docker Registry
开发工作流要求 Docker Registry 设置在 DEV_REGISTRY 环境变量中。如果你在本地开发,你可以使用 dev-registry
目标快速启动,一次性的注册进一个 Docker 容器中。
$ make dev-registry
To configure the registry for local Deis development:
export DEV_REGISTRY=192.168.59.103:5000
小提示 对于 Docker 1.3.1 和更新版,
docker push
到这个开发 registry,没有 SSL certificate 支持或许会失败。使用一个--insecure-registry
标识重启 Docker。
对于 boot2docker 1.3.1,例如,添加EXTRA_ARGS="--insecure-registry 192.168.59.103:5000"
到/var/lib/boot2docker/profile
并使用sudo /etc/init.d/docker restart
重启 Docker。
如果你在其他地方开发,你必须设置一个你自己的 registry。确保它满足以下要求:
- 你可以从你的工作环境 push Docker images 。
- 集群中的主机可以使用相同的 URL 来 pull images
小提示 如果开发 registry 是不安全的以及有一个除了 10.0.0.0/8, 172.16.0.0/12, 或 192.168.0.0/16 之外的 IP 地址范围,你将不得不修改
contrib/coreos/user-data.example
并把你的开发 registry 加入白名单列表,因此 daemons 能 pull 你的基础组件。
开发工作流
Deis 包含 Makefile 设计来简化开发工作流。该工作流通常是:
- 更新源代码和使用 git 提交你的变更
- 使用
make -C <component> build
构建一个新的 Docker 镜像 - 使用
make -C <component> dev-release
来 push 一个发行快照 - 使用
make -C <component> restart
重启组件
这个可以通过使用 deploy
缩短到一行:
$ make -C controller deploy
你也可以使用相同的任务在 root Makefile 上操作所有组件。比如,make deploy
将构建,dev-release,和重启集群上的所有组件。
重要 为了裁剪一个 dev-release,当给 Docker 镜像加标签时, 你必须使用 git 提交变更来增加 SHA 使用。
测试你的变更
Deis 使用一套综合的自动化测试来交付,大部分使用 Go 编写。看正在运行测试的测试 Deis 操作指南。
有用的命令
一旦你的 controller 正在运行,这里有一些有帮助的命令。
Tail Logs
$ deisctl journal controller
从源码重新构建服务
$ make -C controller build push restart
重启服务
$ make -C controller restart
Django Shell
$ deisctl ssh controller # SSH into the controller
$ nse deis-controller # inject yourself into the container
$ cd /app # change into the django project root
$ ./manage.py shell # get a django shell
其他一些 Deis 开发者或许会发现有用的命令?请给我们发 PR。
Pull Requests
请读 PR 清单。当提一个变更给 Deis 时,它包含一份你应该做的事情的清单。