Powershell Update plugins by Jira API UPM

MINOTTE Didier May 18, 2022

Hello to all,

I'm creating an application under powershell to update the jira plugins.

I was able to retrieve the list of plugins installed on our site and compare with the versions available on the atlassian marketplace without too much trouble.

I'm stuck mainly on sending the plugin file to jira through the UPM rest API, the request is sent to jira but I must be missing information because the UPM log returns "Failed to install app plugin_8212726077636355451_groovyrunner-6.50.0.jar"

test code for upload :


$AuthString = "{0}:{1}" -f 'name', 'password'
$AuthBytes = [System.Text.Encoding]::Ascii.GetBytes($AuthString)
$BasicCreds = [Convert]::ToBase64String($AuthBytes)
$UMPTokens = Invoke-WebRequest -Uri "https://XXXXXXX/rest/plugins/1.0/?os_authType=basic" -Method Head -Headers @{"Authorization" = "Basic $BasicCreds" }
$filePath="c:\temp\groovyrunner-6.50.0.jar"

$fileBin = [System.IO.File]::ReadAllBytes($filePath)
$boundary = [System.Guid]::NewGuid().ToString()
$LF = "`r`n"
$bodyLines = (
"--$boundary",
"Content-Disposition: form-data; name=`"plugin`"; filename=`"groovyrunner-6.50.0.jar`"",
"Content-Type: application/octet-stream$LF",
$filepath,
"--$boundary--$LF"
) -join $LF

Invoke-RestMethod -Uri "https://XXXXXXX/rest/plugins/1.0/?token=$($UMPTokens.Headers.'upm-token')" -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines -Headers @{"Authorization" = "Basic $BasicCreds" }

Thanking you in advance for any help you can provide

3 answers

1 accepted

0 votes
Answer accepted
MINOTTE Didier June 21, 2022

Hello,

I solved my problem by rewriting my code, especially the Body part
Here is the code if it can be useful to other people who want to use Powershell to run Jira :

$file = "C:\temp\$name"
$enc = [System.Text.Encoding]::GetEncoding("iso-8859-1")
$boundary = [System.Guid]::NewGuid().ToString()
$fileName = Split-Path -Path $file -Leaf
$readFile = [System.IO.File]::ReadAllBytes($file)
$fileEnc = $enc.GetString($readFile)
$bodyLines = @'
--{0}
Content-Disposition: form-data; name="plugin"; filename="{1}"
Content-Type: application/octet-stream

{2}
--{0}--
'@ -f $boundary, $fileName, $fileEnc
$headers = @{
'Authorization' = "Basic $BasicCreds"
}

