2024年7月4日木曜日

ansible で git credentials helper を設定する方法

ansible で git credentials helper を設定する方法

概要

git_config というビルトインモジュールがあるのでそれを使った方法を紹介します
今回は ansible を実行したユーザではなく指定のユーザにしてい git config credentials helper を設定する方法を紹介します

環境

  • Ubuntu 22.04
  • ansible 2.16.7

playbook サンプル

- name: Set config credential.helper
  git_config:
    name: credential.helper
    scope: file
    value: store
    file: /home/user01/.gitconfig

- name: Set permissions for /home/user01/.gitconfig
  file:
    path: /home/user01/.gitconfig
    group: user01
    owner: group01
    mode: '644'

ポイント

ポイントは git_config モジュールの scope に file を指定する点です
また file を使って .gitconfig を保存する場所も指定します
こうすることで ansible を実行しているユーザに対して credentials helper を設定するのではなく指定のユーザに対して設定することができます
また .gitconfig を作成したあとでユーザや権限を正しく設定してあげます
そうしないと ansible を実行したユーザの権限で .gitconfig が作成されてしまうので指定のユーザが扱えなくなってしまうためです

最後に

git_config を使って credentials helper を設定する方法を紹介しました
特定のユーザに対して設定したい場合は file を使います

直接 command などを使う方法もありますがこちらを使うほうが良いかなと思います

参考サイト

2024年7月3日水曜日

git で現在のブランチの HEAD のショートリビジョンを取得する方法

git で現在のブランチの HEAD のショートリビジョンを取得する方法
git rev-parse --short HEAD

2024年7月2日火曜日

Google ドライブにファイルをアップロードできないときの対処方法

Google ドライブにファイルをアップロードできないときの対処方法

概要

よくネットワークにつながっていないやらドライブの容量がいっぱいやらありますが基本的にそんなことはないです

環境

  • Google Drive (2024/06/28)

アップロードしたファイルを Google ドキュメントエディタ形式に変換するをオフにする

設定からできます
長いテキストエディタなどは変換できずにアップロードできないようです

2024年7月1日月曜日

Gitlab CI を使って特定のサーバに ssh ログインしてコマンドを実行する方法

Gitlab CI を使って特定のサーバに ssh ログインしてコマンドを実行する方法

概要

Gitlab CI を使って対象のサーバに ssh してデプロイスクリプトなどを実行することができるようになります

環境

  • Ubuntu 22.04
  • Gitlab 16.10.6

ssh サーバの設定

基本的にはパスワードなどは聞かれないように事前に設定しておく必要があります

git credentials

  • git config --global credential.helper store

これで認証情報を保存しておいて毎回パスワードを聞かれないようにしましょう
認証情報は CI から投入しても OK です

docker

  • sudo gpasswd -a user01 docker

デフォルトだとユーザは docker グループに入っていないので sudo 権限が必要です
sudo のパスワードなしを設定しても OK です

ノンパスSSH鍵の作成と登録

Runner から対象のサーバに ssh ログインする際にパスワードを入力することができません
なのでパスワードが設定されていない秘密鍵と公開鍵を使ってログインできるようにします

なお以下で紹介しますが SSH するユーザターゲットホストは 192.168.100.10 とします

  • ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

ここで作成した id_rsa (秘密鍵) を Gitlab の CI の変数として登録します
登録する際の注意としては Protected な変数として登録しないようにしましょう

id_rsa.pub は SSH する対象のサーバ (192.168.100.10) の ~/.ssh/authorized_keys に記載します

CI の設定

Runner の executor は docker を想定しています

以下の例ではリポジトリで管理してる shell/deploy.sh をターゲットホストの /tmp/deploy.sh に配置して実行しています

またターゲットホスト上のシェルに変数を与えたい場合は一度 export してから渡すと ssh 先のマシンにも伝わります

stages:
  - deploy

variables:
  ENV: $ENV
  SSH_PRIVATE_KEY: $SSH_PRIVATE_KEY

deploy:
  stage: deploy
  image: python:alpine3.19
  before_script:
    - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
  script:
    - scp -P 22 "${CI_PROJECT_DIR}/shell/deploy.sh" user01@192.168.100.10:/tmp/deploy.sh
    - ssh -p 22 -tt user01@192.168.100.10 -C "chmod +x /tmp/deploy.sh"
    - export ENV=${ENV}
    - ssh -p 22 -tt user01@192.168.100.10 -C "ENV=${ENV} /tmp/deploy.sh"
  when: manual

最後に

Gitlab CI で ssh する方法を紹介しました
パスワードなどの入力が必要な場合は入力させないような対応が必要です

参考サイト