1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitlabのIssueについてansibleで目的のIssueに絞って外部出力してみた

Posted at

背景

Gitlabで管理しているIssueについて特定の条件を満たすIssueだけを取得したいと思い、
実装してみたため、備忘録的にまとめておきます。

利用したもの

  • Ansible
  • GitLab

プログラム

汎用的なソースコードを以下に記載します。

  • GitLabからIssueを取得する基本的なplaybook
main.yml
---
- name: Notification of GitLab Issue
  hosts: localhost
  vars:
    gitlab_api_token: "GitLabのAPIトークン"
    gitlab_project_id: "GitLabのIssue作成先プロジェクトID"
    gitlab_server: "GitLabサーバIPアドレス"
    per_page : 1000 #Issue取得の上限

  tasks:
    - name: Get GitLab Issue
      block:
        - name: Issueを取得
          uri:
            url: "https://{{ gitlab_server }}/api/v4/projects/{{ gitlab_project_id }}/issues?" #Issueを絞るときにはこのurlの記述を工夫する
            method: GET
            headers:
              PRIVATE-TOKEN: "{{ gitlab_api_token }}"
            status_code: 200
            validate_certs: no
          register: pickup_issues

        - name: Parse GitLab Issues
          set_fact:
            issue_count: "{{ pickup_issues.json | length }}"
            issues: "{{ pickup_issues.json }}"
          when: pickup_issues.status == 200

        - name: Create output Message
          set_fact:
            issues_table: |
              {% for issue in issues %}
              {{ "---------------------------------------------------------------------------------------------" }}
              {{ "[作成日時]:" + issue.created_at | regex_replace('T.*', '') }}
              {{ "[タイトル]" + issue.title }} 
              {{ "[リンク]" + issue.web_url }} 
              {% endfor %}


  • 対象を絞るときには上記ソースコードのurlを以下のような記述にすることで対象を絞ることが可能です

    • 特定の期間に作成されたIssue
      期間の始まり:start_date: "2023-06-01"
      期間の終わり:end_date_detail: "2023-06-30"

      url: "https://{{ gitlab_server }}/api/v4/projects/{{ gitlab_project_id }}/issues?created_after={{ start_date }}&created_before={{ end_date }}&per_page={{ per_page }}"
      
    • OPENされているIssue

      url: "https://{{ gitlab_server }}/api/v4/projects/{{ gitlab_project_id }}/issues?state=opened&per_page={{ per_page }}"
      
    • lableがついていないIssue

      url: "https://{{ gitlab_server }}/api/v4/projects/{{ gitlab_project_id }}/issues?labels=none&per_page={{ per_page }}"
      

本件について躓いた点としては、明らかに20を超える対象Issueが存在する場合に、なぜか出力されるIssueの数が20を上限にそれ以上表示されない現象が発生したため、調査したところgitLabのデフォルトの1ページあたりのIssue表示数のデフォルトが20であり、これに起因していたことがわかりました。
これを是正するために以下ポイントに注意が必要です。

urlにてパラメータper_pageを想定されるIssueの出力よりある程度大きな値で指定しておく

終わりに

前回はgitLabのIssue作成について記事を記載しましたが、今回は記事の抽出について実施してみました。
抽出したIssueについて出力だけでなく処理を記述すれば、統計なども自動的に実施できるので、今後も応用して色々やってみようと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?