该Makefile一开头定义了12个“伪目标文件”
.PHONY: all deps static clean client-lint client-test client-sync backend frontend shell lint ui-upload
然后定义一大堆变量,接下来先执行
sudo -E docker build -t weaveworks/scope-backend-build backend
根据scope\backend目录下的Dockerfile文件来创建镜像,该镜像基于ubuntu。
接下来执行docker build -t weaveworks/scope-ui-build client,根据scope\client目录下的Dockerfile文件来创建另一个镜像。该镜像基于node.js。
接下来安装docker和weave.
curl -o .pkg/docker-1.13.1.tgz https://get.docker.com/builds/Linux/x86_64/docker-1.13.1.tgz
curl -L https://github.com/weaveworks/weave/releases/download/v1.9.0/weave -o docker/weave
之后启动weaveutil,创建weaveworks镜像。
docker run --rm --entrypoint=cat weaveworks/weaveexec:1.9.0 /usr/bin/weaveutil > docker/weaveutil
docker build -t weaveworks/cloud-agent -f docker/Dockerfile.cloud-agent docker/
docker run --rm -ti \
-v /root/scope:/go/src/github.com/weaveworks/scope \
-v /root/scope/.pkg:/go/pkg \
--net=host \
-e GOARCH -e GOOS -e CIRCLECI -e CIRCLE_BUILD_NUM -e CIRCLE_NODE_TOTAL \
-e CIRCLE_NODE_INDEX -e COVERDIR -e SLOW -e TESTDIRS \
weaveworks/scope-backend-build SCOPE_VERSION=06bb515 GO_BUILD_INSTALL_DEPS=-i CODECGEN_UID=0 vendor/runsvinit/runsvinit
最后创建scope镜像
docker build -t weaveworks/scope -f docker/Dockerfile.scope docker/
这样就算make完了,当然由于国内网络众所周知的原因,可能会报如下错误。
package golang.org/x/tools/go/gcexportdata: unrecognized import path "golang.org/x/tools/go/gcexportdata" (https fetch: Get https://golang.org/x/tools/go/gcexportdata?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
package golang.org/x/tools/go/loader: unrecognized import path "golang.org/x/tools/go/loader" (https fetch: Get https://golang.org/x/tools/go/loader?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
我是使用香港的阿里云机器编译通过的。
粗略的看了这个Makefile,我了解到scope\client这个文件夹主要是程序的ui部分,用react来实现的。而整个项目的启动程序是在scope\prog目录下。
接下来我就会分析下scope\prog下的main.go