$parameter = @{
URI = "$server_url/rest/plugins/1.0/?token=$($UMPTokens.Headers.'upm-token')"
Method = "Post"
Body = $bodyLines
Headers = $headers
ContentType = "multipart/form-data; boundary=`"$boundary`""
}

$reponse = Invoke-RestMethod @parameter -ErrorAction Stop
0 votes
MINOTTE Didier May 18, 2022

I went back with another plugin and the result is the same even though the powershell console does not return any error message.

COMMENTAIRES : POST https://XXXXXXXXXX/rest/plugins/1.0/?token=XXXXXXXXXX with -1-byte payload
COMMENTAIRES : received -1-byte response of content type application/vnd.atl.plugins.install.installing+json;charset=UTF-8


type : INSTALL
pingAfter : 100
status : @{done=False; statusCode=200; contentType=application/vnd.atl.plugins.install.installing+json; source=agile-cards-4.6.29.jar; name=agile-cards-4.6.29.jar}
links : @{self=/rest/plugins/1.0/pending/3fcd5eba-a8c5-4cd4-b763-e0e3d6a6ba0b; alternate=/rest/plugins/1.0/tasks/3fcd5eba-a8c5-4cd4-b763-e0e3d6a6ba0b}
timestamp : 1652883170615
userKey : JIRAUSER15803
id : 3fcd5eba-a8c5-4cd4-b763-e0e3d6a6ba0b

 And when I go to the Pending link of the REST API, I get this message :

type "INSTALL"
pingAfter 100
status
done true
statusCode 200
contentType "application/vnd.atl.plugins.task.install.err+json"
errorMessage "Could not install the file groovyrunner-6.50.0.jar. Check that the file is valid."
source "groovyrunner-6.50.0.jar"
name "groovyrunner-6.50.0.jar"
links
self "/rest/plugins/1.0/pending/09381d7f-dd47-4e7a-afb6-323e3a1eb139"
alternate "/rest/plugins/1.0/tasks/09381d7f-dd47-4e7a-afb6-323e3a1eb139"
timestamp 1652883055829
userKey "JIRAUSER15803"
id "09381d7f-dd47-4e7a-afb6-323e3a1eb139"
0 votes
Nic Brough -Adaptavist-
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
May 18, 2022

Welcome to the Atlassian Community!

Does this happen for other apps, or is it just the groovyrunner?

If it is only groovyrunner, then is there more errors following the failure in the log?

MINOTTE Didier May 18, 2022

Thanks already for the quick feedback ;)

It's true that I only tried with groovyrunner, I didn't look at the other plugins that I want to update this way '-_- (I'm doing some tests and I'll come back if it's the file that's causing the problem or my method)

For the logs, if you can direct me to which one to look at I'll be happy to have more information about the error I have. For the error I put I look on audit log of manage apps.

Thank you in advance.

Nic Brough -Adaptavist-
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
May 18, 2022

I think you'll want to have a look at the application log, in <jira home>/logs/atlassian-jira.log - this should be catching your attempt to install and telling you what is wrong with the upload.  If it doesn't log anything, then the problem is going to be the upload.

MINOTTE Didier May 19, 2022

Hello Nic,
For the file, it's the right one I was looking at and I don't see anything transcendent in it concerning a possible error when uploading a plugin.

I also think that there is something more to do for the upload to work properly (a forgotten parameter on my part??)

Still, the REST API does return things :

powershell console does not return any error message.

COMMENTAIRES : POST https://XXXXXXXXXX/rest/plugins/1.0/?token=XXXXXXXXXX with -1-byte payload
COMMENTAIRES : received -1-byte response of content type application/vnd.atl.plugins.install.installing+json;charset=UTF-8


type : INSTALL
pingAfter : 100
status : @{done=False; statusCode=200; contentType=application/vnd.atl.plugins.install.installing+json; source=agile-cards-4.6.29.jar; name=agile-cards-4.6.29.jar}
links : @{self=/rest/plugins/1.0/pending/3fcd5eba-a8c5-4cd4-b763-e0e3d6a6ba0b; alternate=/rest/plugins/1.0/tasks/3fcd5eba-a8c5-4cd4-b763-e0e3d6a6ba0b}
timestamp : 1652883170615
userKey : JIRAUSER15803
id : 3fcd5eba-a8c5-4cd4-b763-e0e3d6a6ba0b

 and when I go to the Pending link of the REST API, I get this message :

type "INSTALL"
pingAfter 100
status
done true
statusCode 200
contentType "application/vnd.atl.plugins.task.install.err+json"
errorMessage "Could not install the file groovyrunner-6.50.0.jar. Check that the file is valid."
source "groovyrunner-6.50.0.jar"
name "groovyrunner-6.50.0.jar"
links
self "/rest/plugins/1.0/pending/09381d7f-dd47-4e7a-afb6-323e3a1eb139"
alternate "/rest/plugins/1.0/tasks/09381d7f-dd47-4e7a-afb6-323e3a1eb139"
timestamp 1652883055829
userKey "JIRAUSER15803"
id "09381d7f-dd47-4e7a-afb6-323e3a1eb139"
Nic Brough -Adaptavist-
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
May 19, 2022

Ok, so powershell isn't giving us anything useful, dropping the response from Jira.

Could you try your call with a simple curl or wget, so we get the full response?

And what does the Jira application log say?

MINOTTE Didier May 25, 2022

Hello Nic,

This is what I get with a curl :

curl --insecure -X POST "${URL}?token=${TOKEN}" -F plugin=@agile-cards-4.6.29.jar

Console shell :

<textarea>{"type":"INSTALL","pingAfter":100,"status":{"done":false,"statusCode":200,"contentType":"application/vnd.atl.plugins.install.installing+json","source":"agile-cards-4.6.29.jar","name":"agile-cards-4.6.29.jar"},"links":{"self":"/rest/plugins/1.0/pending/537e2218-ff7f-4409-afba-8556cc19f349","alternate":"/rest/plugins/1.0/tasks/537e2218-ff7f-4409-afba-8556cc19f349"},"timestamp":1653398151733,"userKey":"JIRAUSER15803","id":"537e2218-ff7f-4409-afba-8556cc19f349"}</textarea> 

Log Atlassian jira:

2022-05-24 15:15:55,306+0200 UpmAsynchronousTaskManager:thread-1 INFO XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.plugin.loaders.ScanningPluginLoader] No plugins found to be installed
2022-05-24 15:16:03,229+0200 UpmAsynchronousTaskManager:thread-1 INFO XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.plugin.manager.DefaultPluginManager] Updating plugin 'com.spartez.scrumprint.scrumplugin' from version '4.6.27' to version '4.6.29'
2022-05-24 15:16:03,233+0200 UpmAsynchronousTaskManager:thread-1 INFO XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.plugin.manager.DefaultPluginManager] Disabling com.spartez.scrumprint.scrumplugin
2022-05-24 15:16:08,741+0200 UpmAsynchronousTaskManager:thread-1 DEBUG XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.activeobjects.osgi.ActiveObjectsServiceFactory] ungetService bundle [com.spartez.scrumprint.scrumplugin]
2022-05-24 15:16:09,669+0200 UpmAsynchronousTaskManager:thread-1 DEBUG XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.activeobjects.osgi.ActiveObjectsServiceFactory] onPluginDisabledEvent removing delegate for [com.spartez.scrumprint.scrumplugin]
2022-05-24 15:16:11,226+0200 UpmAsynchronousTaskManager:thread-1 INFO XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.plugin.loaders.ScanningPluginLoader] Removed plugin 'com.spartez.scrumprint.scrumplugin'
2022-05-24 15:16:12,810+0200 UpmAsynchronousTaskManager:thread-1 INFO XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.plugin.util.WaitUntil] Plugins that have yet to be enabled: (1): [com.spartez.scrumprint.scrumplugin], 300 seconds remaining
2022-05-24 15:16:13,810+0200 UpmAsynchronousTaskManager:thread-1 INFO XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.plugin.util.WaitUntil] Plugins that have yet to be enabled: (1): [com.spartez.scrumprint.scrumplugin], 298 seconds remaining
2022-05-24 15:16:14,810+0200 UpmAsynchronousTaskManager:thread-1 INFO XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.plugin.util.WaitUntil] Plugins that have yet to be enabled: (1): [com.spartez.scrumprint.scrumplugin], 297 seconds remaining
2022-05-24 15:16:15,835+0200 UpmAsynchronousTaskManager:thread-1 INFO XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.plugin.util.WaitUntil] Plugins that have yet to be enabled: (1): [com.spartez.scrumprint.scrumplugin], 296 seconds remaining
2022-05-24 15:16:16,841+0200 UpmAsynchronousTaskManager:thread-1 INFO XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.plugin.util.WaitUntil] Plugins that have yet to be enabled: (1): [com.spartez.scrumprint.scrumplugin], 295 seconds remaining
2022-05-24 15:16:17,841+0200 UpmAsynchronousTaskManager:thread-1 INFO XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.plugin.util.WaitUntil] Plugins that have yet to be enabled: (1): [com.spartez.scrumprint.scrumplugin], 294 seconds remaining
2022-05-24 15:16:19,090+0200 UpmAsynchronousTaskManager:thread-1 DEBUG XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.activeobjects.osgi.OsgiServiceUtilsImpl] Registering service net.java.ao.atlassian.AtlassianTableNameConverter@7b964a41 with interface net.java.ao.schema.TableNameConverter and properties {com.atlassian.plugin.key=com.spartez.scrumprint.scrumplugin}
2022-05-24 15:16:19,093+0200 UpmAsynchronousTaskManager:thread-1 DEBUG XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.activeobjects.osgi.OsgiServiceUtilsImpl] Registering service com.atlassian.activeobjects.config.internal.DefaultActiveObjectsConfiguration@e92c2cd4 with interface com.atlassian.activeobjects.config.ActiveObjectsConfiguration and properties {com.atlassian.plugin.key=com.spartez.scrumprint.scrumplugin}
2022-05-24 15:16:19,096+0200 UpmAsynchronousTaskManager:thread-1 DEBUG XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.activeobjects.osgi.ActiveObjectsServiceFactory] onPluginModuleEnabledEvent storing unattached <ao> configuration module for [com.spartez.scrumprint.scrumplugin]
2022-05-24 15:16:19,861+0200 UpmAsynchronousTaskManager:thread-1 DEBUG XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.activeobjects.osgi.ActiveObjectsServiceFactory] onPluginEnabledEvent attaching unbound <ao> to [com.spartez.scrumprint.scrumplugin]
2022-05-24 15:16:19,861+0200 UpmAsynchronousTaskManager:thread-1 DEBUG XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.activeobjects.osgi.TenantAwareActiveObjects] init bundle [com.spartez.scrumprint.scrumplugin]
2022-05-24 15:16:19,861+0200 UpmAsynchronousTaskManager:thread-1 DEBUG XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.activeobjects.osgi.TenantAwareActiveObjects] bundle [com.spartez.scrumprint.scrumplugin] loading new AO promise for JiraTenantImpl{id='system'}
2022-05-24 15:16:19,861+0200 UpmAsynchronousTaskManager:thread-1 DEBUG XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.activeobjects.osgi.TenantAwareActiveObjects] setAoConfiguration [com.spartez.scrumprint.scrumplugin]
2022-05-24 15:16:19,862+0200 UpmAsynchronousTaskManager:thread-1 DEBUG XXXXXXXX 915x2553x1 z0zha7 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.activeobjects.osgi.TenantAwareActiveObjects] bundle [com.spartez.scrumprint.scrumplugin] got ActiveObjectsConfiguration
2022-05-24 15:16:19,862+0200 active-objects-init-JiraTenantImpl{id='system'}-0 DEBUG XXXXXXXX [c.a.activeobjects.osgi.TenantAwareActiveObjects] bundle [com.spartez.scrumprint.scrumplugin] creating ActiveObjects
2022-05-24 15:16:20,209+0200 active-objects-init-JiraTenantImpl{id='system'}-0 DEBUG XXXXXXXX [c.a.activeobjects.osgi.TenantAwareActiveObjects] bundle [com.spartez.scrumprint.scrumplugin] created ActiveObjects


I changed my code a bit and I finally get an error in the jira log

code :

$AuthString = "{0}:{1}" -f 'XXXXXX', 'XXXXXX'
$AuthBytes = [System.Text.Encoding]::Ascii.GetBytes($AuthString)
$BasicCreds = [Convert]::ToBase64String($AuthBytes)
$UMPTokens = Invoke-WebRequest -Uri "https://xxxxxxxxxxxxxxx/rest/plugins/1.0/?os_authType=basic" -Method Head -Headers @{"Authorization" = "Basic $BasicCreds" }
$filePath= Get-Item "c:\temp\agile-cards-4.6.29.jar"
$boundary = [System.Guid]::NewGuid().ToString()
$LF = "`r`n"
$bodyLines = (
"--$boundary",
"Content-Disposition: form-data; name=`"plugin`"; filename=`"$filePath`"",
"Content-Type: application/vnd.atl.plugins.install.uri+json$LF",
"--$boundary--$LF"
) -join $LF

