9

目前我的团队正在使用 Jenkins 来管理我们的 CI/CD 工作流程。由于我们的基础设施完全在 AWS 中,我一直在考虑迁移到 AWS CodePipeline/CodeBuild 来管理它。

在当前状态下,我们正在对我们的工件进行版本控制,<major>.<minor>.<patch>-<jenkins build #>1.1.1-987. 但是,CodeBuild 似乎没有任何内部版本号的概念。由于工件存储在 s3 中,<bucket>/<version>/<artifact>我真的不想失去这种版本控制方法。

CodeBuild 确实提供了一些环境变量,我可以在这里看到:http: //docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref.html#build-env-ref-env-vars

但是从可用的内容来看,尝试使用构建 ID 或其他任何东西似乎很愚蠢。

CodeBuild 是否有任何现成的东西可以支持增量构建#?或者是否有 AWS 推荐的语义版本控制方法?搜索此主题返回的结果非常低

非常感谢任何帮助或建议

4

3 回答 3

4

使用日期的建议实际上并不适用于我们的用例。我们最终在 SSM 中创建了一个基本版本,并创建了一个在 buildspec 中运行的脚本,该脚本将版本抓取、递增和更新回 SSM。这很容易做到:

  • 在 SSM 中创建一个 String/SecureString 作为 [NAME]。例如,让我们说“BUILD_VERSION”。该值应在 [MAJOR.MINOR.PATCH] 或 [MAJOR.PATCH] 中。
  • 创建一个外壳脚本。以下应作为基本模板,您必须根据需要对其进行修改:
#!/bin/bash
if [ "$1" = 'next' ]; then
    version=$(aws ssm get-parameter --name "BUILD_VERSION" --region 'us-east-1' --with-decryption | sed -n -e 's/.*Value\"[^\"]*//p' | sed -n -e 's/[\"\,]//gp')
    majorminor=$(printf $version | grep -o ^[0-9]*\\.[0-9]*\. | tr -d '\n')
    patch=$(printf $version | grep -o [0-9]*$ | tr -d '\n')
    patch=$(($patch+1))
    silent=$(aws ssm put-parameter --name "BUILD_VERSION" --value "$majorminor$patch" --type "SecureString" --overwrite)
    echo "$majorminor$patch"
fi
  • 从 buildspec 中调用版本控制脚本并根据需要使用输出。
于 2019-08-13T20:37:52.593 回答
1

我发布这个答案可能已经晚了,但是由于 AWS 尚未发布此功能,这可能会帮助一些类似情况的人。

我们使用 Jenkins 内部版本号进行版本控制,并且正在迁移到codebuild/code-pipeline. codebuild-id对我们不起作用,因为它非常随机。因此,我们在文件 interim中创建自己的内部版本号。buildspecBUILD_NUMBER=$(date +%y%m%d%H%M%S)

这样至少我们能够查看 id 并知道它何时部署并在编号方面具有一定的一致性。因此,在您的情况下,它将1.1.1-181120193918代替1.1.1-987.

希望这可以帮助。

于 2018-11-20T20:35:13.323 回答
-1

CodeBuild 支持语义版本控制

在 CodeBuild 项目的配置中,您需要启用语义版本控制(或overrideArtifactName通过 CLI/API 设置)。

然后在您的buildspec.yml文件中指定name使用 Shell 命令语言:

artifacts:
  files:
    - '**/*'
  name: myname-$(date +%Y-%m-%d) 

警告:我已经尝试了很多这种变化,但无法让它发挥作用。

于 2021-01-12T02:16:35.933 回答