Featured image of post GitHubの新機能「GitHub Actions」が発表されたのでまとめ

GitHubの新機能「GitHub Actions」が発表されたのでまとめ

GitHub Universe 2018でPull Request以来の新機能「GitHub Actions」が発表されました。GitHub上の操作をトリガーにDockerコンテナを連携させてビルド・テスト・デプロイを自動化でき、main.workflowファイルで管理します♪

1109文字

GitHub Universe 2018

先日、サンフランシスコにて「GitHub Universe 2018」が、開催されました。

Github Universeとは、GitHubのコミュニティ登録者約3,100万人の開発者が今後の未来について語ることが出来るイベントとなっており、開発者界隈ではとても人気のあるイベントとなっています。

Github Universe

原文: GitHub Universe is a conference for the builders, planners, and leaders defining the future of software

訳: GitHub Universeは、ソフトウェアの将来を定義するビルダー、プランナー、リーダーのためのカンファレンスです

Pull Request以来の新機能

その中で、Githubはは「Pull Request機能以来の強靭な新機能」として、「GitHub Actions」を発表しました。

GitHub Actions

What’s?

Github Actionsとは、Github上で行われる各種操作をトリガーにDockerコンテナに対する操作を実行する事が出来る機能となっています。

これにより、ビルド/テスト/デプロイの自動化などGithubでのソース管理以上の事が可能になるとの事です。

Github Actions

イメージ的には、JenkinsのようなCIとして使えるようになるのかな?

また、AWSやgcloud、Azure、Herokuなどメジャーどころのクラウドサービスに対応しているようですね。

main.workflowファイルで管理

サンプルを見ていると、.githubディレクトリの中にmain.workflowと言うファイルが用意されています。

こちらに処理を記述する事でワークフローが定義出来るようですね。

Github Actions

またマークダウンのようにリアルタイムプレビューでGUIベースで編集することも出来そうですね。

main.workflowファイル内はこんな感じでした。

https://github.com/actions/example-aws/blob/master/.github/main.workflow
workflow "Build and Deploy" {
  on = "push"
  resolves = ["List Public IP"]
}

# Build

action "Build Docker image" {
  uses = "actions/docker/cli@master"
  args = ["build", "-t", "aws-example", "."]
}

# Deploy Filter
action "Deploy branch filter" {
  needs = ["Push image to ECR"]
  uses = "actions/bin/filter@master"
  args = "branch master"
}

# AWS

action "Login to ECR" {
  uses = "actions/aws/cli@master"
  secrets = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"]
  env = {
    AWS_DEFAULT_REGION = "us-west-2"
  }
  args = "ecr get-login --no-include-email --region $AWS_DEFAULT_REGION | sh"
}

action "Tag image for ECR" {
  needs = ["Build Docker image"]
  uses = "actions/docker/tag@master"
  env = {
    CONTAINER_REGISTRY_PATH = "377117578606.dkr.ecr.us-west-2.amazonaws.com"
    IMAGE_NAME = "aws-example"
  }
  args = ["$IMAGE_NAME", "$CONTAINER_REGISTRY_PATH/$IMAGE_NAME"]
}

action "Push image to ECR" {
  needs = ["Login to ECR", "Tag image for ECR"]
  uses = "actions/docker/cli@master"
  env = {
    CONTAINER_REGISTRY_PATH = "377117578606.dkr.ecr.us-west-2.amazonaws.com"
    IMAGE_NAME = "aws-example"
  }
  args = ["push", "$CONTAINER_REGISTRY_PATH/$IMAGE_NAME"]
}

action "Store Kube Credentials" {
  needs = ["Push image to ECR"]
  uses = "actions/aws/kubectl@master"
  secrets = ["KUBE_CONFIG_DATA"]
}

action "Configure Kube Credentials" {
  needs = ["Login to ECR"]
  uses = "actions/aws/cli@master"
  env = {
    CLUSTER_NAME = "devel2"
    AWS_DEFAULT_REGION = "us-west-2"
  }
  secrets = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"]
  args = "eks update-kubeconfig --name $CLUSTER_NAME --region $AWS_DEFAULT_REGION"
}

# Example Local Action to use `aws-iam-authenticator`
action "Deploy to EKS" {
  needs = ["Store Kube Credentials", "Deploy branch filter"]
  # ["Configure Kube Credentials"]
  uses = "./.github/actions/eks-kubectl"
  runs = "sh -l -c"
  args = ["SHORT_REF=$(echo $GITHUB_SHA | head -c7) && cat $GITHUB_WORKSPACE/config.yml | sed 's/TAG/'\"$SHORT_REF\"'/' | kubectl apply -f - "]
  secrets = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"]
}

action "Verify EKS deployment" {
  needs = [
    "Push image to ECR",
    "Deploy to EKS",
  ]
  # :point_down: use this for self-contained kubectl config credentials
  #uses = "docker://gcr.io/cloud-builders/kubectl"
  uses = "./.github/actions/eks-kubectl"
  args = ["rollout status deployment/aws-example-octodex"]
  secrets = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"]
}

action "List Public IP" {
  needs = "Verify EKS deployment"
  uses = "./.github/actions/eks-kubectl"
  args = ["get services -o wide"]
  secrets = ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"]
}

スクリプト形式なので分かりやすいですね!!

終わりに

まだ発表されたばかりなので、詳細はこれから明らかになっていくと思いますが、ぱっと見Githubの利便性が上がりそうな新機能でした。

Pull Request機能は革命的な機能でしたが、Github自身がそれに次ぐ新機能と推している事もあるので、続報に期待しましょう!!