内容简介:早前,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 做任何想做的事情!
以上所述就是小编给大家介绍的《如何尝试用 GitHub Actions 项目编写容器应用?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 基于顺丰同城接口编写sdk,java三方sdk编写思路
- 使用 Clojure 编写 OpenWhisk 操作,第 1 部分: 使用 Lisp 方言为 OpenWhisk 编写简明的代码
- 编写一个Locust文件
- 编写现代 JavaScript 代码
- 性能测试报告编写技巧
- 为vscode编写扩展
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Clean Architecture
Robert C. Martin / Prentice Hall / 2017-9-20 / USD 34.99
Practical Software Architecture Solutions from the Legendary Robert C. Martin (“Uncle Bob”) By applying universal rules of software architecture, you can dramatically improve developer producti......一起来看看 《Clean Architecture》 这本书的介绍吧!