0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Github ActionsでGKEバージョンアップの自動PR

0
Last updated at Posted at 2019-10-03

はじめに

Github Actionsにはcron scheduleがあるので、定期実行ジョブを回せるなと思ったので、標記作ることにしました。

バージョンあげたPRを飛ばしてくれる系はdependabot的なものがあるんですが、k8sバージョンアップはサポートしてなかったりするので、作りました。

誰か知ってたら教えてください。

結論

解説

cronするところ

こんな感じ。特筆するとこはなし。

name: versionup

on:
  schedule:
    - cron: '0 */1 * * *'

最新のGKEバージョンを取りに行くところ

GKEバージョンをgcloud container get-server-configで取得しに行きます。
そのため、先にgcloudをインストールします。

CirclCIみたいにセットアップされたコンテナ上でCIできないので、必要なツールは都度インストールする必要があります。めんど〜〜、CI時間伸びる〜〜

    - name: Install Gcloud
      run: |
        export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"
        echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
        curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
        sudo apt-get update && sudo apt-get install google-cloud-sdk

認証情報もsecretsから引っ張っていきます。ここら辺もCircleCIみたいにcontext使えればなおよし。
ここでは、terraformを使うことを想定してるので、terraform.tfvarsをsedで書き換えます。
最終的にgit diffで差分無かったらスルーします。

    - name: Get latest GKE version string and modify version
      env:
        GOOGLE_APPLICATION_CREDENTIALS_JSON: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS_JSON }}
        GOOGLE_APPLICATION_CREDENTIALS: ./google_application_credentials.json
        GOOGLE_PROJECT_ID: junpayment
      run: |
        echo ${GOOGLE_APPLICATION_CREDENTIALS_JSON} > ${GOOGLE_APPLICATION_CREDENTIALS}
        gcloud auth activate-service-account --key-file=${GOOGLE_APPLICATION_CREDENTIALS}
        gcloud config set project ${GOOGLE_PROJECT_ID}
        export JSON=`gcloud container get-server-config --region asia-northeast1 --format json`
        export NEW_MASTER_VERSION=`echo ${JSON} | jq -r '.validMasterVersions | .[0]'`
        export NEW_NODE_VERSION=`echo ${JSON} | jq -r '.validNodeVersions | .[0]'`
        echo ${NEW_MASTER_VERSION} > .new_master_version
        echo ${NEW_NODE_VERSION} > .new_node_version
        sed -i -r "s/^(master_version\s*=\s*)\".*\"/\1\"${NEW_MASTER_VERSION}\"/" terraform.tfvars
        sed -i -r "s/^(node_version\s*=\s*)\".*\"/\1\"${NEW_NODE_VERSION}\"/" terraform.tfvars
        export DIFF=`git diff`
        test ${#DIFF} -gt 0 ; exit 0

PRを作る

PRはhubコマンドでやります。
hubの公式githubのreleaseからバイナリを引っ張ります。
今回のvmはubuntu-latestなのでlinux版を引っ張ってきます。

    - name: Install hub
      run: |
        wget https://github.com/github/hub/releases/download/v2.12.8/hub-linux-amd64-2.12.8.tgz
        tar -xvf hub-linux-amd64-2.12.8.tgz
        cd hub-linux-amd64-2.12.8
        sudo cp -a bin/hub /usr/local/bin/

ブランチ作ってcommitしてpushをします。
イケてないなと思ったのが、ユーザ/パスを指定しなければいけなかったところです。

githubのCIサービスなんだから、CI動かしたユーザ権限で何もせずにgitコマンドを動かさせてくれたら嬉しかったです。

    - name: Make a PR
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        GITHUB_USERNAME: ${{ secrets.GITHUB_USERNAME }}
        GITHUB_EMAIL: ${{ secrets.GITHUB_EMAIL }}
      run: |
        export NEW_MASTER_VERSION=`cat .new_master_version`
        export NEW_NODE_VERSION=`cat .new_node_version`

        git fetch
        git branch -r | grep update_${NEW_MASTER_VERSION}_${NEW_NODE_VERSION} && exit 0

        git checkout -b feature/update_${NEW_MASTER_VERSION}_${NEW_NODE_VERSION}
        git add terraform.tfvars

        git config --global user.name ${GITHUB_USERNAME}
        git config --global user.email ${GITHUB_EMAIL}
        git commit --amend --reset-author -m "update_${NEW_MASTER_VERSION}_${NEW_NODE_VERSION}"

        git remote rm origin
        git remote add origin https://${GITHUB_USERNAME}:${GITHUB_TOKEN}@github.com/${GITHUB_USERNAME}/cicdversionuplabo.git
        git push -u origin feature/update_${NEW_MASTER_VERSION}_${NEW_NODE_VERSION}

        hub pull-request -m "update_${NEW_MASTER_VERSION}_${NEW_NODE_VERSION}"

以上

0
0
4

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?