Recent searches


No recent searches

CICD pipeline for updating a support app is running indefinitely



Posted Jul 29, 2024

I have created a support app and set up a CI/CD pipeline using Azure DevOps with the zcli apps:update command. The app communicates with an external API hosted in Azure API Management with OAuth.

 

The problem is that the pipeline does not end even after updating the app. The update task is running indefinitely as shown in the screenshot.

 

Any help will be appreciated.

 

Thanks.


0

2

2 comments

image avatar

Greg Katechis

Zendesk Developer Advocacy

Hi Shafeeq!
 
This is actually something that our dev team is aware and working on at the moment. I don't have an ETA for it, but the last that I heard was that they were hoping for a fix sometime this quarter.
 
In the interim, I see that you commented on another thread where Eric had mentioned a solution and you were looking for additional info. That information can be found here.
 
Let us know if you have any questions about this.

1


Greg Katechis thanks for the quick response. Good to know that the fix is on its way :)

I had commented on the other thread because When I added a timeout to the update task in the pipeline, it showed a trace to enter the token value.

Then I passed the OAuth token into the zcli.apps.config.json as Eric mentioned, but there was no change in the output.

 

Here is my pipeline code:

trigger: 'none'
  

pool:
  vmImage: 'ubuntu-latest'

variables:
  node_version: '16.x'
  ZENDESK_SUBDOMAIN: '##########'
  ZENDESK_EMAIL: '##############'
  ZENDESK_API_TOKEN: '###################'
  OAUTH_CLIENT_ID: '##########################'
  OAUTH_CLIENT_SECRET: '################################'
  OAUTH_TOKEN_URL: 'https://login.microsoftonline.com/##########################/oauth2/v2.0/token'
  OAUTH_SCOPE: 'api://####################/.default'  

steps:
- checkout: self
  displayName: 'Checkout Code'

- task: UseNode@1
  inputs:
    version: '$(node_version)'
  displayName: 'Use Node.js $(node_version)'

- script: |
    npm install -g @zendesk/zcli
  displayName: 'Install zcli'

- script: |
    cd $(Build.SourcesDirectory)/ZendeskAPP/DailyTime
    echo "Current directory: $(pwd)"
    ls -la
  displayName: 'List Directory Contents'

- script: |
    cd $(Build.SourcesDirectory)/ZendeskAPP/DailyTime
    zcli apps:validate
  displayName: 'Validate Zendesk App'

# Step to obtain OAuth token with debug information
- script: |
    echo "Requesting OAuth token..."
    TOKEN_RESPONSE=$(curl -v --request POST \
      --url $(OAUTH_TOKEN_URL) \
      --header 'content-type: application/x-www-form-urlencoded' \
      --data-urlencode "client_id=$(OAUTH_CLIENT_ID)" \
      --data-urlencode "client_secret=$(OAUTH_CLIENT_SECRET)" \
      --data-urlencode "grant_type=client_credentials" \
      --data-urlencode "scope=$(OAUTH_SCOPE)")
    
    echo "TOKEN_RESPONSE: $TOKEN_RESPONSE"
    ACCESS_TOKEN=$(echo $TOKEN_RESPONSE | jq -r '.access_token')
    
    # Print the obtained token
    echo "Obtained OAuth Token: $ACCESS_TOKEN"
 
    # Save the token to be used in the next steps
    echo "##vso[task.setvariable variable=ACCESS_TOKEN]$ACCESS_TOKEN"
  displayName: 'Obtain OAuth Token'

- script: |
    cd $(Build.SourcesDirectory)/ZendeskAPP/DailyTime
    jq --arg token "$(ACCESS_TOKEN)" '.parameters |= map(if .name == "token" then .value = $token else . end)' zcli.apps.config.json > tmp.$$.json && mv tmp.$$.json zcli.apps.config.json
    
    # Print the updated zcli.apps.config.json
    echo "Updated zcli.apps.config.json content:"
    cat zcli.apps.config.json
  displayName: 'Update zcli.apps.config.json with OAuth Token'

- script: |
    timeout 120 zcli apps:update $(Build.SourcesDirectory)/ZendeskAPP/DailyTime
    if [ $? -eq 124 ]; then
      echo "zcli apps:update command timed out"
      exit 1
    fi
    echo "Successfully updated app: Daily Time with app_id: $(APP_ID)"
  displayName: 'Update Zendesk App'
  condition: and(succeeded(), eq(variables['Build.SourceBranchName'], 'master'))

- script: |
    echo "Pipeline completed successfully."
    exit 0
  displayName: 'Finalize'

And the zcli.apps.config.json file is:

{
  
  "app_id": #######,
  "parameters": [
    {
      "name": "token",
      "type": "OAuth",
      "required": true,
      "secure": true,
      "value": "token_KEY"
    }
  ]
}

 

Any thoughts on this?

 

 

0


Please sign in to leave a comment.

Didn't find what you're looking for?

New post