Github Actions で Dockerイメージ自動作成

レイ
2023-09-05
2023-09-05

github

お疲れ様です。おれちゃんでござる!

前回はGithubのAPIで小さいウエブサイトを作っていましたのを覚えていますか?ウエブサイトのコード作成は完了ですけどこのままでは何か足りないですよね。どこかにホストして公開しないととアクセスできないですよね。

k8sクラスターは持ってるのであそこにホストするつもりですが作成したコードをDocker Imageにする必要があります。

毎回コード変更あったらコマンド打つのはしんどいやからGithub Actionsで毎変更があるとイメージ自動更新システム作って見ました。

でもそもそもGithub Actionってなんですか?

Github Action

Githubは世界で一番人気なVCS(バージョン管理システム)、でもコードの保管と管理だけではなくて色んな便利な機能が含まれています。

Github Actionはその機能の一つです。

リポジトリの中に「.github/worflows」ディレクトリを作って、中にYAMLファイルを作ったらこのファイルのコードが記載された条件で発動されます。

on: [push]
 
 jobs:
   test:
     name: Hello world
     runs-on: ubuntu-latest
         steps:
             - uses: actions/github-script@v6
             - name: Write a comment
               with:
                 script: |
                     ### Hello World!
                     ### Test message!

例えば以上のコードは毎プッシュにコメントを書きます。

同じように色んなことができます。今回の場合はコードをDocker Imageにしましょう。

でもその前にDockerFileが必要です。

DockerFile

DockerFileはDocker Imageのビルドする時の設定のファイルです。

リポジトリ作成ポータルのフロントエンドコンテナーイメージは以下になります。

FROM node:19.6.1

EXPOSE 3000

COPY package*.json ./
COPY public public/
COPY src src/

RUN npm ci --only=production

CMD [ "npm", "start" ]

Docker Imageはレイヤーを重ねて作られるものです。0から作るわけではありません。どの既存DockerFileに基づくかはFROMキーワードで決まる。

EXPOSEはどのポートを公開する。

COPYはディスクにあるファイルをイメージに写す。

RUNはコマンドを発動する

CMDはImageのエントリポイントって言う。ImageはあのCMDの為に作られるのでImageをPodに挿入すればあのCMDを発動する。クラッシュしたらPodもクラッシュしてます。

他のキーワードもいくつかありますがメインなのは以上となります。

このDockerFileでDocker Image作成できます!次はGithubActionの作成で毎プッシュでImageの新バージョンを自動作成することです。

Docker Imageビルド用のGithub Action

GithubActionの発動条件として毎プッシュで言うてたので以下のコードになります。

先ずはGithubActionを起動するコンテナーにリポジトリのコードをコピーしないといけない。Checkoutマクロでできます。

DockerFileに基づくDocker Imageを作るGithub Actionようの便利なツールが既にあります。Buildxというものです。以下のコードで設定できます。

私のself-hosted Github Runner(GithubActionを起動するコンテナー)はk8sクラスターにいるから「driver: kubernetes」を追加する必要があります。

次は、作成したDocker Imageをプッシュするためコンテナーレジストリにログインする必要があります。これは以下のコードで行います。

これはリポジトリのPackageのところに挿入してるコンテナーレジストリのアクセス仕方です。準備はそろえてるのでプッシュはできます。

結果は以下になります。作られたDockerImageはPackageのところに保管され、リンクで簡単に使われます。

 

 

ー>

 

 

 

 

最後に

設定はちょっと難しいかもしれませんが、最初の苦労だけでいいところがポイントです。この仕組みでわざわざ新しいDockerImageを作るよりプッシュしたらGithubActionにお任せできます。

自動化へ一歩進んだって感じがしますよね。

また次お楽しみにしてね ^^💦