GitHub Actions を試してみる

# はじめに
GitHub Actions を利用して CI/CD を考えてみるきっかけの学習をしてみたのでメモを残す


# 使ってみる
GitHub のページにログインしメニューをみると「Actions」と言うのがあるのでクリックをすると、ワークフローを作成するページが出てくる


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304109/567b797f-0a8d-531d-b7e2-52fa01c160f5.png)

この画面で、「set up workflow yourself」のリンクをクリックすると、下記のワークフローの記載を行う画面が表示される。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304109/0cabe7e4-d9e2-7f48-96e2-a5d79e59a778.png)

デフォルトでは、以下のような入力となっている。

```yaml
# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      # Runs a single command using the runners shell
      - name: Run a one-line script
        run: echo Hello, world!

      # Runs a set of commands using the runners shell
      - name: Run a multi-line script
        run: |
          echo Add other actions to build,
          echo test, and deploy your project.

```

# ワークフローの設定ファイル

master ブランチに push , pull-request されたらその内容を slack のチャネルに送信する
※）いろいろ試している

- 「runs-on」で動作環境を指定
    - ubuntu-latest, ubuntu-18.04, または ubuntu-16.04
    - windows-latest, windows-2019, または windows-2016
    - macOS-latest または macOS-10.14
- 「step」のところでいろいろやる
    - 「uses」で「source」ディレクトリにチェックアウト (チェックアウトするのは master)
    - それぞれの「name」で以下のことをする 
        - 「echo Hello, world!」と表示する (GitHub Actions のコマンドラインに表示)
        - 「system-test」ディレクトリを作成
        - チェックアウトした「source」フォルダを tarball で圧縮
        - 「test-upload」を作成しつつ、「system-test」ディレクトリへ tarball を展開
        - 「actions/upload-artifact@v2」で作成した成果物を「Actions/product」以下に保存する。そして、GitHub のログを収集し、commitログと共に最後の10行を slack に送信する。
          
 
```yaml
# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]


env:
  HOOK_URL: ＜WEBフックの内容 (https://hooks.slack.com/services/xxxxxxxxxx) ＞
  REPO_NAME: ＜対象のリポジトリ名＞

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2
        with:
          path: source

      # Runs a single command using the runners shell
      - name: Run a one-line script
        run: echo Hello, world!

      - name: Copy artifact
        run: mkdir -p system-test

      - name:  make tarball
        run: tar -zcvf source.tar.gz -C source/aaaaa  .

      - name: Copy artifact
        run: mkdir -p test-upload && cp -fr  source.tar.gz system-test

      - name: Archive production artifacts
        uses: actions/upload-artifact@v2
        with:
          name: product 
          path: system-test

      # Runs a set of commands using the runners shell
      - name: Run a multi-line script
        run: | 
          cd source
          git log --numstat -m -1 --date=iso --pretty='[%ad] %h %an : %s' > ../gitlog.txt
          cd ..
          cat gitlog.txt
          curl -X POST --data-urlencode "payload={\"username\": \"github_action_bot\", \"text\": \"*${REPO_NAME} masterブランチが更新されました。 `cat gitlog.txt|head` *\n \", \"icon_emoji\": \":github_icon:\"}" ${HOOK_URL}
```

保存したものは「Actions」をクリックすると出てくる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304109/aea73ca9-4945-1f1c-7745-2d94704ed075.png)


「artifact」にある「product」というのが保存したファイル(90日間保存されているらしい)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304109/7427b891-e9ca-97b6-1015-c32db880ce11.png)