GitHub Universe 2018
先日、サンフランシスコにて「GitHub Universe 2018」が、開催されました。
Github Universeとは、GitHubのコミュニティ登録者約3,100万人の開発者が今後の未来について語ることが出来るイベントとなっており、開発者界隈ではとても人気のあるイベントとなっています。
原文: 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でのソース管理以上の事が可能になるとの事です。
イメージ的には、JenkinsのようなCIとして使えるようになるのかな?
また、AWSやgcloud、Azure、Herokuなどメジャーどころのクラウドサービスに対応しているようですね。

main.workflowファイルで管理
サンプルを見ていると、.githubディレクトリの中にmain.workflowと言うファイルが用意されています。
こちらに処理を記述する事でワークフローが定義出来るようですね。
またマークダウンのようにリアルタイムプレビューでGUIベースで編集することも出来そうですね。

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自身がそれに次ぐ新機能と推している事もあるので、続報に期待しましょう!!