Invoke-RestMethod -Uri "https://xxxxxxxxxxxxxxx/rest/plugins/1.0/?token=$($UMPTokens.Headers.'upm-token')" -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines -Headers @{"Authorization" = "Basic $BasicCreds" } -Debug -Verbose

back to powershell :

Invoke-RestMethod : Le serveur distant a retourné une erreur : (500) Erreur interne du serveur.
Au caractère C:\Users\DM00DDCL\Downloads\Sans titre2.ps1:15 : 1
+ Invoke-RestMethod -Uri "https://xxxxxxxxxxxxxxxxxxxxxx/rest/plu ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

Log Atlassian jira :

2022-05-24 15:35:46,513+0200 http-nio-8080-exec-15 ERROR XXXXXXXX 935x2962x1 1335k50 XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
2022-05-24 15:40:46,245+0200 http-nio-8080-exec-1 ERROR XXXXXXXX 940x2969x1 ifj3pu XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
2022-05-24 16:15:16,538+0200 http-nio-8080-exec-9 ERROR XXXXXXXX 975x3190x1 10q0fox XXXXXXXX,XXXXXXX /rest/plugins/1.0/ [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly

 

 

MINOTTE Didier May 25, 2022

And by changing some parameters in my script

code :

$AuthString = "{0}:{1}" -f 'xxxxxxx', 'xxxxx'
$AuthBytes = [System.Text.Encoding]::Ascii.GetBytes($AuthString)
$BasicCreds = [Convert]::ToBase64String($AuthBytes)
$UMPTokens = Invoke-WebRequest -Uri "https://xxxxxxxxxxxxx/rest/plugins/1.0/?os_authType=basic" -Method Head -Headers @{"Authorization" = "Basic $BasicCreds" }
$filePath= "c:\temp\agile-cards-4.6.29.jar"
$fileBytes = [System.IO.File]::ReadAllBytes($FilePath);
$fileEnc = [System.Text.Encoding]::GetEncoding('UTF-8').GetString($fileBytes);
$boundary = [System.Guid]::NewGuid().ToString()
$LF = "`r`n"
$bodyLines = (
"--$boundary",
"Content-Disposition: form-data; name=`"plugin`"; filename=`"agile-cards-4.6.29.jar`"",
"Content-Type: application/octet-stream$LF",
$filenc,
"--$boundary--$LF"
) -join $LF

Invoke-RestMethod -Uri "https://xxxxxxxxxxx/rest/plugins/1.0/?token=$($UMPTokens.Headers.'upm-token')" -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines -Headers @{"Authorization" = "Basic $BasicCreds" } -Debug -Verbose

back to powershell :

type : INSTALL
pingAfter : 100
status : @{done=False; statusCode=200; contentType=application/vnd.atl.plugins.install.installing+json; source=agile-cards-4.6.29.jar; name=agile-cards-4.6.29.jar}
links : @{self=/rest/plugins/1.0/pending/b02c370c-bc01-411d-94b6-b6858c047d46; alternate=/rest/plugins/1.0/tasks/b02c370c-bc01-411d-94b6-b6858c047d46}
timestamp : 1653463217788
userKey : JIRAUSER15803
id : b02c370c-bc01-411d-94b6-b6858c047d46

no return in the jira log

return in the UPM audit log :

Failed to install app plugin_9642194383374795082_agile-cards-4.6.29.jar

 Return links /rest/plugins/1.0/pending :

type "INSTALL"
pingAfter 100
status
done true
statusCode 200
contentType "application/vnd.atl.plugins.task.install.err+json"
errorMessage "Could not install the file agile-cards-4.6.29.jar. Check that the file is valid."
source "agile-cards-4.6.29.jar"
name "agile-cards-4.6.29.jar"
links
self "/rest/plugins/1.0/pending/b02c370c-bc01-411d-94b6-b6858c047d46"
alternate "/rest/plugins/1.0/tasks/b02c370c-bc01-411d-94b6-b6858c047d46"
timestamp 1653463217788
userKey "JIRAUSER15803"
id "b02c370c-bc01-411d-94b6-b6858c047d46

 Return links /rest/plugins/1.0/tasks :

links 
self "/rest/plugins/1.0/tasks/b02c370c-bc01-411d-94b6-b6858c047d46"
done true
error
message "Could not install the file agile-cards-4.6.29.jar. Check that the file is valid."
type "INSTALL"
pollDelay 100
timestamp 1653463217788
userKey "JIRAUSER15803"
Nic Brough -Adaptavist-
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
May 25, 2022

Well, that's pretty clear - the file you are trying to upload is not a valid app for the server - this may be a damaged file or it might be invalid for the version of Jira you are on.

What happens when you try doing the installation properly?  By using the "upgrade" button in the UPM?

MINOTTE Didier May 25, 2022

It's exactly the same file as when I did the test with curl, that's why I'm coming to you because I think more of a problem maybe in the structure of my body or a lack of parameters compared to what Jira UPM expects.

Just by changing the way I provide the jira to file, jira returns errors as well in the log, powershell also and on the other hand the audit log of UPM not and conversely in the change again these parameters nothing in the log of jira, nothing in powershell but this time audit log of UPM announces me a failed with a check that the file is valid.

Thank you in advance for the time you spend on my problem ^^

Suggest an answer

Log in or Sign up to answer