Working bi-directional sync of inline images between Jira Cloud and Azure DevOps. We’ve cracked the Jira → ADO direction end-to-end (5/5 sandbox cases — comments, descriptions, multi-image, dedupe collisions, mixed Jira-attachment + external). Stuck on the ADO → Jira-Cloud direction in a way that I haven’t seen articulated in adjacent threads, so wanted to surface the underlying constraint we’re hitting.
Adjacent threads we’ve read:
- DevOps > Jira Attachments (Topic 4369) — recommended
nodeHelper/commentHelperscript set, last public state was theimage.pngcollision issue. - Help with formatting text in sync between ADO and Jira Cloud (Topic 6795) — same use case, formatting and inline-image discussion still open.
- Need a solution for a bi-directional sync of embedded inline images (Topic 5582) — older
<!-- inline image filename=#X# -->placeholder pattern, written for Jira on-prem. - Also active on ticket EASE-50918.
The underlying constraint we’re hitting on ADO → Jira-Cloud:
When an ADO user pastes a screenshot inline into a comment, the image is stored as an internal blob in the comment HTML — not surfaced as a standard work-item attachment that attachmentHelper.mergeAttachments would carry across. So nothing reaches the Jira side via the normal sync path.
Even if we fetched the ADO blob ourselves via REST and uploaded it to Jira via the Attachments API, we can’t make Jira render it inline in the comment, because:
replica.comments[].bodyis string-only on the Jira side (not ADF) — we have no way to emit ADFmediaSingle/medianodes from a Groovy script.- Jira Cloud’s comment ADF only accepts
medianodes referencing Atlassian Media Services UUIDs, not arbitrary<img src="https://…">. Wiki-style!filename.png!works for Jira DC but not Jira Cloud.
This matches the symptoms described on Topic 6795 (“Preview unavailable”, image arriving as a link rather than a render) — the script writes an <img> reference but Jira Cloud silently demotes it because the renderer doesn’t see a valid media-node.
Questions:
- Is there a recommended pattern for ADO → Jira-Cloud inline-comment images that bridges into proper ADF media nodes? Specifically, anything that surfaces or returns an Atlassian Media Services UUID from inside the Groovy script.
- Are there
commentHelper/mediaHelper/ undocumented Hub Object capabilities that handle this transformation? The fact thatnodeHelper.toMarkDownCommentsis recommended suggests there’s a path, but in our testing inline images don’t survive. - If neither, is the right path an out-of-band Atlassian Media Services upload (3-step: upload → bind to attachment → reference UUID in ADF), invoked outside Exalate? We’re aware of the
httpClient.post(url, body, headers)3-argMissingMethodExceptionlimitation, so this would have to happen outside the script.
For the immediate term we’re shipping a placeholder breadcrumb on the ADO → Jira side (rather than silently dropping the inline reference) and educating ADO users to use the paperclip / Add Attachment button for screenshots they want the Jira side to see. But interested if there’s a better path that Exalate engineers have in flight.