21 comments

  1. Thanks a lot for this post Peter! It was the missing piece in our TFS build workflow.

    Do you know what kind of permissions the user needs to have to push those tasks? Only our TFS administrator is allowed and we’d like to share the rights without giving administration permissions. We have this error message:
    “Access denied. {userLogin} needs Manage permissions to perform the action. For more information, contact the Team Foundation Server administrator.”

    jdebarochez Beantwoorden

  2. You’re quite welcome, glad it helped. You have to be in the ‘agent pool administrators’ group, or TF admin to be able to upload tasks.

    Peter Toonen Beantwoorden

  3. I love this article! This is exactly what I needed.

    Couple of questions.

    1. Does every TFS 2015 server have the “_apis/distributedtask/tasks/”, as used in your upload powershell script? I try to hit http://mytfsserver/_apis/distributedtask/tasks with a web browser, and I get nothing. I will check IIS for that folder, but I wonder if every on-premise TFS 2015 server should have this?

    2. What do you think about using (zipping up) the build tasks made by Microsoft for VSO, instead of creating my own like your article has. (https://github.com/Microsoft/vso-agent-tasks/tree/master/Tasks/NugetPackager and https://github.com/Microsoft/vso-agent-tasks/tree/master/Tasks/NugetPublisher).

    Thanks for this well written and detailed article!

    Steve K.

    Steve Kennedy Beantwoorden

    • Hi Steve,

      To answer your questions:

      1) Yes, every TFS 2015 server should have those files, mind you that they’re under the /tfs virtual application/directory. So it would be something like http://yourtfsserver:8080/tfs/_apis/distributedtask/tasks

      2) At the time I wrote this article those tasks were not yet available and I used NuGet packaging as an example, I would of course recommend to use the Microsoft supplied tasks. These two tasks will be in TFS from update 1 on (install and play with the RC if you haven’t yet).

      3) You should have that folder, but as I said under 2, it will be under the /tfs virtual directory.

      On another note, since writing this article, a new utility has come into play: https://github.com/Microsoft/tfs-cli You can use this utility to easily upload tasks to your server.

      Thanks,

      Peter

      Peter Toonen Beantwoorden

      • Thank you so much for your answers! I really appreciate it. With your help, I finally was able to get everything working. Thanks again!

        Steve Kennedy Beantwoorden

  4. Eek.

    3. If I don’t have the “_apis” folder on my TFS server, is there another way to upload the task to the server? Meaning, are these tasks stored in the local file system somewhere on my TFS server?

    Steve Kennedy Beantwoorden

  5. A very good article, worked perfect to me. Just one question.
    If I like to import a .net Assembly in powershell, where can I place this exclusive assemblies? Or isn’t that an option?

    Thanks,
    Ralf

    Ralf Beantwoorden

    • Thanks! If it’s a non-default assemblies, you have several options:

      1) Install it onto every build server (using a SDK for example) you will use. This may work well if you have control over all build servers, but might not be your best solution.
      2) Place the assembly in some sort of artifact repository, where your task will download it from whilst running and then discard it after the build.
      3) Include it into your task. Take a look at the SonarQube pre-build task for an example:
      https://github.com/Microsoft/vso-agent-tasks/tree/master/Tasks/SonarQubePreBuild/MSBuild.SonarQube.Runner-1.0.1

      My personal preference would be 2. That keeps the task light-weight and allows you to update the assemblies without updating the task – providing the assembly’s public API doesn’t change of course.

      Peter

      Peter Toonen Beantwoorden

  6. I am using the TFS 2015 with update 1 ISO to install on a Windows 2012 R2 server with SQL Server 2014. When I launch the install process and select “Full Server”, the “Build” item in the left hand list, which is supposed to appear under the “Application Tier” item, is missing.

    What is happening ?

    Joshua Beantwoorden

  7. Thank you a lot for a knowledge sharing. Your upload script works perfectly
    Could you please advise how to delete created tasks using api request?

    Yegor Beantwoorden

    • Thanks Yegor,

      you can use the following powershell script to uninstall.

      param(
      [Parameter(Mandatory=$true)][string]$TaskPath,
      [Parameter(Mandatory=$true)][string]$TfsUrl,
      [PSCredential]$Credential = (Get-Credential)
      )

      # Gather the necessary information
      $taskDefinition = (Get-Content $taskPathtask.json) -join "`n" | ConvertFrom-Json
      $headers = @{ "Accept" = "application/json; api-version=2.0-preview"; "X-TFS-FedAuthRedirect" = "Suppress" }
      $url = "$TfsUrl/_apis/distributedTask/tasks/$($taskDefinition.id)"

      # Perform the actual request
      Invoke-RestMethod -Uri $url -Credential $credential -Headers $headers -Method Delete

      The parameter ‘TaskPath’ refers to the directory which contains the unzipped task definition.

      – Peter

      Peter Toonen Beantwoorden

  8. Great post. Created a custom task, it is showing in the database but not visible in the builds. what could be the wrong?

    4SB Beantwoorden

    • First thing that pops to mind is that the task category is incorrect (non-existing). If that’s the case, just re-upload.

      – Peter

      Peter Toonen Beantwoorden

  9. It shows up now.. not sure how and why.

    4SB Beantwoorden

  10. […] P.S. ????????? ?????????? ? ???????? ??????????? build-task ? ???????? ?? ? TFS ????? ????? ?? ??????: https://blogs.infosupport.com/custom-build-tasks-in-tfs-2015/ […]

    ????????? ??????? ?????? ? email-??????????? ?? TFS 2015 (scripted builds) | ???? ???????? Rubius Beantwoorden

  11. […] followed closely the design guidance found here, here and here, but I keep getting this PowerShell […]

    TFS 2015.3 custom build step not sending variables to the script | Codeba Beantwoorden

  12. Thanks
    I cant see how the task is “published” into the TFS server ?
    What am I missing or cant see ?

    regards

    Greg Roberts Beantwoorden

  13. hi my custom task is not picking any agent

    Sandeep Beantwoorden

  14. Hi I am getting this error:
    VSTS task module not found at expected location: C:TfsDataAgentsAgent-customtasktasksSandeepTask.1.0ps_modulesVstsTaskSdkVstsTaskSdk.psd1

    Sandeep Beantwoorden

  15. please help me on creating new category.

    Sandeep Beantwoorden