Golang初学者物语(第4章:本地仓库中的共通模块管理)

首先

Golang系列第四篇。
前面三篇在这里。

    • Golangはじめて物語(APIGateway+Lambdaといっしょ編)

 

    • Golangはじめて物語(第2話: Gin+ECS+Fargateといっしょ編)

 

    Golangはじめて物語(第3話: CodePipeline+SAM+LambdaでCI/CD編)

好吧,一般来说,使用 import 命令从 GitHub 上获取 Golang 的公共库是常见的做法,但是在开发过程中,肯定会遇到“必须要创建共享模块,但是又不能在 GitHub 上存放源代码,因为公司规定不允许”的困扰。可能会有很多人想吐槽,但这个问题确实会出现。

如果用Java的话,可以使用CodeArtifact等工具将本地存储库委托给AWS,但Golang不支持这一点。事实上,也没有必要支持。如果使用Golang,只需要直接使用CodeCommit就可以了。

共通模块方面

在CodeCommit上创建以下目录结构的模块。
这次我们来创建一个简单的自定义日志记录器,只需将结果输出到标准输出。

.
├── mylogger
│   ├── go.mod
│   └── mylogger.go
└── README.md
package mylogger

import (
    "log"
)

func OutputLog(str string) {
    log.Printf(str)
}
module git-codecommit.[リージョン名].amazonaws.com/v1/repos/[リポジトリ名].git/mylogger

go 1.13

require (
)

重点是在module的仓库名称后面加上.git。
如果忘记这一点,它将无法正常运行。

处理呼叫的一方

在调用的一方面,可以按照以下方式进行导入。

import (
    "git-codecommit.[リージョン名].amazonaws.com/v1/repos/[リポジトリ名].git/mylogger"
)

如果使用 go.mod 文件,则在编译时

require (
    git-codecommit.[リージョン名].amazonaws.com/v1/repos/[リポジトリ名].git/mylogger v0.0.0-20201011112107-e103759ebd6b
)

请以中文为母语将以下内容改写,只需要一种表达方式:
帮忙填写一个很不错的版本。
※当然,根据需要指定版本。

在建立时

$ export GOPRIVATE=git-codecommit.[リージョン名].amazonaws.com,direct

我們這麼做吧。如果不這樣做的話,就無法正確地訪問私有存儲庫,導致構建失敗。

如果要将CodePipeline(CodeBuild)集成到项目中

这也基本一样,没有什么区别。

通过Buildspec的环境变量设置私有仓库的配置。

env:
  variables:
    GOPRIVATE: git-codecommit.[リージョン名].amazonaws.com,direct

另外,在CodeBuild中,我们可以使用IAM角色对CodeCommit进行验证。因此,在预构建阶段,请设置以下配置。

  pre_build:
    commands:
      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true

如果使用CodePipeline,获取源代码是由CodePipeline自行操作并将其存储到S3存储桶中,然后与CodeBuild协同工作。因此,通常情况下不需要访问CodeCommit的权限。但是,如果使用这种方法,则CodeBuild将直接访问CodeCommit,因此需要具有Read访问权限。请确保为CodeBuild的服务角色授予与AWSCodeCommitReadOnly等同的权限(虽然可以进一步缩小权限,但是想得太多了,有点力不从心……)

谈到这一点,如果要处理CodeBuild的本地缓存,对于Go语言来说,默认情况下应该设置以下路径,这样会很好。

cache:
  paths:
    - '/go/pkg/mod/**/*'

现在,我们可以自由地制作共享库,没有任何限制了!

广告
将在 10 秒后关闭
bannerAds