gasを管理するclaspのdocker環境を作成する


gasを管理するclaspが、nodeのversionを高く求めてくるようになってきたので、docker環境でclaspが使えるようにする。個人的にclasp cloneとか、pullができれば良いので、gitなどもホストで管理する考えです。
ため、ファイルのオーナーが、ホストのユーザと同じでないと管理がめんどくさいので、パスワードファイルを共用するようにしました
(参考)
https://qiita.com/yohm/items/047b2e68d008ebb0f001

Dockerfile
nodeは、node:slimイメージでも問題なさそう

FROM node:slim
RUN npm i @google/clasp -g

docker-compose.yml
homeフォルダは、事前に作成しておく(フォルダのオーナーをあわせるため、dockerが作成するとrootになる)
clasp(google)のログインのcrednetial情報が、ユーザのhome直下に作成するためhomeフォルダをマウントしておくことにした。

version: '3'
services:
  clasp:
    image: clasp:sample
    build: .
    tty: true
    volumes:
      - "./home/:${HOME}"
      - /etc/passwd:/etc/passwd:ro
      - /etc/group:/etc/group:ro
    working_dir: ${HOME}

事前状態。

[ec2-user@ip-192-168-100-10 mailform-gas]$ mkdir home
[ec2-user@ip-192-168-100-10 mailform-gas]$ ls -al
合計 12
drwxrwxr-x 4 ec2-user ec2-user  92  9月 30 07:45 .
drwxrwxr-x 3 ec2-user ec2-user  35  9月 29 12:58 ..
drwxrwxr-x 8 ec2-user ec2-user 185  9月 30 07:45 .git
-rw-rw-r-- 1 ec2-user ec2-user 624  9月 29 12:54 .gitignore
-rw-rw-r-- 1 ec2-user ec2-user  42  9月 29 13:33 Dockerfile
-rw-rw-r-- 1 ec2-user ec2-user 222  9月 30 07:42 docker-compose.yml
drwxrwxr-x 2 ec2-user ec2-user 148  9月 30 07:44 home

homeフォルダが、使用するユーザであることを確認する。

docker-compose run 開発するしかないので、使用後はrmする。-u $(id -u $usr)で、ホストと同じユーザでdockerにログインする。

[ec2-user@ip-192-168-100-10 mailform-gas]$ docker-compose run --rm -u $(id -u $usr) clasp /bin/bash
Creating mailform-gas_clasp_run ... done
ec2-user@6e80e0300571:~$
ec2-user@6e80e0300571:~$
ec2-user@6e80e0300571:~$ ls
ec2-user@6e80e0300571:~$ ls -atrl
total 8
-rw------- 1 ec2-user ec2-user 2280 Sep 29 22:39 .clasprc.json
-rw------- 1 ec2-user ec2-user  102 Sep 29 22:40 .bash_history
drwxrwxr-x 2 ec2-user ec2-user   48 Sep 29 22:40 .
drwxr-xr-x 1 root     root       22 Sep 29 22:42 ..

clasp loginは、--no-localhostオプションで、リダイレクトせずにすむようにする。
(参考)
https://qiita.com/ONO_Keyboard/items/5d9f9bac0e52e9c0cacf


ec2-user@6e80e0300571:~$ clasp login --no-localhost
Logging in globally…
🔑 Authorize clasp by visiting this url:
https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.deployments%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.projects%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fscript.webapp.deploy%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.file%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fservice.management%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Flogging.read%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&response_type=code&client_id=1072944905499-vm2v2i5dvn0a0d2o4ca36i1vge8cvbn0.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob

Enter the code from that page here: 4/1AX4XfWhGESciC0x-SYqeR3JudXAiWpCkSiyj-Ezw1NYcQfpnS6R2RbOM-7g
Authorization successful.

Default credentials saved to: /home/ec2-user/.clasprc.json.
ec2-user@6e80e0300571:~$ clasp clone 1vGNV1qAZeVhD5PgOwktgnKQkGYSrMROeCpcdI3NIipLlkTyxCk7yKAYj
Warning: files in subfolder are not accounted for unless you set a '/home/ec2-user/.claspignore' file.
Cloned 4 files.
└─ /home/ec2-user/appsscript.json
└─ /home/ec2-user/awslibrary.js
└─ /home/ec2-user/chatwork.js
└─ /home/ec2-user/execute.js
Not ignored files:
└─ /home/ec2-user/appsscript.json
└─ /home/ec2-user/awslibrary.js
└─ /home/ec2-user/chatwork.js
└─ /home/ec2-user/execute.js

Ignored files:
└─ /home/ec2-user/.bash_history
└─ /home/ec2-user/.clasp.json
└─ /home/ec2-user/.clasprc.json


clasp clone に成功。
ホストの状態

ec2-user@6e80e0300571:~$ exit
[ec2-user@ip-192-168-100-10 mailform-gas]$ cd home
[ec2-user@ip-192-168-100-10 home]$ ls -al
合計 44
drwxrwxr-x 2 ec2-user ec2-user   148  9月 30 07:44 .
drwxrwxr-x 4 ec2-user ec2-user    92  9月 30 07:45 ..
-rw------- 1 ec2-user ec2-user   272  9月 30 07:44 .bash_history
-rw------- 1 ec2-user ec2-user   100  9月 30 07:44 .clasp.json
-rw------- 1 ec2-user ec2-user  2280  9月 30 07:44 .clasprc.json
-rw-r--r-- 1 ec2-user ec2-user   115  9月 30 07:44 appsscript.json
-rw-r--r-- 1 ec2-user ec2-user    29  9月 30 07:44 awslibrary.js
-rw-r--r-- 1 ec2-user ec2-user   400  9月 30 07:44 chatwork.js
-rw-r--r-- 1 ec2-user ec2-user 19869  9月 30 07:44 execute.js
[ec2-user@ip-192-168-100-10 home]$

gitもする。とくに問題なく

[ec2-user@ip-192-168-100-10 mailform-gas]$ git commit
[master 9cbc04d] initial commit
 Committer: EC2 Default User <[email protected]>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly. Run the
following command and follow the instructions in your editor to edit
your configuration file:

    git config --global --edit

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

 9 files changed, 343 insertions(+)
 create mode 100644 Dockerfile
 create mode 100644 docker-compose.yml
 create mode 100644 home/.bash_history
 create mode 100644 home/.clasp.json
 create mode 100644 home/.clasprc.json
 create mode 100644 home/appsscript.json
 create mode 100644 home/awslibrary.js
 create mode 100644 home/chatwork.js
 create mode 100644 home/execute.js
[ec2-user@ip-192-168-100-10 mailform-gas]$ git push
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 2 threads
Compressing objects: 100% (10/10), done.
Writing objects: 100% (12/12), 10.28 KiB | 3.42 MiB/s, done.
Total 12 (delta 0), reused 0 (delta 0)
To bitbucket.org:mailform-gas.git
   1689ce4..9cbc04d  master -> master