Golang项目如何集成 circleci

作者: 已不再更新_转移到qiita | 来源:发表于2019-08-22 19:37 被阅读43次

    转自 http://wjp2013.github.io/go/golangci

    想写出好项目,肯定要在项目的初期就把架子搭好。所以我们的目标就是:如何在不花钱的前提下,给 Github Private 仓库的项目集成 CI, Code Review 等功能。

    免费 APP

    先去 Github Marketplace 中选购一番。

    Dependabot

    Every day, Dependabot checks your dependency files for outdated requirements and opens individual pull requests for any it finds. You review the PRs, merge them, and get to work on the latest, most secure releases.

    监控项目的 go.mod, go.sum 中是否存在不安全的 package,并自动 PR 帮忙修正。Github 自己也在用的东西,免费当然要加上。

    从 Github 的 Marketplace 找到这个服务,一路点下去,各种授权就行。选择要监控的项目和语言。我选择了 Go ModulesDocker

    进入到 dependabot 的站点上可以进行一些更详细的设置,比如更改时间为每周检查一次。

    细节可以看这个讨论。既可以装逼,又能直观的显示仓库目前的健康状态。

    [![Dependabot](https://api.dependabot.com/badges/status?host=github&repo=<YourName>/<Repo>&identifier=<Number>)](https://app.dependabot.com/accounts/YourName/repos/<Number>)
    

    注意上面例子中的 <XXX> 需要替换成你自己项目的,关于如何找到 Number,可以参考 How does one find out one's own Repo ID?

    CodeFactor

    CodeFactor instantly performs Code Review with every GitHub Commit or PR.

    它集成了 Yamllint, Hadolint, Vet, stylelint, Duplication checker 几项功能,并且免费版支持一个 Private 仓库。

    安装方法和 Dependabot 一样,从 Github Marketplace 中一路点下去,最后去 codefactor 的网站进行一些设置。

    添加徽章

    进入 CodeFactor 网站,对应项目的右上角提供各种格式的徽章代码。

    NewRelic

    免费版的请求分析,数据事务,机器运行状况,错误报警等足够用了。

    注册一个免费帐号,根据官网 Get Start 选 Go 一路走下去,拿到 LicenseKey。

    安装 go get -u github.com/newrelic/go-agent,然后参考官方的例子添加如下代码:

    // Middleware creates a Gin middleware that instruments requests by New Relic.
    cfg := newrelic.NewConfig("Gin App", conf.NewRelicLicense)
    // You can print log by: cfg.Logger = newrelic.NewDebugLogger(os.Stdout)
    app, err := newrelic.NewApplication(cfg)
    if err != nil {
      log.Printf("failed to make new_relic app: %v", err)
    } else {
      router.Use(nrgin.Middleware(app))
    }
    

    第一次用 Go + Gin 安装 NewRelic 的探针,参考了一些文章:

    CircleCI

    基础配置

    想找个免费好看的且跟 Golang 集成比较完美的 CI 不容易啊。在 Marketplace 中发现 CircleCI 的免费套餐支持一个 Private 仓库,每个月有 1000 分钟的时间。

    一路点点点,之后在项目的根目录下新建 .circleci/config.yml 并根据 官方 Golang 例子 进行修改:

    # Golang CircleCI 2.0 configuration file
    version: 2
    jobs:
      build:
        working_directory: /go/src/github.com/User/Repo
    
        docker:
          - image: circleci/golang:1.12
          - image: circleci/mysql:5.7
            environment:
              MYSQL_ROOT_PASSWORD: password
              MYSQL_DATABASE: test_db
    
        steps:
          - checkout
    
          - run:
              name: Wait for DB
              command: dockerize -wait tcp://127.0.0.1:3306 -timeout 1m
    
          - run: go get -v -t -d ./...
    
          - run:
              name: Unit test
              command: go test -v ./...
    

    在配置 MySQL 时遇到了一些问题,在连接数据库时候报密码错误。

    然后就是参考官方例子 MySQL 配置 Database Configuration Examples 结果并不能正常工作。我查看了下 CircleCI 可用的 MySQL 镜像 换了几个也不行。后来看到了 circleci-mysql-testing-database 这个例子中用的 MySQL 版本是 5.7,我也替换成同样的版本,就可以正常连上数据库了。顺便从这里学会了如何 import 测试数据库。

    因为只有免费的 1000 分钟,为了节省时间,从 官方例子 学会了如何增加缓存。

    CircleCI + dredd

    不了解 dredd 的先看一下 Testing your API with Dredd,我是打算用 dredd 来代替 Rails 世界的集成测试,只测试 API 的返回值,这样能少写点测试代码。

    dredd 需要 node 和 npm,本来是想用 npm install dredd -g 全局安装,先按照 Sample CircleCI Configuration with Prisma 的方案,手动安装 node 提示权限有问题。

    后来找到 circleci-golang-node-image 这个镜像同时支持 golang 和 node,就是版本有点老。去 docker hub 上面找了个更新的 https://hub.docker.com/r/sebastianoo/circleci-golang-node 来用。

    但全局安装仍然有问题,后来只能通过添加 package.json 的方案,不用全局安装的方式。

    - run:
        name: npm install dredd
        command: npm install dredd@11.2.1
    

    GolangCI-Lint

    可以手动安装 Install script fails on CircleCI。但我没用这个方案,参考了下面这篇,直接 go get 安装的。

    补充

    1. 参考 CircleCI2.0でGoをCIする 添加一些配置,可以测试 server 是否运行起来。
    2. 参考 Publishing a Go package to GitHub with CircleCI 2.0 区分多套环境。
    - run:
        name: Validate service is working
        command: curl --retry 10 --retry-delay 1 --retry-connrefused http://localhost:8080/contacts/test
    

    参考

    CircleCIでmysql8を使用する設定
    https://shields.io/
    https://www.codefactor.io/features
    https://golangci.com/product
    Awesome Go Linters

    需要手动安装 CI

    Drone
    Concourse

    相关文章

      网友评论

        本文标题:Golang项目如何集成 circleci

        本文链接:https://www.haomeiwen.com/subject/zftfsctx.html