2018/12/21
SeleniumでJiraのセットアップを自動化してみる大野 智之Tomoyuki Ohno
このエントリーは、 Atlassian(JIRA , Confluence, Trello, Bitbucket)のTips Advent Calendar 2018 – Qiitaの21日目です
皆さんはセットアップの自動化は好きでしょうか?私は好きです。
さて、仕事柄Jiraのインストールやセットアップを何度も行うことがありますが、Jiraのセットアップは毎回手間に感じることがあります。
そこで、今回はJiraのセットアップをSeleniumで自動化してみることにしました。
Seleniumは、Webブラウザの自動化ツールです。
ChromeやFirefox,Edge,Internet Explorer,Safari等のWebブラウザの操作を自動化することができます。
自動化の処理は、任意の言語で記述することができます。対応言語は、こちらで確認することができます。
Jiraの環境構築には、大まかに次のような作業があります。
この中でSeleniumで自動化が可能なものは、「アプリケーションのセットアップ」になります。
SeleniumはWebブラウザの操作を自動化するツールであるため、Webブラウザの操作以外の自動化は行えません。
「アプリケーションのセットアップ」以外の自動化が必要となる場合は、別の方法を検討する必要があります。
ここからは、Seleniumによる自動化を実際に行ってみます。言語はPythonを使用しました。
下記のコードは、次の環境にて検証を行いました。
項目 | 設定内容 |
---|---|
OS | Ubuntu 18.04LTS ※Ubuntu 18.04LTS(Ubuntu Server 18.04.1 LTS)のISOイメージはUbuntuのオフィシャルサイトより予めダウンロードしておきます。 ※Seleniumの動作に必要となる設定に関しては、こちら(Qiitaの投稿)を参照ください。 |
メインメモリー | 4096 MB |
プロセッサー数 | 2 |
ストレージ容量 | 100GB |
ネットワーク | アダプター1:NAT |
言語 | Python 3.6(aptよりインストール) |
Jiraバージョン | Jira 7.13.0, Jira7.12.3, JIRA 7.6.9で動作しました |
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys import os import time # ----------------------------------------------------------------------- # 初期設定 # ----------------------------------------------------------------------- # 60秒待機する time.sleep(60) # 初期設定 # ※以下はUbuntu 18.04 LTS + Chromium(aptからインストール)の組み合わせで、Headless実行する場合の設定です # ※実行環境環境に応じて変更が必要となります # ※Headlessで動作させない場合は、add_argumentは全て不要です。 options = Options() options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') options.add_argument('--window-size=1024,768') # ドライバを開く(Chromedriverを読み込む) # ※以下はUbuntu 18.04 LTS + Chromium(aptからインストール)の組み合わせで、Headless実行する場合の設定です # ※実行環境環境に応じて変更が必要となります driver = webdriver.Chrome(executable_path="/usr/lib/chromium-browser/chromedriver", chrome_options=options); # 要素検索の待ち時間を最大600秒とする(600秒を超えた場合はException発生) driver.implicitly_wait(600) # JiraのURLを定義する base_url="https://<JIRAのURL>" setup_url=base_url+"/secure/SetupMode!default.jspa" # データベースの設定を定義する(PostgreSQL) db_host="<DBホストのIPアドレス>" db_port="5432" db_name="<DB名>" db_username="<DBユーザー名>" db_password="<DBパスワード>" # 管理者ユーザーの設定を定義する admin_name="<管理者ユーザー名>" admin_email="<管理者ユーザーのE-Mailアドレス>" admin_password="<管理者ユーザーのパスワード>" # アプリケーションタイトルを定義する app_title="<アプリケーションタイトル>" # アプリケーションのライセンスキーを定義する # ※ライセンスキーは改行を除き、1行でセットする license_key= "<アプリケーションのライセンスキー>" # ----------------------------------------------------------------------- # 処理開始 # ----------------------------------------------------------------------- # セットアップURLを開く try: driver.get(setup_url) except: driver.close() # ----------------------------------------------------------------------- # 1.Jira Setup # ----------------------------------------------------------------------- # Jira Setup画面が表示されるまで待機する while driver.current_url != base_url + '/secure/SetupMode!default.jspa': print("Wait...") # Jira Setup画面の「I'll set it up myself」を選択して、次へ進む driver.find_element_by_xpath("//div[@data-choice-value='classic']").click() # 次画面へ進む driver.find_element_by_xpath("//input[@type='submit']").click() # ----------------------------------------------------------------------- # 2.Database Setup # ----------------------------------------------------------------------- # Database Setup画面が表示されるまで待機する while driver.current_url != base_url + '/secure/SetupDatabase!default.jspa': print("Wait...") # 「My Own Database (recommended for production environments)」を選択する driver.find_element_by_xpath("//input[@id='jira-setup-database-field-database-external']").click() # Database Typeを「PostgreSQL」にする driver.find_element_by_xpath("//input[@id='jira-setup-database-field-database-type-field']").clear() driver.find_element_by_xpath("//input[@id='jira-setup-database-field-database-type-field']").send_keys("PostgreSQL") driver.find_element_by_xpath("//input[@id='jira-setup-database-field-hostname']").send_keys(Keys.ENTER) # Hostnameを入力する driver.find_element_by_xpath("//input[@id='jira-setup-database-field-hostname']").send_keys(db_host) # Usernameを入力する driver.find_element_by_xpath("//input[@id='jira-setup-database-field-username']").send_keys(db_username) # Passwordを入力する driver.find_element_by_xpath("//input[@id='jira-setup-database-field-password']").send_keys(db_password) # Databaseを入力する driver.find_element_by_xpath("//input[@id='jira-setup-database-field-database-name']").send_keys(db_name) # 次画面へ進む driver.find_element_by_xpath("//input[@type='submit']").click() # ----------------------------------------------------------------------- # 3.Set up application properties # ----------------------------------------------------------------------- # Set up application propertiesが表示されるまで待機する while driver.current_url != base_url + '/secure/SetupApplicationProperties!default.jspa': print("Wait...") # Application Titleを入力する driver.find_element_by_xpath("//input[@name='title']").send_keys(app_title) # Base URLを入力する driver.find_element_by_xpath("//input[@name='baseURL']").clear() driver.find_element_by_xpath("//input[@name='baseURL']").send_keys(base_url) # 次画面へ進む driver.find_element_by_xpath("//input[@type='submit']").click() # ----------------------------------------------------------------------- # 4.Specify your license key # ----------------------------------------------------------------------- # Specify your license keyが表示されるまで待機する while driver.current_url != base_url + '/secure/SetupLicense!default.jspa': print("Wait...") # Your License Keyを入力する driver.find_element_by_xpath("//textarea[@id='licenseKey']").send_keys(license_key) # 次画面へ進む driver.find_element_by_xpath("//input[@type='submit']").click() # ----------------------------------------------------------------------- # 5.Set up administrator account # ----------------------------------------------------------------------- # Set up administrator accountが表示されるまで待機する while driver.current_url != base_url + '/secure/SetupAdminAccount!default.jspa': print("Wait...") # Full nameを入力する driver.find_element_by_xpath("//input[@name='fullname']").send_keys(admin_name) # Email Addressを入力する driver.find_element_by_xpath("//input[@name='email']").send_keys(admin_email) # Usernameを入力する driver.find_element_by_xpath("//input[@name='username']").send_keys(admin_name) # PasswordとConfirm Passwordを入力する driver.find_element_by_xpath("//input[@name='password']").send_keys(admin_password) driver.find_element_by_xpath("//input[@name='confirm']").send_keys(admin_password) # 次画面へ進む driver.find_element_by_xpath("//input[@type='submit']").click() # ----------------------------------------------------------------------- # 6.Set up email notifications # ----------------------------------------------------------------------- # Set up email notificationsが表示されるまで待機する while driver.current_url != base_url + '/secure/SetupAdminAccount.jspa': print("Wait...") # 次画面へ進む(デフォルトから変更なし) driver.find_element_by_xpath("//input[@type='submit']").click() # ----------------------------------------------------------------------- # 7.Welcome to Jira # ----------------------------------------------------------------------- # Welcome to Jiraが表示されるまで待機する while driver.current_url != base_url + '/secure/WelcomeToJIRA.jspa': print("Wait...") # ドライバを閉じて処理を終了する driver.close()
上記のコードを実行すると、以下のGIFアニメーションのようにWebブラウザ(Google Chrome)が開き、Jiraのセットアップが行われます。
※以下のGIFアニメーションでは、ビルトインのデータベースを使用する方法に変更しています。
Seleniumを利用することで、面倒なJiraのセットアップ画面を自動化することが出来ました。
なお、今回はJiraを例にしましたが、Confluence等の他のAtlassianアプリケーションも同様にSeleniumで自動化を行うことができます。
自動化にご興味ありましたら、是非お試しください。
ご不明な点がございましたら、お気軽に弊社にお問合せください。
製品について詳しくはこちらをご覧ください。
アトラシアン社ではサポート範囲外となっているサードパーティ製のアドオンをリックソフトのRS標準サポートではサポートします。
リックソフトのRS標準サポートは開発元が提供するサポート以上の価値があります。
ツールを導入しただけでは成功とはいえません。利用者が効果を感じていただくことが大切です。独自で制作した各種ガイドブックはツール活用を促進します。
リックソフトからライセンス購入を頂いたお客様にはガイドブックを無料進呈いたします。
ツール操作の研修だけでなく「ウォータフォール型開発」「アジャイル型開発」のシミュレーション研修も提供。
日本随一の生産性向上にも効果のある研修サービスです。
リックソフトからライセンス購入を頂いたお客様には無料招待や割引特典がございます。