jenkins/raspberrypi/raspi.yaml (379 lines of code) (raw):
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
schedules:
- cron: "0 0 * * *"
displayName: Daily midnight build
branches:
include:
- main
variables:
ClientLibrary.Repo: $(Build.Repository.Uri)
ClientLibrary.Commit: $(Build.SourceBranch)
ClientLibrary.FrameworkRoot: $(Build.SourcesDirectory)
jobs:
- job: Cross_Compile
pool:
vmImage: ubuntu-20.04
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.x'
architecture: 'x64'
- script: |
python3 -m pip install -r $(ClientLibrary.FrameworkRoot)/jenkins/raspberrypi/pyscripts/requirements.txt
displayName: "pip install requirements.txt"
condition: succeeded()
- powershell: |
$NormalizedRepo=$env:Repo
if ($NormalizedRepo -like 'https://github.com/*') {
$NormalizedRepo=$NormalizedRepo.Substring('https://github.com/'.length)
}
$IsPr = "no"
$CommitToPass = $env:Commit
if ("$env:SYSTEM_PULLREQUEST_TARGETBRANCH" -ne "") {
$CommitToPass = $env:SYSTEM_PULLREQUEST_TARGETBRANCH
$IsPr = "yes"
}
Write-Host "##vso[task.setvariable variable=normalizedRepo]${NormalizedRepo}"
Write-Host "##vso[task.setvariable variable=IsPr]${IsPr}"
Write-Host "##vso[task.setvariable variable=CommitToPass]${CommitToPass}"
Write-Host "normalizedRepo=${NormalizedRepo}"
Write-Host "IsPr=${IsPr}"
Write-Host "CommitToPass=${CommitToPass}"
Write-Host "$env:SYSTEM_PULLREQUEST_TARGETBRANCH"
displayName: Custom task execution logic
env:
Commit: $(ClientLibrary.Commit)
Repo: $(ClientLibrary.Repo)
ignoreLASTEXITCODE: false
errorActionPreference: Stop
failOnStderr: true
- script: |
cd $(Build.SourcesDirectory) &&
echo "saving patch from ${CommitToPass} to HEAD" &&
git diff -p origin/${CommitToPass} --binary > ${AGENT_BUILDDIRECTORY}/patchfile &&
mkdir -p $(Build.ArtifactStagingDirectory)/raspi-c &&
cp ${AGENT_BUILDDIRECTORY}/patchfile $(Build.ArtifactStagingDirectory)/raspi-c &&
mv ${AGENT_BUILDDIRECTORY}/patchfile ${CLIENTLIBRARY_FRAMEWORKROOT}/jenkins/raspberrypi
displayName: "pack local language repo"
condition: and(
succeeded(),
eq(variables['IsPr'],'yes'))
env:
CommitToPass: $(CommitToPass)
- script: |
python3 $(ClientLibrary.FrameworkRoot)/jenkins/raspberrypi/pyscripts/build_docker_image.py --repo ${NormalizedRepo} --commit $(CommitToPass)
displayName: "build raspi-c docker image"
condition: succeeded()
env:
AZURECR_REPO_ADDRESS: $(IOTHUB-E2E-REPO-ADDRESS)
AZURECR_REPO_USER: $(IOTHUB-E2E-REPO-USER)
AZURECR_REPO_PASSWORD: $(IOTHUB-E2E-REPO-PASSWORD)
NormalizedRepo: $(NormalizedRepo)
CommitToPass: $(CommitToPass)
- task: ExtractFiles@1
inputs:
archiveFilePatterns: '*.tar'
destinationFolder: '$(Build.SourcesDirectory)/source_artifacts'
- script: |
cd $(Build.SourcesDirectory)/source_artifacts/
ls -al
displayName: "list Build.SourcesDirectory"
- script: |
find $(Build.SourcesDirectory)/source_artifacts/ -type f | grep -i e2e_exe$ | xargs -i cp {} $(Build.ArtifactStagingDirectory)
displayName: "Copy Files Manually"
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifacts: drop'
inputs:
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
artifactName: 'drop'
publishLocation: 'Container'
condition: succeeded()
- job: 'Run_AMQP_DT_E2E_Test'
dependsOn: Cross_Compile
#disable raspberrypi jobs until raspberrypi image is rebuilt
#condition: succeeded()
condition: 'false'
pool:
name: devicelab-02
steps:
- task: DownloadBuildArtifacts@0
displayName: 'Download Build Artifacts'
inputs:
artifactName: drop
itemPattern: 'drop/**/*e2e_exe'
- script: |
cd $(Build.SourcesDirectory)/testtools/UART_interface/
ls
. rpi_e2e_env_setup.sh
python3 serial_connect.py -i setup.txt -o output.txt -b 115200 -p $(RASPI_PORT) -d rpi
rm setup.txt
displayName: 'Setup Environment Variables'
env:
RASPI_USER: $(RASPI_USER)
RASPI_PWD: $(RASPI_PWD)
RASPI_PORT: $(RASPI_PORT)
IOTHUB_CONNECTION_STRING: $(IOTHUB-CONNECTION-STRING)
IOTHUB_EVENTHUB_CONNECTION_STRING: $(IOTHUB-EVENTHUB-CONNECTION-STRING)
IOTHUB_E2E_X509_CERT_BASE64: $(IOTHUB-E2E-X509-CERT-BASE64)
IOTHUB_E2E_X509_PRIVATE_KEY_BASE64: $(IOTHUB-E2E-X509-PRIVATE-KEY-BASE64)
IOTHUB_E2E_X509_THUMBPRINT: $(IOTHUB-E2E-X509-THUMBPRINT)
IOTHUB_POLICY_KEY: $(IOTHUB-POLICY-KEY)
STORAGE_ACCOUNT_CONNECTION_STRING: $(STORAGE-ACCOUNT-CONNECTION-STRING)
IOT_DPS_CONNECTION_STRING: $(IOT-DPS-CONNECTION-STRING)
IOT_DPS_ID_SCOPE: $(IOT-DPS-ID-SCOPE)
IOTHUB_CA_ROOT_CERT: $(IOTHUB-CA-ROOT-CERT)
IOTHUB_CA_ROOT_CERT_KEY: $(IOTHUB-CA-ROOT-CERT-KEY)
IOT_DPS_GLOBAL_ENDPOINT: $(IOT-DPS-GLOBAL-ENDPOINT)
IOTHUB_DEVICE_CONN_STRING_INVALIDCERT: $(IOTHUB-DEVICE-CONN-STRING-INVALIDCERT)
IOTHUB_CONN_STRING_INVALIDCERT: $(IOTHUB-CONN-STRING-INVALIDCERT)
DPS_GLOBALDEVICEENDPOINT_INVALIDCERT: $(DPS-GLOBALDEVICEENDPOINT-INVALIDCERT)
PROVISIONING_CONNECTION_STRING_INVALIDCERT: $(PROVISIONING-CONNECTION-STRING-INVALIDCERT)
- script: |
cd $(Build.ArtifactStagingDirectory)
ls
echo $(NEWTIN) | sudo -S chmod -R 777 drop
echo $(NEWTIN) | sudo -S setcap cap_net_raw,cap_net_admin+ep drop/$RASPI_TEST_FILE
cp drop/$RASPI_TEST_FILE $(Build.SourcesDirectory)/testtools/UART_interface/
cd $(Build.SourcesDirectory)/testtools/UART_interface/
ls
. rpi_input.sh
python3 serial_connect.py -i input.txt -o output.txt -b 115200 -p $(RASPI_PORT) -d rpi -t 620 $(RESET_RASPI) -s
rm input.txt
unset RASPI_TEST_FILE
displayName: 'Execute Test'
env:
RASPI_USER: $(RASPI_USER)
RASPI_PWD: $(RASPI_PWD)
RASPI_PORT: $(RASPI_PORT)
RASPI_TEST_FILE: iothubclient_amqp_dt_e2e_exe
RASPI_SERIAL_TASK: $(RASPI_SERIAL_TASK)
RESET_RASPI: $(RESET_RASPI)
- job: 'Run_MQTT_DT_E2E_Test'
dependsOn: Cross_Compile
#disable raspberrypi jobs until raspberrypi image is rebuilt
#condition: succeeded()
condition: 'false'
pool:
name: devicelab-02
steps:
- task: DownloadBuildArtifacts@0
displayName: 'Download Build Artifacts'
inputs:
artifactName: drop
itemPattern: 'drop/**/*e2e_exe'
- script: |
cd $(Build.SourcesDirectory)/testtools/UART_interface/
ls
. rpi_e2e_env_setup.sh
python3 serial_connect.py -i setup.txt -o output.txt -b 115200 -p $(RASPI_PORT) -d rpi
rm setup.txt
displayName: 'Setup Environment Variables'
env:
RASPI_USER: $(RASPI_USER)
RASPI_PWD: $(RASPI_PWD)
RASPI_PORT: $(RASPI_PORT)
IOTHUB_CONNECTION_STRING: $(IOTHUB-CONNECTION-STRING)
IOTHUB_EVENTHUB_CONNECTION_STRING: $(IOTHUB-EVENTHUB-CONNECTION-STRING)
IOTHUB_E2E_X509_CERT_BASE64: $(IOTHUB-E2E-X509-CERT-BASE64)
IOTHUB_E2E_X509_PRIVATE_KEY_BASE64: $(IOTHUB-E2E-X509-PRIVATE-KEY-BASE64)
IOTHUB_E2E_X509_THUMBPRINT: $(IOTHUB-E2E-X509-THUMBPRINT)
IOTHUB_POLICY_KEY: $(IOTHUB-POLICY-KEY)
STORAGE_ACCOUNT_CONNECTION_STRING: $(STORAGE-ACCOUNT-CONNECTION-STRING)
IOT_DPS_CONNECTION_STRING: $(IOT-DPS-CONNECTION-STRING)
IOT_DPS_ID_SCOPE: $(IOT-DPS-ID-SCOPE)
IOTHUB_CA_ROOT_CERT: $(IOTHUB-CA-ROOT-CERT)
IOTHUB_CA_ROOT_CERT_KEY: $(IOTHUB-CA-ROOT-CERT-KEY)
IOT_DPS_GLOBAL_ENDPOINT: $(IOT-DPS-GLOBAL-ENDPOINT)
IOTHUB_DEVICE_CONN_STRING_INVALIDCERT: $(IOTHUB-DEVICE-CONN-STRING-INVALIDCERT)
IOTHUB_CONN_STRING_INVALIDCERT: $(IOTHUB-CONN-STRING-INVALIDCERT)
DPS_GLOBALDEVICEENDPOINT_INVALIDCERT: $(DPS-GLOBALDEVICEENDPOINT-INVALIDCERT)
PROVISIONING_CONNECTION_STRING_INVALIDCERT: $(PROVISIONING-CONNECTION-STRING-INVALIDCERT)
- script: |
cd $(Build.ArtifactStagingDirectory)
ls
echo $(NEWTIN) | sudo -S chmod -R 777 drop
echo $(NEWTIN) | sudo -S setcap cap_net_raw,cap_net_admin+ep drop/$RASPI_TEST_FILE
cp drop/$RASPI_TEST_FILE $(Build.SourcesDirectory)/testtools/UART_interface/
cd $(Build.SourcesDirectory)/testtools/UART_interface/
ls
. rpi_input.sh
python3 serial_connect.py -i input.txt -o output.txt -b 115200 -p $(RASPI_PORT) -d rpi -t 620 $(RESET_RASPI)
rm input.txt
unset RASPI_TEST_FILE
displayName: 'Execute Test'
env:
RASPI_USER: $(RASPI_USER)
RASPI_PWD: $(RASPI_PWD)
RASPI_PORT: $(RASPI_PORT)
RASPI_TEST_FILE: iothubclient_mqtt_dt_e2e_exe
RASPI_SERIAL_TASK: $(RASPI_SERIAL_TASK)
RESET_RASPI: $(RESET_RASPI)
- job: 'Run_AMQP_DM_E2E_Test'
dependsOn: Cross_Compile
#disable raspberrypi jobs until raspberrypi image is rebuilt
#condition: succeeded()
condition: 'false'
pool:
name: devicelab-02
steps:
- task: DownloadBuildArtifacts@0
displayName: 'Download Build Artifacts'
inputs:
artifactName: drop
itemPattern: 'drop/**/*e2e_exe'
- script: |
cd $(Build.SourcesDirectory)/testtools/UART_interface/
ls
. rpi_e2e_env_setup.sh
python3 serial_connect.py -i setup.txt -o output.txt -b 115200 -p $(RASPI_PORT) -d rpi
rm setup.txt
displayName: 'Setup Environment Variables'
env:
RASPI_USER: $(RASPI_USER)
RASPI_PWD: $(RASPI_PWD)
RASPI_PORT: $(RASPI_PORT)
IOTHUB_CONNECTION_STRING: $(IOTHUB-CONNECTION-STRING)
IOTHUB_EVENTHUB_CONNECTION_STRING: $(IOTHUB-EVENTHUB-CONNECTION-STRING)
IOTHUB_E2E_X509_CERT_BASE64: $(IOTHUB-E2E-X509-CERT-BASE64)
IOTHUB_E2E_X509_PRIVATE_KEY_BASE64: $(IOTHUB-E2E-X509-PRIVATE-KEY-BASE64)
IOTHUB_E2E_X509_THUMBPRINT: $(IOTHUB-E2E-X509-THUMBPRINT)
IOTHUB_POLICY_KEY: $(IOTHUB-POLICY-KEY)
STORAGE_ACCOUNT_CONNECTION_STRING: $(STORAGE-ACCOUNT-CONNECTION-STRING)
IOT_DPS_CONNECTION_STRING: $(IOT-DPS-CONNECTION-STRING)
IOT_DPS_ID_SCOPE: $(IOT-DPS-ID-SCOPE)
IOTHUB_CA_ROOT_CERT: $(IOTHUB-CA-ROOT-CERT)
IOTHUB_CA_ROOT_CERT_KEY: $(IOTHUB-CA-ROOT-CERT-KEY)
IOT_DPS_GLOBAL_ENDPOINT: $(IOT-DPS-GLOBAL-ENDPOINT)
IOTHUB_DEVICE_CONN_STRING_INVALIDCERT: $(IOTHUB-DEVICE-CONN-STRING-INVALIDCERT)
IOTHUB_CONN_STRING_INVALIDCERT: $(IOTHUB-CONN-STRING-INVALIDCERT)
DPS_GLOBALDEVICEENDPOINT_INVALIDCERT: $(DPS-GLOBALDEVICEENDPOINT-INVALIDCERT)
PROVISIONING_CONNECTION_STRING_INVALIDCERT: $(PROVISIONING-CONNECTION-STRING-INVALIDCERT)
- script: |
cd $(Build.ArtifactStagingDirectory)
ls
echo $(NEWTIN) | sudo -S chmod -R 777 drop
echo $(NEWTIN) | sudo -S setcap cap_net_raw,cap_net_admin+ep drop/$RASPI_TEST_FILE
cp drop/$RASPI_TEST_FILE $(Build.SourcesDirectory)/testtools/UART_interface/
cd $(Build.SourcesDirectory)/testtools/UART_interface/
ls
. rpi_input.sh
python3 serial_connect.py -i input.txt -o output.txt -b 115200 -p $(RASPI_PORT) -d rpi -t 720 $(RESET_RASPI)
rm input.txt
unset RASPI_TEST_FILE
displayName: 'Execute Test'
env:
RASPI_USER: $(RASPI_USER)
RASPI_PWD: $(RASPI_PWD)
RASPI_PORT: $(RASPI_PORT)
RASPI_TEST_FILE: iothubclient_amqp_device_method_e2e_exe
RASPI_SERIAL_TASK: $(RASPI_SERIAL_TASK)
RESET_RASPI: $(RESET_RASPI)
- job: 'Run_MQTT_DM_E2E_Test'
dependsOn: Cross_Compile
#disable raspberrypi jobs until raspberrypi image is rebuilt
#condition: succeeded()
condition: 'false'
pool:
name: devicelab-02
steps:
- task: DownloadBuildArtifacts@0
displayName: 'Download Build Artifacts'
inputs:
artifactName: drop
itemPattern: 'drop/**/*e2e_exe'
- script: |
cd $(Build.SourcesDirectory)/testtools/UART_interface/
ls
. rpi_e2e_env_setup.sh
python3 serial_connect.py -i setup.txt -o output.txt -b 115200 -p $(RASPI_PORT) -d rpi
rm setup.txt
displayName: 'Setup Environment Variables'
env:
RASPI_USER: $(RASPI_USER)
RASPI_PWD: $(RASPI_PWD)
RASPI_PORT: $(RASPI_PORT)
IOTHUB_CONNECTION_STRING: $(IOTHUB-CONNECTION-STRING)
IOTHUB_EVENTHUB_CONNECTION_STRING: $(IOTHUB-EVENTHUB-CONNECTION-STRING)
IOTHUB_E2E_X509_CERT_BASE64: $(IOTHUB-E2E-X509-CERT-BASE64)
IOTHUB_E2E_X509_PRIVATE_KEY_BASE64: $(IOTHUB-E2E-X509-PRIVATE-KEY-BASE64)
IOTHUB_E2E_X509_THUMBPRINT: $(IOTHUB-E2E-X509-THUMBPRINT)
IOTHUB_POLICY_KEY: $(IOTHUB-POLICY-KEY)
STORAGE_ACCOUNT_CONNECTION_STRING: $(STORAGE-ACCOUNT-CONNECTION-STRING)
IOT_DPS_CONNECTION_STRING: $(IOT-DPS-CONNECTION-STRING)
IOT_DPS_ID_SCOPE: $(IOT-DPS-ID-SCOPE)
IOTHUB_CA_ROOT_CERT: $(IOTHUB-CA-ROOT-CERT)
IOTHUB_CA_ROOT_CERT_KEY: $(IOTHUB-CA-ROOT-CERT-KEY)
IOT_DPS_GLOBAL_ENDPOINT: $(IOT-DPS-GLOBAL-ENDPOINT)
IOTHUB_DEVICE_CONN_STRING_INVALIDCERT: $(IOTHUB-DEVICE-CONN-STRING-INVALIDCERT)
IOTHUB_CONN_STRING_INVALIDCERT: $(IOTHUB-CONN-STRING-INVALIDCERT)
DPS_GLOBALDEVICEENDPOINT_INVALIDCERT: $(DPS-GLOBALDEVICEENDPOINT-INVALIDCERT)
PROVISIONING_CONNECTION_STRING_INVALIDCERT: $(PROVISIONING-CONNECTION-STRING-INVALIDCERT)
- script: |
cd $(Build.ArtifactStagingDirectory)
ls
echo $(NEWTIN) | sudo -S chmod -R 777 drop
echo $(NEWTIN) | sudo -S setcap cap_net_raw,cap_net_admin+ep drop/$RASPI_TEST_FILE
cp drop/$RASPI_TEST_FILE $(Build.SourcesDirectory)/testtools/UART_interface/
cd $(Build.SourcesDirectory)/testtools/UART_interface/
ls
. rpi_input.sh
python3 serial_connect.py -i input.txt -o output.txt -b 115200 -p $(RASPI_PORT) -d rpi -t 620 $(RESET_RASPI)
rm input.txt
unset RASPI_TEST_FILE
displayName: 'Execute Test'
env:
RASPI_USER: $(RASPI_USER)
RASPI_PWD: $(RASPI_PWD)
RASPI_PORT: $(RASPI_PORT)
RASPI_TEST_FILE: iothubclient_mqtt_device_method_e2e_exe
RASPI_SERIAL_TASK: $(RASPI_SERIAL_TASK)
RESET_RASPI: $(RESET_RASPI)
- job: 'Run_EXTRA_Test'
dependsOn: Cross_Compile
# Disabling extra task for now until feedback on use of Library Variables in conditional statements
condition: 'false'
pool:
name: devicelab-02
steps:
- task: DownloadBuildArtifacts@0
displayName: 'Download Build Artifacts'
inputs:
artifactName: drop
itemPattern: 'drop/**/*e2e_exe'
- script: |
cd $(Build.SourcesDirectory)/testtools/UART_interface/
ls
. rpi_e2e_env_setup.sh
python3 serial_connect.py -i setup.txt -o output.txt -b 115200 -p $(RASPI_PORT) -d rpi
rm setup.txt
displayName: 'Setup Environment Variables'
env:
RASPI_USER: $(RASPI_USER)
RASPI_PWD: $(RASPI_PWD)
RASPI_PORT: $(RASPI_PORT)
IOTHUB_CONNECTION_STRING: $(IOTHUB-CONNECTION-STRING)
IOTHUB_EVENTHUB_CONNECTION_STRING: $(IOTHUB-EVENTHUB-CONNECTION-STRING)
IOTHUB_E2E_X509_CERT_BASE64: $(IOTHUB-E2E-X509-CERT-BASE64)
IOTHUB_E2E_X509_PRIVATE_KEY_BASE64: $(IOTHUB-E2E-X509-PRIVATE-KEY-BASE64)
IOTHUB_E2E_X509_THUMBPRINT: $(IOTHUB-E2E-X509-THUMBPRINT)
IOTHUB_POLICY_KEY: $(IOTHUB-POLICY-KEY)
STORAGE_ACCOUNT_CONNECTION_STRING: $(STORAGE-ACCOUNT-CONNECTION-STRING)
IOT_DPS_CONNECTION_STRING: $(IOT-DPS-CONNECTION-STRING)
IOT_DPS_ID_SCOPE: $(IOT-DPS-ID-SCOPE)
IOTHUB_CA_ROOT_CERT: $(IOTHUB-CA-ROOT-CERT)
IOTHUB_CA_ROOT_CERT_KEY: $(IOTHUB-CA-ROOT-CERT-KEY)
IOT_DPS_GLOBAL_ENDPOINT: $(IOT-DPS-GLOBAL-ENDPOINT)
IOTHUB_DEVICE_CONN_STRING_INVALIDCERT: $(IOTHUB-DEVICE-CONN-STRING-INVALIDCERT)
IOTHUB_CONN_STRING_INVALIDCERT: $(IOTHUB-CONN-STRING-INVALIDCERT)
DPS_GLOBALDEVICEENDPOINT_INVALIDCERT: $(DPS-GLOBALDEVICEENDPOINT-INVALIDCERT)
PROVISIONING_CONNECTION_STRING_INVALIDCERT: $(PROVISIONING-CONNECTION-STRING-INVALIDCERT)
- script: |
cd $(Build.ArtifactStagingDirectory)
ls
echo $(NEWTIN) | sudo -S chmod -R 777 drop
echo $(NEWTIN) | sudo -S setcap cap_net_raw,cap_net_admin+ep drop/$RASPI_TEST_FILE
cp drop/$RASPI_TEST_FILE $(Build.SourcesDirectory)/testtools/UART_interface/
cd $(Build.SourcesDirectory)/testtools/UART_interface/
ls
. rpi_input.sh
python3 serial_connect.py -i input.txt -o output.txt -b 115200 -p $(RASPI_PORT) -d rpi -t 620 $(RESET_RASPI)
rm input.txt
unset RASPI_TEST_FILE
displayName: 'Execute Test'
env:
RASPI_USER: $(RASPI_USER)
RASPI_PWD: $(RASPI_PWD)
RASPI_PORT: $(RASPI_PORT)
RASPI_TEST_FILE: $(RASPI_TEST_FILE)
RASPI_SERIAL_TASK: $(RASPI_SERIAL_TASK)
RESET_RASPI: $(RESET_RASPI)