如何在Bitbucket-Pipelines中保存构件

17

我对竹子不熟悉。我的目标是收集在构建过程中创建的所有.dacpac文件。

Translated text:

我是新手,想要做的是在构建过程中收集所有创建的.dacpac文件。

image: microsoft/dotnet:latest
pipelines:
 default: 
 - step: 
 script: # Modify the commands below to build your repository. 
 - cd BackgroundCode 
 - dotnet restore 
 - dotnet run 
 artifacts: 
 - '../**/*.dacpac'

目录结构应该是

'agent/build/Projects/[项目名称]/[项目名称].dacpac'。

管道的输出显示

成功生成了zip归档文件 /opt/atlassian/pipelines/agent/build/Projects/[项目名称]/[项目名称].dacpac

这意味着在构建过程中确实生成了文件。我做错了什么吗?如果没有,我在哪里可以找到这些构件。

3个回答

10
在 bitbucket-pipelines.yml 中,每当您进入不同的“step:”时,它将重置几乎所有内容,并独立于先前的步骤运行。这并不总是显而易见的,可能会令人困惑。
在上一个步骤中,您使用 cd BackgroundCode 进入了子文件夹。当脚本进入“artifacts:”步骤时,当前工作目录将重置回其原始的 $BITBUCKET_CLONE_DIR。因此,您需要在每个步骤中再次使用 cd BackgroundCode 或使用一个 相对于$BITBUCKET_CLONE_DIR的路径,像这样:
artifacts:
 - BackgroundCode/**/*.dacpac

或者

step2:
 - cd BackgroundCode
 # List the files relative to the 'BackgroundCode' directory
 - find . -iname '*.dacpac'

这将自动保存工件(14天),您可以在顶部的“工件”选项卡中查看。

缓存保留7天,但工件保留14天!我不记得这是否随着时间的推移而改变。我无法编辑答案,因为不允许进行2个字符的编辑:_D - N1ngu
谢谢。我已经更新为14天。(7天是几年前使用的先前值)。 - Mr-IDE

10
很遗憾,根据文档,在流水线运行后所有构件都将被删除:

https://confluence.atlassian.com/bitbucket/using-artifacts-in-steps-935389074.html

“一旦管道完成,无论成功或失败,所有工件都将被删除。”但是您可以将工件部署到Bitbucket下载部分或任何其他位置:

https://confluence.atlassian.com/bitbucket/deploy-build-artifacts-to-bitbucket-downloads-872124574.html

- step:
    name: Archive
    script:
      - curl -X POST --user "${BB_AUTH_STRING}" "https://api.bitbucket.org/2.0/repositories/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}/downloads" --form files=@"something/**"

4
这可能已经发生了很大的变化,但是构件不会被立即删除:它们将保留14天。此外,将文件上传到Bitbucket的推荐方法是使用官方管道https://bitbucket.org/product/features/pipelines/integrations?p=atlassian/bitbucket-upload-file。 - N1ngu

3
我认为一个很好的替代方案是使用之前提到过的Bitbuckets下载部分,但是你可以使用他们的专用工具,而不是使用curl并希望API不会改变和破坏你的流水线。

https://support.atlassian.com/bitbucket-cloud/docs/deploy-build-artifacts-to-bitbucket-downloads/

与curl相比,我认为它更安全、更易于设置和维护。例如,链接的文档显示工具的版本为0.1.2,而最新版本为0.3.2,只需更新该版本号即可保持最新状态,无需进行其他操作。我需要使用应用程序权限密钥来对我的存储库进行写访问,将其设置为管道变量,将我的帐户名称设置为管道变量(链接的文档描述得很好),然后在我的管道yaml文件中添加一个简单的步骤。我能想到的一个缺点是,对于更大的文件,curl可能更好。因此,将其视为另一种做事情的方式,而不是做所有事情的终极方式。

我的示例yaml,您可以使用某个容器来构建您的源代码,如果您已经定义了Makefile构建步骤,则可以重命名输出工件文件并添加构建ID后缀(这样我将在下载部分拥有多个输出文件,而不仅仅是最新的)。然后,通过在构建步骤中添加工件,我将确保下一步可以访问这些工件:

artifacts:

  • build/output-*.zip

然后,最后一步部署将可以访问zip文件并为您上传它,他们的工具不需要其他任何东西,只需设置3个变量:用户名、应用密钥和要上传的文件。

为了完成示例管道yaml:

image: <SOMETHING>

pipelines:
  default:
    - step:
        name: 'Build'
        script:
          - make all
          - mv build/output.zip build/output-$BITBUCKET_BUILD_NUMBER.zip
        artifacts:
          - build/output-*.zip

    - step:
        name: 'Deploy the output into the download section'
        script:
          - pipe: atlassian/bitbucket-upload-file:0.3.2
            variables:
              BITBUCKET_USERNAME: $BITBUCKET_USERNAME
              BITBUCKET_APP_PASSWORD: $BITBUCKET_APP_PASSWORD
              FILENAME: "build/output-$BITBUCKET_BUILD_NUMBER.zip"

当我上传单独的文件时,我必须再次列出“管道”部分以便于新文件。 - Anton Krug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接