Giter VIP home page Giter VIP logo

jira-sync's Introduction

Build Status Apache 2.0 Coverage Status

Jira-to-Jira Synchronisation

Asynchronous synchronisation of two Jira instances implemented with Spring Boot.

                                               ╭────╮
   _ _                                         │ cr │
  (_|_)_ __ __ _      ___ _   _ _ __   ___     │ nn │ cronn
  | | | '__/ _` |____/ __| | | | '_ \ / __|    ╰────╯
  | | | | | (_| |____\__ \ |_| | | | | (__
 _/ |_|_|  \__,_|    |___/\__, |_| |_|\___|
|__/                      |___/

Prerequisites

Running

On Linux:

Option 1

./gradlew bootRun -Dspring.config.location=file:/path/to/config/

Option 2

./gradlew assemble

Execute the 'fat' JAR:

build/libs/jira-sync-1.0.jar --spring.config.location=file:/path/to/config/

Configuration

config/application.properties

de.cronn.jira.sync.source.url=https://jira.source/
de.cronn.jira.sync.target.url=https://jira.target/

de.cronn.jira.sync.source.username=user
de.cronn.jira.sync.source.password=pass

de.cronn.jira.sync.target.username=user
de.cronn.jira.sync.target.password=pass


# Optional
# de.cronn.jira.sync.source.sslTrustStore=file:/path/to/truststore.jks
# de.cronn.jira.sync.source.sslTrustStorePassphrase=secret

# Optional
# de.cronn.jira.sync.target.basicAuth.username=user
# de.cronn.jira.sync.target.basicAuth.password=pass

# Optional
# de.cronn.jira.sync.cache.persistent=true
# de.cronn.jira.sync.cache.directory=cache

### General Jira Mappings ###

# cf. https://jira-source/rest/api/2/priority and https://jira-target/rest/api/2/priority
de.cronn.jira.sync.priorityMapping[Highest]=Blocker
de.cronn.jira.sync.priorityMapping[High]=Critical
de.cronn.jira.sync.priorityMapping[Medium]=Major
de.cronn.jira.sync.priorityMapping[Low]=Minor
de.cronn.jira.sync.priorityMapping[Lowest]=Trivial

# cf. https://jira-source/rest/api/2/issue/createmeta and https://jira-target/rest/api/2/issue/createmeta
de.cronn.jira.sync.issueTypeMapping[Bug]=Bug
de.cronn.jira.sync.issueTypeMapping[Improvement]=New Feature
de.cronn.jira.sync.issueTypeMapping[New\ Feature]=New Feature


# cf. https://jira-source/rest/api/2/resolution and https://jira-target/rest/api/2/resolution
de.cronn.jira.sync.resolutionMapping[Fixed]=Fixed
de.cronn.jira.sync.resolutionMapping[Won't\ Fix]=Won't Fix
de.cronn.jira.sync.resolutionMapping[Duplicate]=Duplicate
de.cronn.jira.sync.resolutionMapping[Incomplete]=Incomplete
de.cronn.jira.sync.resolutionMapping[Cannot\ Reproduce]=Cannot Reproduce

### Project Configuration ###

de.cronn.jira.sync.projects[EX].sourceProject=EXAMPLE
de.cronn.jira.sync.projects[EX].targetProject=EX
de.cronn.jira.sync.projects[EX].sourceFilterId=12345
de.cronn.jira.sync.projects[EX].remoteLinkIconInSource=${de.cronn.jira.sync.source.url}/favicon.ico
de.cronn.jira.sync.projects[EX].remoteLinkIconInTarget=${de.cronn.jira.sync.target.url}/favicon.ico

# Optional
# de.cronn.jira.sync.projects[EX].labelsToKeepInTarget=internal,readyToAssign

de.cronn.jira.sync.projects[EX].transitions[ResolveWhenClosed].sourceStatusIn=Open,In Progress
de.cronn.jira.sync.projects[EX].transitions[ResolveWhenClosed].targetStatusIn=Closed
de.cronn.jira.sync.projects[EX].transitions[ResolveWhenClosed].sourceStatusToSet=Resolved
de.cronn.jira.sync.projects[EX].transitions[ResolveWhenClosed].copyResolutionToSource=true
de.cronn.jira.sync.projects[EX].transitions[ResolveWhenClosed].copyFixVersionsToSource=true
de.cronn.jira.sync.projects[EX].transitions[ResolveWhenClosed].customFieldsToCopyFromTargetToSource[field-name-in-source]=field-name-in-target

de.cronn.jira.sync.projects[EX].transitions[TakeInProgress].sourceStatusIn=Open
de.cronn.jira.sync.projects[EX].transitions[TakeInProgress].targetStatusIn=Open,Blocked,In Progress,In Review
de.cronn.jira.sync.projects[EX].transitions[TakeInProgress].sourceStatusToSet=In Progress
de.cronn.jira.sync.projects[EX].transitions[TakeInProgress].onlyIfAssignedInTarget=true
de.cronn.jira.sync.projects[EX].transitions[TakeInProgress].assignToMyselfInSource=true

de.cronn.jira.sync.projects[EX].transitions[Reopen].sourceStatusIn=Reopened
de.cronn.jira.sync.projects[EX].transitions[Reopen].targetStatusIn=Resolved,Closed
de.cronn.jira.sync.projects[EX].transitions[Reopen].targetStatusToSet=Reopened

# Optional mapping of (custom) field values
de.cronn.jira.sync.projects[EX].fieldValueMappings[field-name-in-source][source-value-1]=target_value_1
de.cronn.jira.sync.projects[EX].fieldValueMappings[field-name-in-source][source-value-2]=target_value_2
de.cronn.jira.sync.projects[EX].fieldValueMappings[field-name-in-source][source-value-3]=target_value_3

de.cronn.jira.sync.projects[EX].skipUpdateInTargetWhenStatusIn=Resolved,Closed

de.cronn.jira.sync.projects[EX].targetIssueTypeFallback=Task

# cf. https://jira-source/rest/api/2/field and https://jira.target/rest/api/2/field
de.cronn.jira.sync.fieldMapping[Found\ in\ version]=Found in software version

# cf. https://jira-source/rest/api/2/project/EXAMPLE/versions and https://jira.target/rest/api/2/project/EX/versions
de.cronn.jira.sync.projects[EX].versionMapping[10.0]=10
de.cronn.jira.sync.projects[EX].versionMapping[11.0]=11
de.cronn.jira.sync.projects[EX].versionMapping[12.0]=12
de.cronn.jira.sync.projects[EX].versionsToIgnore=Undefined

Building

On Unix:

./gradlew build

On Windows:

gradlew.bat build

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.