0
0

More than 3 years have passed since last update.

AnsibleでGithubのプライベートリポジトリを取得する方法

Last updated at Posted at 2020-11-02

クラウド上にIaC(Infrastructure as Code)、TerraformとAnsibleを利用してネットワークとインスタンスを自動構築させる中で、Githubプライベートリポジトリのコードを取得する必要があり、以下の方法で実現した。どなたかの参考になれば幸いです。

最終版のgistはここです。

前提条件

以下がインストール済であること

  • Ansible 2.7.7
  • Git 1.2.20

テスト環境

  • Debian 10 (GCEのVMインスタンス)
  • Mac

Github Access Tokenの取得

  1. Settings -> Developer Settings -> Personal access tokensへ移動
  2. Generate new tokenで新規鍵を生成
  3. 表示されるAccess Tokenを書き留める。作成された直後の一度しか表示されない。書き留め忘れた場合は再生成してください。

ansible-pullを利用して取得

最終版のgistはここです。ファイルが2つありますが、ここではコードの詳細な説明をしていきます。

cmd.sh
ansible-pull -e 'ansible_python_interpreter=/usr/bin/python3' \
-U https://<上記で取得したGithub Access Token>:x-oauth-basic@github.com/<組織名>/<プライベートリポジトリ名> \
-d /tmp/<プライベートリポジトリ名> ./local.yml
  • ansible_python_interpreterですが、環境によってPythonがインストールされるディレクトリが異なるかと思います。Ansibleはデフォルトだと/usr/bin/phthonを見に行ってしまうので、何も指定しないと、実行時にエラーが表示されることがあります。必要であればこのように利用するバイナリの場所を指定してあげます。
  • Github Access Tokenを指定する部分は、セキュリティ的によろしくないので、直にトークンを書き込むのではなく、環境変数などに詰めて渡してください。
  • 組織名のところですが、組織でない場合、ここは個人名でもいけるのかは試していません。
  • -d /tmp/<プライベートリポジトリ名>の部分は、出力先の任意のディレクトリを指定してあげてください。上の例では便宜上、tmpディレクトリの下に展開しているだけです。
local.yml
---
- hosts: all
  vars:
    ansible_python_interpreter: /usr/bin/python3
  become: true
  become_method: sudo
  • ansible-pullは何かしらAnsibleのプレイブックが必要なので、ここではダミーとしてlocal.ymlを渡しています。中身は何も実行しないのであればどんな記述でも構いません。

おまけ

Ansible, Terraformで上記のコードを利用する場合、値を環境変数に設定する必要があるとおもうが、参考として取得方法を以下にメモしておきます。

Ansibleでの環境変数取得方法

ansible_envで値が取れる。例えばimage_idという環境変数が設定されていれば、ansible_env.image_id として取得できる。
公式資料 : Module Index

Terraformでの環境変数取得方法

TF_VAR_名前、例えばTF_VAR_image_idというように設定すると、環境変数として、*.tfファイル内部でvar.image_idという形で取得できる。
公式資料 : 環境変数の設定方法

0
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
0
0