【问题标题】:Azure devops - Pass git commit SHA to dockerfile stepAzure devops - 将 git commit SHA 传递给 dockerfile 步骤
【发布时间】:2020-04-14 21:58:01
【问题描述】:

这是我的 Dockerfile:

FROM node:alpine as builder
ENV GIT_SHA  ${WhatToSetHere} <--------------------------- Would like to set gitSHA here
RUN printenv
RUN mkdir -p /app
WORKDIR /app

COPY package.json ./
RUN yarn install

COPY . .
COPY public ./public

# RUN ls -la /src/

RUN yarn run build


FROM node:alpine
RUN mkdir -p /app
WORKDIR /app
ENV NODE_ENV production

COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/build ./build

EXPOSE 3000

CMD [ "yarn", "start:prod" ]

这是我的天蓝色管道:

trigger:
  - master

pool:
  vmImage: "ubuntu-latest"

variables:
  buildConfiguration: "Release"
steps:
  - task: GitVersion@5
  - script: |
      echo '##vso[task.setvariable variable=buildVersion]$(GitVersion.FullSemVer")'
  - script: |
      echo //registry.npmjs.org/:_authToken=$(NPM_TOKEN) > .npmrc
    displayName: 'npm Authentication'
  - task: Docker@2
    inputs:
      containerRegistry: acrXXX
      repository: "XXX-client"
      command: "buildAndPush"
      Dockerfile: "**/Dockerfile"

  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: "$(Build.SourcesDirectory)/deploy/XXX-client"
      ArtifactName: "charts"
      publishLocation: "Container"

如何从 jenkins 构建中获取提交 SHA 并将其设置为我的 dockerfile 中的 env 变量?您是否有任何文档可以指出构建中包含哪些值?

【问题讨论】:

  • 我能否了解更多关于从 jenkins 构建中获取提交 SHA 的信息?提交在 Jenkins 中推送,然后在 azure devops 中触发 CI?

标签: docker azure-devops dockerfile


【解决方案1】:

在您的 Dockerfile 中,在 FROM 步骤之后添加以下行:

ARG GIT_SHA
ENV build_ref=$GIT_SHA

对于您的 YAML 管道,您需要拆分构建和推送步骤。我们将在构建步骤中使用predefined variableBuild.SourceVersion,如下所示:

- task: Docker@2
  displayName: build
  inputs:
    command: build
    arguments: '--build-arg GIT_SHA=$(Build.SourceVersion)'

这会将运行的管道的 Git 参考 SHA 的值传递到您的 Dockerfile。您可以在后面的步骤中将其称为${build_ref},例如将其打印到日志中,您可以在 Dockerfile 中添加如下步骤:

RUN echo ${build_ref}

进一步阅读:Dockerfile reference: ARG,您可以更改命名约定,但请确保在 Dockerfile 和 YAML 管道中保持一致。

【讨论】:

    【解决方案2】:

    请检查Build.SourceVersion变量。

    触发 repo 的最新版本控制更改是 包含在此版本中。

    Git: The commit ID.
    TFVC: the changeset.
    

    Link 到文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 2022-06-29
      • 2014-09-25
      • 2017-02-22
      • 2021-08-12
      • 1970-01-01
      相关资源
      最近更新 更多