构建 docker 个图像,包括带有 bitbucket 管道的版本

Build docker image including version with bitbucket pipelines

我是 Bitbucket Pipelines 的新手,我遇到了一个问题。我正在创建一个管道,以将我们的 Spring Boot 应用程序(在 Kubernetes 集群中运行)的新版本部署到我们的测试环境。我遇到的问题是我们 docker 构建的版本控制。我们的版本控制设置如下:

alpha_0.1
alpha_0.2
beta_1.0
gamma_1.0
gamma_1.1

因此每个次要 update/bugfix 都会将内部版本号增加 0.1,并且主要更新会将版本增加 1.0 + 每个主要更新都会获得一个新的版本名称。

目前我有下一个设置:

image: java:8

options:
  docker: true

branches:
  master:
    - step:
        caches:
          - gradle
        script:
          - ./gradlew test
          - ./gradlew build
          - docker build -t <application_name>/<version_name>_<version_number>

在 bitbucket 管道中包含 version_nameversion_number 的最佳方法是什么?到目前为止,我们运行了 ruby 允许用户输入版本编号的脚本,但 bitbucket 管道不是交互式的。

假设 alpha_0.1 等是标签,并且如果标记了提交则管道运行,您可以像这样获取当前提交的标签:

TAG=$(git tag --contains $BITBUCKET_COMMIT)

然后您可以使用您喜欢的语言或命令行工具从您获得的标签创建 <version_name><version_number>export 标记作为 shell 变量可能有意义,以便能够在脚本中使用它。

这是我拥有的 shippable.yml 文件之一,请随意将其改编为 Atlassianpipelines.ymlGradle:

language: java
jdk:
  - oraclejdk8
branches:
  only:
    - master
...
build:
  ci:
    # Generates build number
    - BUILD_NUMBER=`git log --oneline | wc -l`
    - echo "Build number':' ${BUILD_NUMBER}"
    # Sets version
    - mvn versions:set -DnewVersion=1.0.${BUILD_NUMBER}
    # Builds and pushes to Docker Hub
    - mvn package
    - docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWD} --email ${DOCKERHUB_EMAIL} https://index.docker.io/v1/
    - mvn -X docker:build -Dpush.image=true

我的项目版本(在 pom.xml 中)设置为 0-SNAPSHOPT

这也使用 SpotifyMaven 插件来构建 Docker 图像而不是 docker build -t ...