2014-01-15 38 views
4

所以我有一个go-gettable依赖项,测试等项目推荐用于CI服务器的Go构建系统?

我想将它集成到詹金斯。有没有一个自动化的构建系统可供任何人推荐用于该用例,而不是写入makefiles?

我需要:

  1. 去,得到DEPS自动安装(他们可以在课程的规范文件)
  2. 递归构建。
  3. 正在运行测试。
  4. GOPATH/GOROOT管理(隔离SDK和路径)

我用godag在过去的这种工作,但似乎有点无人维护。

编辑:暂时我的生活与下面的脚本直接输入到詹金斯作为构建步骤:

#this gets the dependencies but doesn't install them, avoiding permission problems 
go get -d 

#build the packages, -x outputs the compiler command line 
go build -x 

#this was tricky - ./... means "for each sub-package recursively" 
go test ./... 
+0

去拿默认读取你的依赖。你不需要做任何事情。 – ymg

+0

去测试似乎不递归的工作。或者我错过了什么? –

+0

自动移动的另一个问题 - 我自己的应用程序有一个不可移动的名称空间(例如 - example.com/myproject)。这通常很好,只有去试图自动获得并失败,显然没有办法告诉它不要这样做。 –

回答

2

我使用的是团队打造城市在Mac服务器上运行一个耙子文件在rake文件中,我会执行所有命令来获得依赖关系,(去获取),测试并构建到正确的环境。

让我知道,如果你想任何指针书面耙文件,

作为一个侧面说明,我已经创造了REST API的使用这个框架的工作功能测试。这已经多次保存了我的代码。 http://github.com/DigitalInnovation/cucumber_rest_api

+0

谢谢。我希望有一些工具能够至少从我的源代码树中生成一个makefile或配置选项。我的意思是我可以写一个bash脚本,但我希望有更多的自动化。 –

5

你也可以使用teamcity来做到这一点。

以下是构建地形的示例。

TeamCity的代理设置:

  • 安装golang
  • 添加golang到路径
  • 不要忘记重启剂路径被改变

的TeamCity构建设置:

  • 使用代理侧结帐(如果我们要吨至包括git的文件夹,里面有很多构建脚本的使用)
  • 使用退房潜规则(我们要使用的golang惯例):

    + :. =>的src/github.com/mitchellh/terraform

打造步骤:

echo cd %system.teamcity.build.checkoutDir% 
cd "%system.teamcity.build.checkoutDir%" 
path=C:\Program Files (x86)\Git\bin;%env.Path%;%system.teamcity.build.checkoutDir%\bin; 
echo path=C:\Program Files (x86)\Git\bin;%env.Path%;%system.teamcity.build.checkoutDir%\bin; 
set GOPATH=%system.teamcity.build.checkoutDir% 
echo set GOPATH=%system.teamcity.build.checkoutDir% 

echo "Getting dependancies" 
go get golang.org/x/tools/cmd/vet 
go get golang.org/x/tools/cmd/cover 
go get golang.org/x/tools/cmd/stringer 
go get github.com/mitchellh/gox 

echo cd %system.teamcity.build.checkoutDir%\src\github.com\mitchellh\terraform 
cd "%system.teamcity.build.checkoutDir%\src\github.com\mitchellh\terraform" 

echo "Update resources" 
go get ./... 

echo "Run static code analysis" 
go tool vet -asmdecl -atomic -bool -buildtags -copylocks -methods -nilfunc -printf -rangeloops -shift -structtags -unsafeptr . 

echo "Build" 
cd scripts 
sh build.sh 

echo "Run unit tests" 
go test -timeout=30s -parallel=4 

echo "Run code coverage" 
go test -coverprofile=coverage.out 
go tool cover -html=coverage.out 
rm coverage.out 
+0

谢谢!你如何将覆盖率数据发送到TeamCity? –

+0

通过TeamCity,还可以在代理端无需额外安装的情况下构建Go应用程序。你可以指定构建步骤应该在合适的Docker容器中运行(例如,golang:1.9-alpine),运行测试并交叉编译二进制文件。要获得覆盖率数据,只需指定应该在构建配置的常规设置中发布的工件/文件即可。 –