Du ser en gammel version af denne side. Se den nuværende version.

Sammenlign med nuværende Vis sidehistorik

« Forrige Version 8 Næste »

 

Prerequsites

Workflow

My IssueType is called "Repeatable Task" and has a very small workflow:

Upon the Transition of Initiate, the Post Function, creates a copy of the Issue as a subtask and sets the the issue back to Status "Frozen":

Make a custom Field

The Issuetype has a custom field called "Cron Scheduling", as this will hold the schedules for the Issue:

Location

I have my stuff in /opt/jira-cron

 

 

The usefull Scripts

Make the crontab script 

The scripts makes and enables a crontab for the "jira" user. It search for issues that satisfies:

Issuetype=Repeatable Task

Status=Frozen

Cron Scheduling has a value

jiraMakeCrontab.sh
#!/bin/bash
IFS=$(echo -en "\n\b")

TransitionScript="/opt/jira-cron/jiraTransitionIssue.sh"
JIRAFilter="issuetype = \"Repeatable Task\" AND status in (Frozen)  and \"Cron Scheduling\" IS NOT NULL"
FIELD="12821"
CHAR="'"
CRONTABUSER="jira"

rm /tmp/crontab 2> /dev/null
rm /tmp/value 2> /dev/null

echo " --------- " >>/opt/jira-cron/jiraMakeCrontab.log

issueList=`/opt/atlassian-cli/jira.sh --action getIssueList --search "$JIRAFilter" --outputFormat 200  | grep -v "issues" | grep -v "Created"`
for issue in $issueList
do
        issueKey=`echo $issue | awk '{print $1}' | sed 's/,//g'`
        CustomFieldValue=`/pack/atlassian-cli/jira.sh --action GetFieldValue --issue "$issueKey" --field "customfield_$FIELD" --file /tmp/value`
        if [ -f /tmp/value ]
        then
                crontabEntry=`cat /tmp/value | sed 's/'"$CHAR"'//g'`
                echo "#Crontabs for $issueKey" >> /tmp/crontab
                for cronEntry in $crontabEntry
                do
                        echo "$cronEntry $TransitionScript $issueKey >> /opt/jira-cron/jiraTransitionIssue.log 2>&1" >> /tmp/crontab
                        echo "Added: $cronEntry $TransitionScript $issueKey to /tmp/crontab" >> /opt/jira-cron/jiraMakeCrontab.log
                done
                echo "" >> /tmp/crontab
        fi
	rm /tmp/value 2> /dev/null
done
rm /tmp/value 2> /dev/null

#Replace JIRA Users crontab
su - jira -c "crontab /tmp/crontab"

After running the script the /var/spool/cron/crontabs/JIRA (on Ubuntu LTS) should look like this:

 

jiraTransitionIssue.sh
#Crontabs for SUPPORT-513
* * 1 * * /opt/jira-cron/jiraTransitionIssue.sh SUPPORT-513 >> /opt/jira-cron/jiraTransitionIssue.log 2>&1

#Crontabs for HOMEPAGE-3846
0 5 2 * * /opt/jira-cron/jiraTransitionIssue.sh HOMEPAGE-3846 >> /opt/jira-cron/jiraTransitionIssue.log 2>&1

#Crontabs for HOMEPAGE-2933
0 0 1 * * /opt/jira-cron/jiraTransitionIssue.sh HOMEPAGE-2933 >> /opt/jira-cron/jiraTransitionIssue.log 2>&1

#Crontabs for PROJECTTOOLS-2467
0 5 5 * * /opt/jira-cron/jiraTransitionIssue.sh PROJECTTOOLS-2467 >> /opt/jira-cron/jiraTransitionIssue.log 2>&1

 

 

Make the Transition Script

#!/bin/bash
# CLI Reference: https://bobswift.atlassian.net/wiki/display/JCLI/JIRA+Command+Line+Interface

IFS=$(echo -en "\n\b")
CHAR="'"
OKSTATUS="Frozen (10003)"

issueKey=$1
if [ $issueKey != '' ]
then
        StatusFieldValue=`/opt/atlassian-cli/jira.sh --action GetFieldValue --issue "$issueKey" --field "Status" --file /tmp/value`
        if [ -f /tmp/value ]
        then
                Status=`cat /tmp/value | sed 's/'"$CHAR"'//g'`
                if [ $Status == $OKSTATUS ]
                then
                        # Transition issue
                        /opt/atlassian-cli/jira.sh --action progressIssue --issue "$issueKey" --step "Initiate" >> /opt/jira-cron/jiraTransitionIssue.log 2>&1
                else
                        echo "Issue $issueKey was not in $OKSTATUS State, but in $Status"
                fi
        fi
else
	echo "No IssueKey as parameter"
fi

 

Alle Issues er lavet om.

  • Ingen etiketter