のツールバーをバックアップする



Google Appsのスクリプトは驚くべきものです.任意のサーバーを設定せずに、私たちはcollecting form responses、電子メールマーケティングキャンペーンなどの多くのことができますが、開発者として、我々はGitHubのようなバージョン管理システムになるように我々のコードが好きです.このブログでは、Githubアクションを自動的にバックアップし、Google AppsのスクリプトをGithubに設定する方法について説明します.

内容

  • 前提条件
  • 留め金をインストールする

  • 新規なリポジトリ
  • を作成する

  • 重要なファイル
  • を加える

  • 243879182ギタブアクションを設定する
    Githubアクション秘密
  • を加える
  • の結果
  • 必要条件


    開始する前に、次のように設定したと仮定します.
    Google Appsスクリプトプロジェクト
  • ギタブアカウント
  • インストール


    Clasp Googleツールは、ローカルのアプリケーションスクリプトプロジェクトを開発することです.これは、コマンドラインAppsのスクリプトプロジェクトのための短いです.留め金の設定は簡単です.Googleでこのamazing guideに従って、Githubのアクションを設定しながら、後で使用されるログイン資格情報を取得します.
    ログインに成功したら、次のコマンドを使用して資格情報ファイルの内容を取得します.
    cat ~/.clasprc.json
    

    新しいリポジトリの作成


    要件に応じて、Githubに新しいパブリック/プライベートリポジトリを作成します.新しいリポジトリを作成したら、Aを追加します.Gitignoreファイルには次の内容があります.
    .*.json
    
    これは、我々の資格情報ファイルが倉庫にコミットされるのを防ぎます.

    重要なファイルの追加


    現在、倉庫に若干の新しいファイルを加える時間です.
    )設定.sh
    このスクリプトは、私たちが後に設定されるGithubアクションの秘密から既にログインしている資格情報を使用することによって、再びログインするのを防ぎます.次のbashコードをファイルに追加します.
    #!/bin/sh
    
    LOGIN=$(cat <<-END
        {
            "token": {
                "access_token": "$ACCESS_TOKEN",
                "refresh_token": "$REFRESH_TOKEN",
                "scope": "https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/service.management https://www.googleapis.com/auth/script.deployments https://www.googleapis.com/auth/logging.read https://www.googleapis.com/auth/script.webapp.deploy https://www.googleapis.com/auth/userinfo.profile openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/script.projects https://www.googleapis.com/auth/drive.metadata.readonly",
                "token_type": "Bearer",
                "id_token": "$ID_TOKEN",
                "expiry_date": 1595752666211
            },
            "oauth2ClientSettings": {
                "clientId": "$CLIENT_ID",
                "clientSecret": "$CLIENT_SECRET",
                "redirectUri": "http://localhost"
            },
            "isLocalCreds": false
        }
    END
    )
    
    echo $LOGIN > ~/.clasprc.json
    
    スコープキー値を~//で値を置き換えます.クラスC .JSON
    スクリプト.JSON
    このスクリプトには、Google AppsスクリプトプロジェクトのIDと名前が含まれます.我々は、バックアップ戦略に応じてここに複数のプロジェクトを追加することができます.次のJSONオブジェクトをファイルに追加します.
    [
        {
            "id": "google-apps-script-project-id",
            "name": "google-apps-script-project-name"
        },
        {
            "id": "google-apps-script-project-id",
            "name": "google-apps-script-project-name"
        }
    ]
    
    クローン.sh
    このスクリプトは、CLASPのクローンコマンドを使用して、スクリプトで提供するすべてのスクリプトをダウンロードします.JSONファイル.このスクリプトは、リポジトリでコミットされたすべての前のプロジェクトを削除します.これは、削除されたファイルをgithubに反映する重要なステップです.次のbashコードをファイルに追加します.
    #!/bin/sh
    
    # remove all the pre-existing projects
    rm -r -f *
    
    content=$(cat scripts.json)
    for row in $(echo "${content}" | jq -r '.[] | @base64'); do
        _jq() {
          echo ${row} | base64 --decode | jq -r ${1}
        }
    
        # get name and id for project
        name=$(_jq '.name')
        id=$(_jq '.id')
    
        # create a project directory
        mkdir $name
        cd $name
    
        # clone the project using the clasp
        clasp clone $id
    
        # come out of the directory
        cd ..
    done
    

    Githubアクションの設定


    プロジェクトの最高の部分が来る.Githubアクションを使用してバックアッププロセス全体を自動化します.夜中にcronジョブの構文を使用して実行するスクリプトをスケジュールします.ワークフローは、リポジトリを設定し、ノードをインストールし、クラスプをインストールし、クラスプセットアップを実行し、Google Appsスクリプトをクローン化し、新しい変更が存在するかどうかをチェックし、事前に定義されたコミットメッセージで必要に応じてリポジトリにコミットします.
    name: Backup
    
    on:
      schedule:
        - cron: '0 0 * * *'
    
    jobs:
      backup:
        runs-on: ubuntu-latest
    
        env:
          ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
          REFRESH_TOKEN: ${{ secrets.REFRESH_TOKEN }}
          CLIENT_ID: ${{ secrets.CLIENT_ID }}
          CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
          ID_TOKEN: ${{ secrets.ID_TOKEN }}
          REMOTE_BRANCH: master
    
        steps:
          - name: Setup repository
            uses: actions/checkout@v2
    
          - name: Setup Node
            uses: actions/setup-node@v1
            with:
              node-version: '12'
    
          - name: Install Clasp
            run: npm install -g @google/clasp
    
          - name: Install jq
            run: |-
              sudo apt update -y
              sudo apt install jq -y
    
          - name: Setup Logins
            run: bash setup.sh
    
          - name: Clone Scripts
            run: bash clone.sh
    
          - name: Update Progress
            run: |
              if [$(git status --porcelain=v1 2>/dev/null | wc -l) != "0"] ; then
                git config --global user.email ${GITHUB_ACTOR}@gmail.com
                git config --global user.name ${GITHUB_ACTOR}
                git add .
                git commit -m "github-actions: took backup"
                git push --force https://${GITHUB_ACTOR}:[email protected]/${GITHUB_REPOSITORY}.git HEAD:${REMOTE_BRANCH}
              fi
    

    Githubアクションの秘密を追加する


    私たちはアクションの秘密の値を得ることができます//.クラスC .JSONとそれに応じて追加します.
    アクションを秘密に設定する

    結果


    ハーレイ!私たちは、githubアクションワークフローが00 : 00 UTCで正常に完了するのを見ることができます.
    スケジュールされたアクションワークフローが正常に完了しました
    バックアップが正常に行われたことを確認するためにリポジトリをチェックしましょう.
    バックアップは正常にGoogle Appsのスクリプトの撮影です
    Google Appsのスクリプトプロジェクトは、コミットメッセージGithubアクションでリポジトリにコミットされたことがわかります.このワークフローを使用して、我々は両方のGoogle AppsのスクリプトとGithubに接続することができます.あなたが我々のチームのためにどんな疑いまたは感謝であれば、下記のコメントで知らせてください.