{"id":15099363,"url":"https://github.com/oracle-japan/ochacafe-github-actions","last_synced_at":"2026-01-18T09:01:55.048Z","repository":{"id":180425080,"uuid":"665117505","full_name":"oracle-japan/ochacafe-github-actions","owner":"oracle-japan","description":"for OCHaCafe Season 7 #3 Get Started GitHub Actions Demo","archived":false,"fork":false,"pushed_at":"2023-08-09T04:14:04.000Z","size":12165,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-04-06T15:24:53.179Z","etag":null,"topics":["github","github-actions","kubernetes","ochacafe","oracle-cloud"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"tniita/ochacafe-github-actions","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oracle-japan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-07-11T13:25:00.000Z","updated_at":"2023-08-03T07:18:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"f3ae0700-19b9-472e-8e68-a94f78f4f849","html_url":"https://github.com/oracle-japan/ochacafe-github-actions","commit_stats":null,"previous_names":["oracle-japan/ochacafe-github-actions"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oracle-japan/ochacafe-github-actions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oracle-japan%2Fochacafe-github-actions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oracle-japan%2Fochacafe-github-actions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oracle-japan%2Fochacafe-github-actions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oracle-japan%2Fochacafe-github-actions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oracle-japan","download_url":"https://codeload.github.com/oracle-japan/ochacafe-github-actions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oracle-japan%2Fochacafe-github-actions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28534154,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["github","github-actions","kubernetes","ochacafe","oracle-cloud"],"created_at":"2024-09-25T17:11:24.239Z","updated_at":"2026-01-18T09:01:55.030Z","avatar_url":"https://github.com/oracle-japan.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ochacafe-github-actions\n\n![badge](https://github.com/oracle-japan/ochacafe-github-actions/actions/workflows/oke_demo_workflow.yaml/badge.svg) ![badge](https://github.com/oracle-japan/ochacafe-github-actions/actions/workflows/simple_demo.yaml/badge.svg) \n\n## Oracle Cloud Hangout Cafe Season7 #3 Get Started GitHub Actions!!\n\n### Directory Configuration\n\n```bash\n.\n├── .github\n│   └── workflows\n│       ├── oke_demo_deploy.yaml # OKE Deploy Workflow for GitHub Hosted Runner\n│       ├── oke_demo_deploy_arc.yaml # OKE Deploy Workflow for Actions Runner Controller\n│       ├── oke_demo_workflow.yaml # GitHub Actions Workflow Demo Workflow for GitHub Hosted Runner\n│       ├── oke_demo_workflow_arc.yaml　 # GitHub Actions Workflow Demo Workflow for Actions Runner Controller\n│       └── simple_demo.yaml # Simple Workflow Demo Workflow\n├── README.md\n├── go-app # Simple Workflow Demo App\n├── img\n├── k8s\n│   ├── arc.yaml  # Actions Runner Controller Manifest\n│   └── demo.yaml  # GitHub Actions Workflow Demo Manifest\n└── oke-app 　 # GitHub Actions Workflow Demo App\n```\n\n### GitHub Actions利用手順\n\n#### レポジトリのfork\n\nこのレポジトリをforkしてください。\n\n![img/01.png](img/01.png)\n\n#### Secretの設定\n\nサンプルアプリケーションをOracle Container Engine for Kubernetes（以下、OKE）にデプロイするための情報をGitHub Secretとして登録します。  \n\nGitHub上部の`Settings`をクリックします。\n\n![img/02.png](img/02.png)\n\n`Secrets and variables`の`actions`をクリックします。\n\n![img/03.png](img/03.png)\n\n`New repository secret`をクリックします。  \n\n![img/04.png](img/04.png)\n\n以下のSecretを作成します。  \n\n| 項目  | 設定内容 |\n| ------------- | ------------- |\n| OCI_CLI_FINGERPRINT  | [チュートリアル](https://oracle-japan.github.io/ocitutorials/intermediates/using-cli/)内で取得できるAPIキーのフィンガープリント  |\n| OCI_CLI_KEY_CONTENT  | [チュートリアル](https://oracle-japan.github.io/ocitutorials/intermediates/using-cli/)内で取得できるAPIキーの秘密鍵  |\n| OCI_CLI_REGION  | [チュートリアル](https://oracle-japan.github.io/ocitutorials/intermediates/using-cli/)内で取得できるAPIキーの秘密鍵  |\n| OCI_CLI_TENANCY  | [チュートリアル](https://oracle-japan.github.io/ocitutorials/intermediates/using-cli/)内で取得できるテナンシOCID  |\n| OCI_CLI_USER  | [チュートリアル](https://oracle-japan.github.io/ocitutorials/intermediates/using-cli/)内で取得できるユーザのOCID  |\n| OKE_CLUSTER_OCID  | [チュートリアル](https://oracle-japan.github.io/ocitutorials/cloud-native/oke-for-commons/)で取得できるクラスタOCID  |\n\nこれでSecretの作成は完了です。\n\n#### MySQL Database Serviceのプロビジョニング\n\n以降のサンプルアプリケーションで利用するMySQL Database Serviceをプロビジョニングします。  \nプロビジョニングは[チュートリアル](https://oracle-japan.github.io/ocitutorials/beginners/creating-mds/)をご確認ください。  \nなお、プロビジョニングに利用するVCNはOKEと同一のVCNを利用してください。  \n\nプロビジョニング時に指定した`ユーザ名`、`パスワード`、`IPアドレス`をメモしておきます。  \n\n以下のコマンドでMySQL Database Serviceに接続するためのKubernetes Secretをdefault namespaceに作成します。  \n\n```sh\nkubectl create secret generic db-secret --from-literal=username=\u003cユーザ名\u003e --from-literal=password=\u003cパスワード\u003e --from-literal=host=\u003cIPアドレス\u003e\n```\n\nこれでMySQL Database Serviceのプロビジョニングは完了です。  \n\n#### 動作確認\n\n動作確認をします。\n\nサンプルデモは2種類あるので、それぞれ説明します。  \n\n##### Simple Workflow Demo\n\n`Simple Workflow Demo`用のサンプルアプリケーションは、`go-app`配下に存在します。\nこのアプリケーションは`Hello World`を標準出力するシンプルなソースコードです。\n\n`Simple Workflow Demo`は以下の通り、mainレポジトリにPushすると動作する設定になっています。  \n\n```yaml\nname: Simple Demo\n\non:\n  push:\n    paths:\n      - \"go-app/**\"\n  workflow_dispatch:\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Start message\n        run: echo \"Welcome to GitHub Actions\"\n      - uses: actions/checkout@v3\n      - name: Setup Go version\n        uses: actions/setup-go@v4\n        with:\n          go-version: \"1.19.1\"\n      - run: go run go-app/hello-world.go\n      - name: Finish message\n        run: echo \"Finished running the demo\"\n```\n\nWorkflowの中身は、以下の通りです。  \n\n1. 開始メッセージを出力\n2. レポジトリをチェックアウト\n3. Go v1.19.1で実行\n4. 終了メッセージを出力\n\nGoファイルの中身は以下のようになっています。  \n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Printf(\"Hello World \\n\")\n}\n```\n\n例えば、以下のように変更してPushします。  \n\n```go\nfunc main() {\n\tfmt.Printf(\"Hello OCHa \\n\")\n}\n```\n\nPushすると、GitHub Actionsが動作します。  \n\n![img/05.png](img/05.png)\n\n結果を見てみると以下のようになります。  \n\n![img/06.png](img/06.png)\n\nこれで`Simple Workflow Demo`のデモは完了です。  \n\n##### GitHub Actions Workflow Demo\n\n`GitHub Actions Workflow Demo`用のサンプルアプリケーションは、`oke-app`配下に存在します。  \nこのアプリケーションはフロントエンドはNext.jsアプリ、バックエンドはGoアプリです。  \n\nこのWorkflowは以下の機能を利用したものになります。\n\n- マトリクス戦略\n- Cache\n- Reusable Workflow\n- サービスコンテナ\n- GitHub Packages\n- GitHub Secrets\n\nこのWorkflowの流れは大きく以下の通りです。\n\n![img/07.png](img/07.png)\n\n4つのジョブから構成されています。\n\nジョブ1:**マトリクス戦略**により、Goの3バージョンで並列に実行、MySQLの**サービスコンテナ**を利用してテストを実施  \nジョブ2,ジョブ3: 並列にGoアプリとNext.jsアプリのコンテナイメージをビルドし、**GitHub Packages**の一部であるGitHub Container RegistryにPush、ビルドの際には**Cache**を利用してビルド時間を短縮  \nジョブ4: **Reusable Workflow**として実行、**GitHub Secrets**に格納された情報をもとにOracle Container Engine for Kubernetesにアプリをデプロイ\n\n`GitHub Actions Workflow Demo`は`oke-app`配下のいずれかのファイルの更新によりトリガーされます。  \n\nまずはデモアプリケーション用のNamespaceを作成しておきます。  \n\n```sh\nkubectl create ns demo\n```\n\nここでは、`oke-app/backend-app/db/db.go`に定義されたテーブル情報を更新してみましょう。  \nこのテーブル情報はアプリ起動時にMySQLに対して書き込みされます。 \n\n現状は以下のようになっています。  \n\n```go\n\t\t{\n\t\t\tName:       \"Kubernetes超入門\",\n\t\t\tDate:       time.Date(2023, 6, 7, 19, 00, 00, 000000, time.UTC).Format(\"20060102150405\"),\n\t\t\tTopics:     \"Kubernetes\",\n\t\t\tPresenters: \"Yutaka Ichikawa\",\n\t\t},\n\t\t{\n\t\t\tName:       \"IaCのベストプラクティス\",\n\t\t\tDate:       time.Date(2023, 7, 5, 19, 00, 00, 000000, time.UTC).Format(\"20060102150405\"),\n\t\t\tTopics:     \"Terraform, Pulumi\",\n\t\t\tPresenters: \"Shuhei Kawamura\",\n\t\t},\n\t\t{\n\t\t\tName:       \"GitHub Actionsを使いこなせ！\",\n\t\t\tDate:       time.Date(2023, 8, 9, 19, 00, 00, 000000, time.UTC).Format(\"20060102150405\"),\n\t\t\tTopics:     \"GitHub Actions\",\n\t\t\tPresenters: \"Takuya Niita\",\n\t\t},\n\t\t{\n\t\t\tName:       \"セキュアなWeb APIの作り方\",\n\t\t\tDate:       time.Date(2023, 9, 6, 19, 00, 00, 000000, time.UTC).Format(\"20060102150405\"),\n\t\t    Topics:     \"Keycloak, cert-manager\",\n\t\t\tPresenters: \"Shuhei Kawamura\",\n\t\t},\n\t\t{\n\t\t\tName:       \"Cluster API - K8sクラスタ管理の新スタイル\",\n\t\t\tDate:       \"TBD\",\n\t\t\tTopics:     \"Cluster API, API Provider for OCI\",\n\t\t\tPresenters: \"Takuya Niita\",\n\t\t},\n\t\t{\n\t\t\tName:       \"次はこれでしょ！eBPF\",\n\t\t\tDate:       \"TBD\",\n\t\t\tTopics:     \"eBPF, CNI, Cilium\",\n\t\t\tPresenters: \"Yutaka Ichikawa\",\n\t\t},\n```\n\n`セキュアなWeb APIの作り方`は日程が`2023/9/6`と決まっているので、以下のように更新します。  \n\n```go\n\t\t{\n\t\t\tName:       \"セキュアなWeb APIの作り方\",\n\t\t\tDate:       time.Date(2023, 9, 6, 19, 00, 00, 000000, time.UTC).Format(\"20060102150405\"),\n\t\t\tTopics:     \"Keycloak, cert-manager\",\n\t\t\tPresenters: \"Shuhei Kawamura\",\n\t\t},\n```\n\nまた、今回はGitHub Actions内でビルドしたデモアプリケーションのコンテナイメージをGHCR(GitHub Container Registry)に対してPushしているので、\nKubernetes Manifestのイメージパスを書き換えます。  \nKubernetes Manifestは`k8s/demo.yaml`に存在します。  \n\n```yaml\nkind: Service\napiVersion: v1\nmetadata:\n  name: github-actions-demo-lb\nspec:\n  selector:\n    app: frontend\n  type: LoadBalancer\n  ports:\n    - name: http\n      port: 80\n      targetPort: 3000\n---\nkind: Service\napiVersion: v1\nmetadata:\n  name: github-actions-demo-backend\nspec:\n  selector:\n    app: backend\n  type: ClusterIP\n  ports:\n    - name: http\n      port: 8080\n      targetPort: 8080\n---\nkind: Deployment\napiVersion: apps/v1\nmetadata:\n  name: github-actions-demo-frontend\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: frontend\n  template:\n    metadata:\n      labels:\n        app: frontend\n    spec:\n      containers:\n        - name: github-actions-demo-frontend\n          image: ghcr.io/oracle-japan/ochacafe-github-actions/oke-app-nextjs:latest\n          ports:\n            - containerPort: 3000\n          resources:\n            requests:\n              cpu: 200m\n              memory: 100Mi\n          env:\n            - name: API_URL\n              value: github-actions-demo-backend:8080\n            - name: NEXT_PUBLIC_API_URL\n              value: github-actions-demo-backend:8080\n      imagePullSecrets:\n        - name: regcred\n---\nkind: Deployment\napiVersion: apps/v1\nmetadata:\n  name: github-actions-demo-backend\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: backend\n  template:\n    metadata:\n      labels:\n        app: backend\n    spec:\n      containers:\n        - name: github-actions-demo-backend\n          image: ghcr.io/oracle-japan/ochacafe-github-actions/oke-app-golang:latest\n          ports:\n            - containerPort: 8080\n          resources:\n            requests:\n              cpu: 200m\n              memory: 100Mi\n          env:\n            - name: DB_USER\n              valueFrom:\n                secretKeyRef:\n                  name: db-secret\n                  key: username\n            - name: DB_PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: db-secret\n                  key: password\n            - name: DB_HOST\n              valueFrom:\n                secretKeyRef:\n                  name: db-secret\n                  key: host\n            - name: DB_NAME\n              value: mydb\n      imagePullSecrets:\n        - name: regcred\n\n```\n\nこのManifest内の\n\n```yaml\n          image: ghcr.io/oracle-japan/ochacafe-github-actions/oke-app-nextjs:latest\n```\n\n```yaml\n          image: ghcr.io/oracle-japan/ochacafe-github-actions/oke-app-golang:latest\n```\n\n上記2つのイメージパスをforkしたレポジトリのオーナーで更新します。  \n例えば、`tniita`というオーナーのレポジトリにforkした場合は、それぞれ以下のようになります。  \n\n```yaml\n          image: ghcr.io/tniita/ochacafe-github-actions/oke-app-nextjs:latest\n```\n\n```yaml\n          image: ghcr.io/tniita/ochacafe-github-actions/oke-app-golang:latest\n```\n\nこれらのファイルをPushすると、GitHub Actionsが動作します。  \n\n![img/08.png](img/08.png)\n\nデプロイされると以下のようなアプリケーションがOKEにデプロイされます。  \n\n![img/09.png](img/09.png)\n\nビルドされたコンテナはGitHub PackagesにPushされているので、以下で確認できます。　　\n\n![img/010.png](img/010.png)\n\nコンテナイメージなどのCacheについては以下から確認できます。  \n\n![img/011.png](img/011.png)\n\nこれで`GitHub Actions Workflow Demo`のデモは完了です。  \n\n### [option]Actions Runnner Controller利用手順\n\nここでは、Actions Runnner Controllerを利用する手順を説明します。  \n\n\u003e **Warning**\n\u003e この手順を実施する場合はセキュリティ確保のため、必ずプライベートレポジトリで実施してください。\n\nActions Runnner Controllerを利用する場合は、事前準備として[こちら](https://github.com/actions/actions-runner-controller/blob/master/docs/authenticating-to-the-github-api.md)を実施してください。  \n\n`k8s/arc.yaml`にActions Runner ControllerのManifestがあります。  \n\n```yaml\napiVersion: actions.summerwind.dev/v1alpha1\nkind: RunnerDeployment\nmetadata:\n  name: runner-demo-oke\nspec:\n  template:\n    spec:\n      repository: \u003cfork先のユーザ名\u003e/ochacafe-github-actions\n      labels:\n        - runner-demo-oke\n      resources:\n        limits:\n          cpu: \"1.0\"\n          memory: \"4Gi\"\n        requests:\n          cpu: \"1.0\"\n          memory: \"4Gi\"\n```\n\n`repository: \u003cfork先のユーザ名\u003e/ochacafe-github-actions`の部分をforkしたご自身のレポジトリ名に合わせてください。  \n\nManifestをデプロイします。  \n\n```sh\nkubectl apply -f k8s/arc.yaml\n```\n\nデプロイすると以下のようにPodが作成されます。  \n\n```yaml\n$ kubectl get pods -n actions-runner-system cert-manager default\nNAMESPACE               NAME                                            READY   STATUS    RESTARTS        AGE\nactions-runner-system   controller-manager-5f468ff884-hl6pp             2/2     Running   2 (2d14h ago)   10d\ncert-manager            cert-manager-bfcd95fbc-h9n77                    1/1     Running   0               10d\ncert-manager            cert-manager-cainjector-6c65c9f988-d49q2        1/1     Running   0               10d\ncert-manager            cert-manager-webhook-78b75fb78f-jtclh           1/1     Running   0               10d\ndefault                 runner-demo-oke-x8hvx-4nttd                     2/2     Running   0               10d\ndefault                 runner-demo-oke-x8hvx-fjxsz                     2/2     Running   0               10d\ndefault                 runner-demo-oke-x8hvx-q6s7z                     2/2     Running   0               10d\n```\n\n`runner-demo-oke-xxx`がそれぞれGitHub Actionsのランナーの役割を果たすPodです。 \n\nこれはGitHubのUIからでも確認できます。  \n\n![img/012.png](img/012.png)\n\n上記でデプロイしたManifestでは、`runnner-demo-oke`というラベルを付与しています。    \n\n今回は、手動で`OKE GitHub Actions Workflow ARC Demo`を実行してください。  \n\n![img/013.png](img/013.png)\n\nJobがOKEのPodで実行されていることが確認できます。\n\n![img/014.png](img/014.png)\n\n![img/015.png](img/015.png)\n\n\n\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foracle-japan%2Fochacafe-github-actions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foracle-japan%2Fochacafe-github-actions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foracle-japan%2Fochacafe-github-actions/lists"}