JIRA-Ticket per Ansible erstellen

Datum

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 jiraModul lassen sich per args: weitere fieldElemente 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 componentsElement.

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 jsonRequest welcher per POSTRequest 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 jsonRequest 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 POSTRequest 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 }}.

Autor
Kategorien Automatisierung, Ansible

PRTG Map