tcunit / TcUnit-Runner

Program that makes it possible to automate runs of TcUnit unit tests
Other
34 stars 17 forks source link

Running TcUnit-Runner on an Azure Virtual Machine through Azure Pipelines #29

Closed vegarosthus closed 2 years ago

vegarosthus commented 2 years ago

Hi all,

I want to run TcUnit-Runner on a Azure-hosted VM. Following the example under Azure Pipelines on the TcUnit-Runner User Manual I registered the VM as a self-hosted agent and installed all prerequisites on it, including TwinCAT 3, Git and TcUnit/TcUnit-Runner. This is my azure-pipelines.yml file

# Demo CI workflow with TcUnit-Runner
name: TcUnit-Runner  

trigger:
- simplified-decoupled-dependency
pr:
- simplified-decoupled-dependency

pool: 'AC4Build'    # self-hosted agent  

steps: 

- checkout: self
  displayName: Checkout repository  

- task: CmdLine@2
  displayName: Run PLC unit-tests with TcUnit-Runner 
  condition: succeeded()
  inputs:
    failOnStderr: true
    # Start TcUnit-Runner with a timeout of 5 min
    script: '"C:\Program Files (x86)\TcUnit-Runner\LaunchTcUnit.bat" -U 5'

- task: PublishTestResults@2
  displayName: Publish TcUnit results
  condition: or(succeeded(),failed())     
  inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '**/TcUnit_xUnit_results.xml'

Now, testing my setup by changing my TC project on my developer machine, and pushing it to the Azure repo, I can see the pipeline job starting in Azure DevOps, but the job fails with the following console output

Starting: Run PLC unit-tests with TcUnit-Runner
==============================================================================
Task         : Command line
Description  : Run a command line script using Bash on Linux and macOS and cmd.exe on Windows
Version      : 2.182.0
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/command-line
==============================================================================
Generating script.
Script contents:
"C:\Program Files (x86)\TcUnit-Runner\LaunchTcUnit.bat" -U 5
========================== Starting Command Output ===========================
"C:\windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "C:\agent\_work\_temp\f6f23cbc-b040-41b0-a738-8f209b523d44.cmd""
##[error]Systemet finner ikke angitt bane.
##[error]Cmd.exe exited with code '1'.
Finishing: Run PLC unit-tests with TcUnit-Runner

Sorry for the Norwegian language, but the first error basically translates to "The system cannot find the given path".

Now I am stuck, partly because I am confused as to what the script is trying to do at this point. What file doesn't it find? Any help would be much appreciated.

densogiaichned commented 2 years ago

Hello,

where is TcUnit-Runner installed on your runner, i.e. C:\Program Files (x86)\TcUnit-Runner?

vegarosthus commented 2 years ago

Hi, Thanks for the quick reply. I found my error 45 mins after posting my issue. The error was that the .yml-file only referred to the agent pool, and not to the specific agent. Thus, it searched for the LaunchTcUnit.bat-file in the wrong VM. It worked like a charm once I changed the "pool" section in my .yml-file from

pool: 'AC4Build' # self-hosted agent

to

pool: 
    name: AC4Build   
    demands:
    - agent.name -equals TcUnitTests # self-hosted agent 
sagatowski commented 2 years ago

@vegarosthus good job! I'll close this issue.