azurefile-uploadazure-devopsazure-pipelinescloud-storage

Upload Azure Pipelines File to Onedrive or similar


In my pipeline on my Azure Devops project, I'm building my project and then zipping up the output into a file. However, at the moment, I have no way to access this archive. I would like to upload it to a cloud storage service such as OneDrive, Google Drive, Dropbox or similar. But I haven't been able to find a simple way of doing this yet. Can anyone help me?


Solution

  • Several approaches can be used. If only "access" to the zip is needed after a build has completed the Publish Build Artifact task is actually what you want.

    This will publish specified files as artifacts within the completed pipeline job. Where to find the artifacts in the UI
    From within the detail view of the Build-Job you can then download and use whatever the pipeline produced.

    It can be configured as a build step, like this:

    - task: PublishBuildArtifacts@1
      inputs:
        pathToPublish: '$(Build.ArtifactStagingDirectory)' 
        artifactName: 'myCoolZip-$(Date:yyyyMMdd)' 
    

    Where the pathToPublish is the path to the artifact you want to publish. Usually the compiled resources are copied to the ArtifactStagingDirectory and then the contents of that directory is published. This makes it easier if there are many steps that all contribute to the final artifact.


    There are several community supported tasks that allow files to be uploaded to cloud-services:

    However since Azure tends to update regularly these might not be so future-proof depending on the maintainer.


    If you still want to upload your zip to the cloud where it is more accessible the easiest way would be to use the FtpUpload task.

    - task: FtpUpload@2
      inputs:
        credentialsOption: inputs
        serverUrl: ftp://someFtpServer.com
        username: yourUsername
        password: yourPassword
        rootDirectory: '$(Build.ArtifactStagingDirectory)' 
        remoteDirectory: '/upload/$(Build.BuildId)/' 
        # Depending on your certificate you might need to set this to true
        # trustSSL: true
    

    However don't place passwords and usernames directly into your YAML, use secret variables instead.


    It is also possible to upload artifacts to Azure Storage by using the AzureFileCopy task


    If you want more control add a script to your repository that does the uploading (example script) and execute that as a Command Line task.