Ich möchte hier mal zwei Wege aufzeigen um per Ansible
ein JIRA-Ticket zu erstellen bzw. zu bearbeiten.
1.) Das JIRA-Modul
In Ansible
gibt es direkt ein entsprechendes JIRA-Modul.
Um ein Ticket zu erstellen kann man den in der Dokumentation dargestellten Task verwenden:
- name: Create an issue
jira:
uri: '{{ server }}'
username: '{{ user }}'
password: '{{ pass }}'
project: ANS
operation: create
summary: Example Issue
description: Created using Ansible
issuetype: Task
register: issue
Die gerade erstellte Ticketnummer findet sich nun in der Ansible
-Variable {{ issue.meta.key }}
.
Diese kann gleich verwendet werden um z.B. Kommentare einzufügen:
- name: Comment on issue
jira:
uri: '{{ server }}'
username: '{{ user }}'
password: '{{ pass }}'
issue: '{{ issue.meta.key }}'
operation: comment
comment: A comment added by Ansible
Im jira
Modul lassen sich per args:
weitere field
Elemente beeinflussen.
Beispielsweise lassen sich Customfelder befüllen:
...
args:
fields:
customfield_11952: "TICKET-123"
Was ich persönlich damit noch nicht realisieren konnte war das erstellen mit vorausgefülltem components
Element.
Deshalb zeige ich hier noch einen zweiten Weg…
2.) Ansprechen der REST-API
JIRA bietet eine REST-API an um z.B. Tickets zu erstellen.
Um nun genau dies zu tun baue ich mir per Template in ansible
einen json
Request welcher per POST
Request an die JIRA-REST-API geleitet wird.
Erstellen des Templates
Sofern noch nicht vorhanden, erstellen wir im Verzeichnis, indem auch das Ansible-Playbook liegt, einen Ordner template
.
In diesem Ordner legt man nun das Jinja2-Template für den json
Request an.
Hierbei können bei Bedarf auch Ansible-Variablen verwendet werden.
Beispiel:
issue.json.j2
{
"fields": {
"project":
{
"key": "TICKET"
},
"summary": "{{ ticket_titel }}",
"description": "{{ ticket_beschreibung }}",
"issuetype": {
"name": "ToDo"
},
"components": [{"name":"Techgoat Team"}],
"assignee": {"name":"rasputin"},
"customfield_11952": "TICKET-123"
}
}
Der Ansible-Task
Mit dem folgenden Task wird auf eine festgelegt URL, über welche die JIRA_REST_API ansprechbar ist, dass ausgefüllte json
als POST
Request gesendet.
- name: "Erstelle Ticket für das Deployment von \"{{ service_name }}\""
uri:
url: https://jira.meine.url/rest/api/latest/issue/
method: POST
user: "{{ jira_username }}"
password: "{{ jira_password }}"
force_basic_auth: yes
status_code: 201
body_format: json
body: "{{ lookup('template','./template/issue.json.j2') }}"
register: issue
Hier wird ein bestimmter lookup für Templates verwendet.
Die neu erstellte Ticketnummer findet sich nun in der Variable {{ issue.json.key }}
.