如何尝试用 GitHub Actions 项目编写容器应用?

栏目: 编程工具 · 发布时间: 5年前

内容简介:早前,GitHub 发布 GitHub Actions 项目,开发者可通过 GitHub Actions 存储和搜索代码,部分代码可直接运行。本文尝试使用 AWS Lambda 和 API Gateway 作为基本 API,编写应用程序原型并用名为 gourmet 的容器运行函数,虽然这可能不会让代码易于管理,但至少不需要写 API 或者 Web 应用程序。正如 Lambda 函数在 AWS 中运行一样,Github Actions 是一种强大的管理方式,可直接扩展应用。使用 AWS Lambda,可将代码

早前,GitHub 发布 GitHub Actions 项目,开发者可通过 GitHub Actions 存储和搜索代码,部分代码可直接运行。本文尝试使用 AWS Lambda 和 API Gateway 作为基本 API,编写应用程序原型并用名为 gourmet 的容器运行函数,虽然这可能不会让代码易于管理,但至少不需要写 API 或者 Web 应用程序。

正如 Lambda 函数在 AWS 中运行一样,Github Actions 是一种强大的管理方式,可直接扩展应用。使用 AWS Lambda,可将代码挂接到几乎任何事件上,比如 EC2 创建、终止、DNS 记录更改等,不需要运行服务器,只需加载代码就能正常工作。

本文作者针对此做了一些尝试,但需要 CI 服务器。为了拥有可测试的 kubernetes 集群,作者自建私有存储库,目前因内部有些混乱暂不准备开源。

无论如何,以下是项目文件夹:

复制代码

├──.github
│ ├── actions
│ │ ├── deploy
│ │ │ ├── deploy
│ │ │ └── Dockerfile
│ │ └── dryrun
│ │ ├── Dockerfile
│ │ └── dryrun
│ └── main.workflow
└── kubernetes
├── digitalocean.yaml
├── external-dns.yaml
├── micro.yaml
├── namespaces.yaml
├── nginx.yaml
└── openvpn.yaml

kubernetes 目录包含集群安装的所有东西。对于此存储库的每次新推送,需要检查是否可用命令 kubectl apply -f./kubernetes --dryrun 将其应用于 kubernetes 集群,并且当合并 PR 时,应用更改。

因此,作者在.github/main.workflow 中创办了工作流:

复制代码

## Workflow defines what we wanttocallasetofactions.
##Foreverynewpushcheckifthe changes can be appliedtokubernetes ##usingthe actioncalled: kubectl dryrun
workflow "after a push check if they apply to kubernetes" {
on= "push"
resolves = ["kubectl dryrun"]
}
##Whena PRismergedtriggerthe action: kubectl deploy.Toapply thenewcodetomaster.
workflow "on merge to master deploy on kubernetes" {
on= "pull_request"
resolves = ["kubectl deploy"]
}
## Thisisthe action that checksifthe push can be appliedtokubernetes
action "kubectl dryrun" {
uses = "./.github/actions/dryrun"
secrets = ["KUBECONFIG"]
}
## Thisisthe action that applies the changetokubernetes
action "kubectl deploy" {
uses = "./.github/actions/deploy"
secrets = ["KUBECONFIG"]
}

secrets 是一组环境变量,可从外部设置值。如果帐户启用 GitHub Action,则每个存储库的 Setting 都会有一个名为 secrets 的新标签。

本例,作者将 KUBECONFIG 设置为 kubeconfig 文件的 base64,允许 GitHub Action 授权给 Kubernetes 集群。

两个操作类似,第一个操作位于 .github/actions/dryrun 目录:

复制代码

├──.github
├── actions
└── dryrun
├── Dockerfile
└── dryrun

包含一个 Dockerfile

复制代码

FROMalpine:latest

## The action name displayed by GitHub
LABEL"com.github.actions.name"="kubectl dryrun"
## The description for the action
LABEL"com.github.actions.description"="Check the kubernetes change to apply."
## https://developer.github.com/actions/creating-github-actions/creating-a-docker-container/#supported-feather-icons
LABEL"com.github.actions.icon"="check"
## The color of the action icon
LABEL"com.github.actions.color"="blue"

RUNapk add --no-cache \
bash \
ca-certificates \
curl \
git \
jq

RUNcurl -L -o /usr/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kubectl && \
chmod +x /usr/bin/kubectl && \
kubectl version --client

COPYdryrun /usr/bin/dryrun
CMD["dryrun"]

如上所示,只需要一个 Dockerfile,工作原理和 docker 类似。Cmd dryrun 在这里是复制的 bash 脚本:

复制代码

#!/bin/bash

main(){
echo">>>> Action started"
# Decode thesecretpassed by the actionandpaste theconfigina file.
echo$KUBECONFIG| base64 -d > ./kubeconfig.yaml
echo">>>> kubeconfig created"
# Checkifthe kubernetes directory has change
diff=$(git diff --exit-code HEAD~1 HEAD ./kubernetes)
if[ $? -eq 1 ]; then
echo">>>> Detected a change inside the kubernetes directory"
# Apply the changes with --dryrun justtovalidate them
kubectl apply --kubeconfig ./kubeconfig.yaml --dry-run-f ./kubernetes
else
echo">>>> No changed detected inside the ./kubernetes folder. Nothing to do."
fi
}

main"$@"

第二个操作和此几乎一样,Dockerfile 是相同的,但 CMD 看起来是这样的:

复制代码

#!/bin/bash

main(){
# Decode thesecretpassed by the actionandpaste theconfigina file.
echo$KUBECONFIG| base64 -d > ./kubeconfig.yaml
# Checkifit is an event generated by the PR is a merge
merged=$(jq --raw-output .pull_request.merged"$GITHUB_EVENT_PATH")
# Retrieve the base branchforthe PR because I would liketoapply only PR mergedtomaster
baseRef=$(jq --raw-output .pull_request.base.ref"$GITHUB_EVENT_PATH")

if[["$merged"=="true"]] && [["$baseRef"=="master"]]; then
echo">>>> PR merged into master. Shipping to k8s!"
kubectl apply --kubeconfig ./kubeconfig.yaml -f ./kubernetes
else
echo">>>> Nothing to do here!"
fi
}

main"$@"

除此之外,工作流文件还有一个生成器,似乎效果不错。secrets 允许开箱即用,并与第三方服务集成,也可用 bash 做任何想做的事情!

参考链接: https://gianarb.it/blog/kubernetes-github-action


以上所述就是小编给大家介绍的《如何尝试用 GitHub Actions 项目编写容器应用?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Fortran 95/2003程序设计

Fortran 95/2003程序设计

中国电力出版社 / 2009-8 / 88.00元

Fortran是计算世界最早出现的高级程序设计语言之一,随着面向对象编程时代的到来,Fortran语言不仅保持了发展的步伐,而且继续在科学计算方面领先。《Fortran95/2003程序设计(第3版)》在第2~7章介绍了Fortan语言基础知识,为初学者提供入门学习资料;在第8~15章介绍了Fortran语言高级特性,为深入用好Fortran语言提供支持;在第16章讲述了Fortran语言面向对象......一起来看看 《Fortran 95/2003程序设计》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具