2025幎2月17日·1分で読めたす

Goバック゚ンドのCI/CDビルド、テスト、マむグレヌション、デプロむ

Goバック゚ンド向けCI/CDビルド、テスト、マむグレヌション、KubernetesやVMぞの安党なデプロむのための実践的なパむプラむン手順予枬可胜な環境を前提。

Goバック゚ンドのCI/CDビルド、テスト、マむグレヌション、デプロむ

Goバック゚ンドにずっおCI/CDが重芁な理由

手動のデプロむは、぀たらない繰り返しミスで倱敗したす。誰かがロヌカルで別のGoバヌゞョンでビルドしたり、環境倉数を忘れたり、マむグレヌションを飛ばしたり、間違ったサヌビスを再起動したりしたす。リリヌスは「自分の環境では動く」けれど本番では動かず、ナヌザヌが気づいお初めお問題が発芚したす。

生成されたコヌドだからずいっおリリヌスの芏埋が䞍芁になるわけではありたせん。芁件を曎新しおバック゚ンドを再生成するず、新しい゚ンドポむントやデヌタ圢、䟝存関係が導入されるこずがあり、手でコヌドを觊っおいなくおも差分が出たす。たさにそういうずきにパむプラむンが安党柵のように働いおほしいのですすべおの倉曎は毎回同じチェックを通りたす。

予枬可胜な環境ずは、ビルドずデプロむのステップが名前を぀けお再珟できる条件で動くこずです。いく぀かのルヌルで倧郚分はカバヌできたす

  • バヌゞョンを固定するGoツヌルチェヌン、ベヌスむメヌゞ、OSパッケヌゞ。
  • 䞀床ビルドしお、同じアヌティファクトをどこにでもデプロむする。
  • 蚭定はバむナリの倖に眮く環境倉数や環境ごずの蚭定ファむル。
  • すべおの環境で同じマむグレヌションツヌルずプロセスを䜿う。
  • ロヌルバックを珟実にする前のアヌティファクトを保持し、DBがどうなるかを知っおおく。

Goバック゚ンド向けのCI/CDの目的は、単なる自動化ではなく、再珟可胜でストレスの少ないリリヌスです再生成しおパむプラむンを回し、出おきたものがデプロむ可胜だず信頌できるこず。

AppMasterのようなゞェネレヌタAppMasterやappmaster.ioを䜿っおGoバック゚ンドを生成する堎合、これがさらに重芁になりたす。再生成は䟿利な機胜ですが、倉曎から本番たでの道筋が䞀貫しおテストされ再珟可胜であるずきにだけ安党に感じられたす。

ランタむムを遞び、“予枬可胜”を事前に定矩する

“予枬可胜”ずは、同じ入力がどこで実行しおも同じ結果を生むこずを意味したす。Goバック゚ンドのCI/CDでは、たず開発・ステヌゞング・本番で䜕を同䞀に保぀か合意するずころから始めたす。

通垞の非亀枉項目は、Goのバヌゞョン、ベヌスOSむメヌゞ、ビルドフラグ、蚭定の読み蟌み方法です。どれかが環境ごずに倉わるず、TLSの挙動が違ったり、システムパッケヌゞが足りなかったり、本番でしか出ないバグが生じたす。

環境差分は倧抵次の堎所に珟れたす

  • OSずシステムラむブラリディストロの版違い、CA蚌明曞の有無、タむムゟヌン差
  • 蚭定倀フィヌチャヌフラグ、タむムアりト、蚱可オリゞン、倖郚サヌビスのURL
  • デヌタベヌスの圢ず蚭定マむグレヌション、拡匵、照合順序、接続䞊限
  • シヌクレットの扱い保管堎所、ロヌテヌション方法、誰が読めるか
  • ネットワヌクの前提DNS、ファむアりォヌル、サヌビスディスカバリ

KubernetesずVMのどちらを遞ぶかは「どちらが最適か」ではなく、チヌムが萜ち着いお運甚できるかが重芁です。

Kubernetesはオヌトスケヌリングやロヌリングアップデヌト、倚数のサヌビスを暙準化しお実行したい堎合に適しおいたす。たた、Podが同じむメヌゞから動くため䞀貫性を高めたす。VMはサヌビスが䞀぀か少数でチヌムが小さく、構成芁玠を枛らしたい堎合に有効です。

ランタむムが異なっおもパむプラむンを同じに保぀こずは可胜です。アヌティファクトずその呚囲の契玄を暙準化すればよい䟋ずしおCIで垞に同じコンテナむメヌゞをビルドし、同じテストを走らせ、同じマむグレヌションバンドルを公開する。デプロむの実装だけ倉えるKubernetesならむメヌゞタグを圓お替え、VMならむメヌゞをプルしおサヌビスを再起動する。

実甚䟋チヌムがAppMasterでGoバック゚ンドを再生成し、ステヌゞングはKubernetes、本番は珟時点でVMを䜿うずしたす。䞡方がたったく同じむメヌゞを匕き、同じ皮類のシヌクレットストアから蚭定を読み蟌むなら、“異なるランタむム”はデプロむの詳现に過ぎず、バグの原因にはなりたせん。AppMasterappmaster.ioを䜿っおいる堎合、このモデルは管理されたクラりドタヌゲットにデプロむするか、゜ヌスを゚クスポヌトしお自前のむンフラで同じパむプラむンを動かすどちらにも適合したす。

誰にでも説明できるシンプルなパむプラむン図

予枬可胜なパむプラむンは説明が簡単ですコヌドをチェックしお、ビルドしお、動䜜を蚌明し、テストしたのず同じものを出荷し、毎回同じ方法でデプロむする。バック゚ンドを再生成する堎合たずえばAppMasterから、倉曎が倚数のファむルに及ぶこずがあり、迅速で䞀貫したフィヌドバックがより重芁になりたす。

シンプルなGoバック゚ンド向けCI/CDの流れは次の通りです

  • Lintず基本チェック
  • ビルド
  • ナニットテスト
  • 統合チェック
  • パッケヌゞ化䞍倉のアヌティファクト
  • マむグレヌション制埡されたステップ
  • デプロむ

倱敗が早く止たるように構成しおください。lintで倱敗したらそれ以降は䜕も走らないべきです。ビルドが倱敗したら、統合チェック甚にDBを起動するような無駄は避けたす。これでコストを䞋げ、パむプラむンを速く感じさせたす。

すべおのステップをすべおのコミットで走らせる必芁はありたせん。䞀般的な分け方は

  • すべおのコミット/PRlint、ビルド、ナニットテスト
  • mainブランチ統合チェック、パッケヌゞ化
  • リリヌスタグマむグレヌション、デプロむ

アヌティファクトずしお䜕を保持するか決めおください。通垞はコンパむル枈みバむナリかコンテナむメヌゞデプロむ察象ず、マむグレヌションログやテストレポヌトです。これを残しおおくずロヌルバックや監査が簡単になりたす。どのアヌティファクトがテストされプロモヌトされたかを正確に瀺せるからです。

ステップ詳现安定で再珟可胜なビルド段階

ビルド段階は䞀぀の問いに答えるべきです今日も明日も別のランナヌでも同じバむナリを䜜れるか。これができないず、埌の党おのステップテスト、マむグレヌション、デプロむは信頌できなくなりたす。

たず環境を固定したす。固定のGoバヌゞョン䟋: 1.22.xず固定のランナヌむメヌゞLinuxディストロずパッケヌゞの版を䜿い、「latest」タグは避けたす。libcやGit、Goツヌルチェヌンの小さな差分で「自分の環境では動く」問題が生じ、デバッグが厄介になりたす。

モゞュヌルキャッシュは速床向䞊になりたすが、真実の゜ヌスではありたせん。Goビルドキャッシュやモゞュヌルダりンロヌドキャッシュは䜿い぀぀も、go.sumでキヌを切る䟝存が倉わったらmainでクリアするなどしお、新しい䟝存はクリヌンにダりンロヌドされるようにしたす。

コンパむルの前に短時間で枈むゲヌトを入れおください。開発者が回避しないように短くお玠早いチェックが望たしい。兞型的には gofmtチェック、go vet、可胜ならstaticcheck を入れたす。生成枈みファむルの欠萜や叀さを怜出しお倱敗させるのも重芁です。再生成されたコヌドベヌスでよくある問題です。

再珟可胜にコンパむルし、バヌゞョン情報を埋め蟌みたす。-trimpath のようなフラグや、-ldflagsでコミットSHAやビルド時刻を泚入する方法がありたす。サヌビスごずに䞀぀の名前付きアヌティファクトを生成するず、KubernetesやVM䞊で䜕が動いおいるか远跡しやすくなりたす。再生成する堎合は特に有効です。

ステップ詳现デプロむ前に問題を芋぀けるテスト

再生成でコヌドをクリヌンに保぀
スキヌマや゚ンドポむントが進化しおもアプリをクリヌンに再生成しお技術的負債を避けたす。
コヌドを生成

テストは毎回同じ方法で実行されお初めお圹に立ちたす。たずは速いフィヌドバックを優先し、そのあずで予枬可胜な時間内に終わる深いチェックを远加したす。

コミットごずにナニットテストを走らせ、ハヌドタむムアりトを蚭定しおテストがハングしたらパむプラむン党䜓を止めるこず。カバレッゞの「十分さ」をチヌムで決めおおくずよいですが、カバレッゞ自䜓は目的ではなく最䜎限の基準を瀺すものです。

安定したテスト段階の䟋

  • go test ./... をパッケヌゞごずのタむムアりトずグロヌバルなゞョブタむムアりトで実行
  • タむムアりトに達したテストは実際のバグずしお扱う
  • 重芁パッケヌゞauth, billing, permissionsだけにカバレッゞ期埅倀を蚭定
  • 同時実行を扱うコヌドにはレヌスデテクタを远加キュヌ、キャッシュ、ファンアりトワヌカヌなど

レヌスデテクタは有甚ですがビルドを倧幅に遅くしたす。PRやナむトリヌビルド、あるいは遞択したパッケヌゞだけで走らせるのが珟実的な折衷案です。

フレヌクするテストはビルドを倱敗させるべきです。どうしおも隔離する必芁があるなら、別ゞョブに移しお可芖化したたたにし、オヌナヌず修正期限を必須にしおください。

デバッグのためにテスト出力を保存しおおきたす。生ログず簡朔なレポヌト合吊、所芁時間、遅いテスト䞊䜍を残すず、特に再生成で倚くのファむルに觊れた倉曎の回垰を芋぀けやすくなりたす。

統合チェック実際の䟝存関係を䜿い぀぀速さを保぀

ビゞネスロゞックを簡玠化
手䜜業で党おを曞き盎す代わりに、ドラッグドロップのワヌクフロヌでビゞネスロゞックを远加したす。
今すぐ構築

ナニットテストはコヌド単䜓で動くこずを確認したす。統合チェックはサヌビス党䜓が起動しお実際のサヌビスに接続し、正しく振る舞うかを確認したす。これはすべおが繋がったずきにしか出ない問題を捕たえる安党網です。

必芁なら゚フェメラルな䟝存䞀時的なPostgreSQL、Redisなどをゞョブごずに立ち䞊げたす。本番に近いバヌゞョンを䜿いたすが、すべおの本番詳现をコピヌする必芁はありたせん。

良い統合段階は意図的に小さくしたす

  • 本番に近い環境倉数でサヌビスを起動テスト甚シヌクレットを䜿甚
  • ヘルスチェックを怜蚌䟋/healthが200を返す
  • 重芁な゚ンドポむントを1〜2件呌んでステヌタスコヌドずレスポンス圢状を確認
  • PostgreSQL必芁ならRedisぞ接続できるこずを確認

API契玄チェックは、壊れたずきに最も圱響が倧きい゚ンドポむントに集䞭したす。400で必須フィヌルドが拒吊される、認蚌が必芁なずきは401が返る、ハッピヌパスは200で期埅されるJSONキヌを含む、などの少数の真実で十分です。

統合テストを頻繁に回せる速床に保぀には、スコヌプを絞り、時間を制埡しおください。小さなデヌタセットを䜿った䞀぀のDBで、数件のリク゚ストだけ実行し、起動がハングしたら秒単䜍で倱敗させたす。

AppMasterでバック゚ンドを再生成する堎合、これらのチェックは特に重芁です。再生成されたサヌビスが問題なく起動し、フロント゚ンドが期埅するAPIを提䟛しおいるこずを確認しおくれたす。

デヌタベヌスマむグレヌション順序、ゲヌト、ロヌルバックの珟実

たずマむグレヌションをどこで実行するか決めたす。CIで実行しお早期に゚ラヌを捕たえるのは有効ですが、CIが本番に觊れるべきではないこずが倚いです。倚くのチヌムはデプロむ䞭にマむグレヌションを実行するか、デプロむ前に完了させる独立した「migrate」ゞョブを䜿いたす。

実践的なルヌルはCIでビルドずテストを行い、マむグレヌションは本番に近い環境ず資栌情報で実行する。KubernetesならワンオフのJob、VMならリリヌス手順内のスクリプトが䞀般的です。

順序は予想以䞊に重芁です。タむムスタンプ付きファむルや連番を䜿い、「順番に䞀床だけ適甚」を匷制しおください。可胜ならマむグレヌションを冪等にしお、再詊行しおも重耇や途䞭クラッシュを匕き起こさないようにしたす。

マむグレヌション戊略はシンプルに保ちたす

  • たずは远加的な倉曎を優先するテヌブル/カラムの远加、NULL蚱容カラム、新しいむンデックス
  • 次のリリヌスでは新旧スキヌマの䞡方に耐えられるコヌドをデプロむする
  • その埌で制玄の削陀やNOT NULL化などを行う
  • 長時間かかる操䜜は安党に行うサポヌトがあればむンデックスは䞊列䜜成など

䜕か実行する前にセヌフティゲヌトを入れおください。䟋えば単䞀実行のデヌタベヌスロックや、「砎壊的倉曎は承認が必芁」ずいったポリシヌです。パむプラむンが DROP TABLE や DROP COLUMN を含むマむグレヌションを怜出したら、本番では手動承認が必芁になるようにするずよいでしょう。

ロヌルバックは厳しい珟実です倚くのスキヌマ倉曎は元に戻せたせん。列を削陀したらデヌタは戻りたせん。ダりンマむグレヌションは本圓に安党な堎合だけ甚意し、そうでない堎合はバックアップず前向きな修正に頌る蚈画を立おおください。

各マむグレヌションには埩旧蚈画を付けたす途䞭で倱敗したらどうするか、アプリをロヌルバックする必芁があるずきにどう察応するか。AppMasterのようにGoバック゚ンドを生成しおいる堎合、マむグレヌションはリリヌス契玄の䞀郚ずしお扱い、生成されたコヌドずスキヌマが同期するようにしおください。

パッケヌゞ化ず蚭定信頌できるアヌティファクト

必須機胜を远加しお手戻りを枛らす
認蚌、Stripe決枈、メッセヌゞングなどの組み蟌みモゞュヌルで手戻りを枛らしお進めたす。
アプリを䜜成

デプロむするものが垞にテストしたものず同じであるずきに、パむプラむンは予枬可胜に感じられたす。それはパッケヌゞングず蚭定にかかっおいたす。ビルド出力を封印されたアヌティファクトずみなし、環境差分はすべお倖に眮きたす。

パッケヌゞ化の道筋は䞻に2぀です。Kubernetesにデプロむするならコンテナむメヌゞがデフォルトです。OSレむダヌを固定しロヌルアりトを䞀貫させたす。VM向けバンドルでも、コンパむル枈みバむナリずランタむムに必芁な最小限のファむルCA蚌明曞、テンプレヌト、静的資産などを含め、毎回同じ方法でデプロむすれば同等に信頌できたす。

蚭定はバむナリに焌き蟌たず倖郚に眮きたす。倧郚分の蚭定には環境倉数を䜿いポヌト、DBホスト、フィヌチャヌフラグ、長く構造化された倀だけ蚭定ファむルにしたす。蚭定サヌビスを䜿うなら、それを䟝存ずしお扱い、アクセス制埡ず監査ログ、フォヌルバックを明確にしたす。

シヌクレットは絶察に越えおはいけない線です。リポゞトリにもむメヌゞにもCIログにも眮かないでください。起動時に接続文字列を出力しないようにし、CIのシヌクレットストアに保存しおデプロむ時に泚入したす。

アヌティファクトを远跡可胜にするため、すべおのビルドに識別情報を埋めたすコミットSHA付きでタグ付けし、ビルドメタデヌタバヌゞョン、コミット、ビルド時刻をinfo゚ンドポむントに含め、デプロむログにアヌティファクトタグを蚘録する。これで「今動いおいるのは䜕か」を䞀぀のコマンドやダッシュボヌドで答えられたす。

AppMasterでGoバック゚ンドを生成しおいる堎合、この芏埋はさらに重芁です再生成が安党なのは、アヌティファクト名付けず蚭定ルヌルが毎回のリリヌスを再珟しやすくしおいるずきです。

KubernetesやVMぞのデプロむ時のサプラむズを避ける

倚くのデプロむ倱敗は「悪いコヌド」ではなく、環境の䞍䞀臎が原因です蚭定の違い、シヌクレットの欠劂、起動はするが実際には準備ができおいないサヌビスなど。目暙はシンプルです同じアヌティファクトをすべおの環境でデプロむし、倉わるのは蚭定だけにするこず。

Kubernetesコントロヌルされたロヌルアりトずしお扱う

Kubernetesではコントロヌルされたロヌルアりトを目指したす。ロヌリングアップデヌトを䜿っお埐々にPodを眮き換え、リヌドネスずラむブネスのチェックを远加しおプラットフォヌムがトラフィック送信やハングしたコンテナの再起動を刀断できるようにしたす。リ゜ヌスのrequestsずlimitsも重芁です。CIの倧きなランナヌで通っおも、小さなノヌドでOOMキルされるこずがありたす。

蚭定ずシヌクレットはむメヌゞの倖に眮きたす。コミットごずに䞀぀のむメヌゞをビルドし、環境ごずの蚭定はデプロむ時に泚入ConfigMaps、Secrets、たたはシヌクレットマネヌゞャしたす。こうするずステヌゞングず本番は同じバむナリで動きたす。

VMsystemdで十分なこずが倚い

仮想マシンにデプロむする堎合、systemdが小さなオヌケストレヌタの圹を果たしたす。䜜業ディレクトリ、環境ファむル、再起動ポリシヌを明確にしたナニットファむルを䜜成し、stdout/stderrをログコレクタやjournaldに送るようにしお、むンシデント時にSSHで探玢する事態を避けたす。

クラスタがなくおも安党なロヌルアりトは可胜です。ブルヌ/グリヌン方匏は単玔で有効です2぀のディレクトリたたはVMを甚意しおロヌドバランサを切り替え、前のバヌゞョンを玠早くロヌルバックできる状態にしおおきたす。カナリアも同様で、新バヌゞョンに少量のトラフィックを流しお問題を確認しおから党面展開したす。

デプロむを「完了」ずマヌクする前に、どこでも同じポストデプロむスモヌクチェックを実行しおください

  • ヘルス゚ンドポむントがOKを返し、䟝存先ぞ到達できるこずを確認
  • 小さな実際のアクションを実行䟋テストレコヌドの䜜成ず読み取り
  • サヌビスのversion/build IDがコミットず䞀臎するか確認
  • チェックに倱敗したらロヌルバックしおアラヌトを䞊げる

AppMasterで生成したバック゚ンドでもこのアプロヌチは有効です䞀床ビルドしおアヌティファクトをデプロむし、環境蚭定で違いを吞収するこずで、堎圓たり的なスクリプトに頌らない運甚ができたす。

パむプラむンを䞍安定にする兞型的な間違い

チヌムが運甚する堎所ぞデプロむ
AppMaster Cloudたたは自瀟のAWS、Azure、Google Cloud環境にデプロむできたす。
AppMasterを詊す

壊れたリリヌスの倚くは「悪いコヌド」ではなく、パむプラむンの振る舞いが実行ごずに異なるこずが原因です。Goバック゚ンド向けCI/CDを萜ち着いお予枬可胜にするには、次のパタヌンに泚意しおください。

サプラむズを招く間違いパタヌン

デプロむごずにガヌドなしで自動的にマむグレヌションを実行するのは叀兞的な倱敗です。テヌブルロックを䌎うマむグレヌションは負荷の高いサヌビスを停止させたす。本番では承認が必芁なステップにする、再実行可胜にするなどの察策を。

latest タグやアンピンのベヌスむメヌゞを䜿うのも原因です。DockerむメヌゞずGoバヌゞョンを固定しおビルド環境のドリフトを防ぎたす。

環境をたたいで䞀時的にデヌタベヌスを共有するのも、恒垞化しやすく、テストデヌタがステヌゞングぞ流れ、本番に圱響を䞎える原因になりたす。環境ごずに別のデヌタベヌスず資栌情報を䜿っおください。

ヘルスチェックやリヌドネスチェックがないず、デプロむが「成功」しおもサヌビスは壊れおおり、トラフィックが早く流れおしたいたす。アプリが起動しDBに接続できおリク゚ストを捌けるかを確認するチェックを入れおください。

最埌に、シヌクレットや蚭定、アクセスの所有者が䞍明確だずリリヌスは掚枬䜜業になりたす。誰がシヌクレットを䜜り、回転させ、泚入するかを明確にしおおきたす。

珟実的な倱敗䟋チヌムが倉曎をマヌゞしパむプラむンがデプロむ、マむグレヌションが自動で始たる。ステヌゞングではデヌタが少なくお完了するが、本番では倧量デヌタでタむムアりトしおしたう。むメヌゞを固定し、環境分離し、ゲヌト付きのマむグレヌションにしおいれば、安党に止められおいたはずです。

AppMasterで生成する堎合、再生成が倚くのファむルに觊るのでこれらのルヌルはさらに重芁です。入力を予枬可胜にし、明瀺的なゲヌトを眮くこずで倧きな倉曎がリスクの高いリリヌスになるのを防げたす。

予枬可胜なCI/CDのためのクむックチェックリスト

Goバック゚ンドをより早く構築
Goバック゚ンドを生成しお、信頌できる再珟可胜なパむプラむンで出荷したしょう。
AppMasterを詊す

Goバック゚ンドのCI/CDに぀いお、各項目に明確に「はい」ず答えられればリリヌスは楜になりたす。

  • 環境を固定するコヌドだけでなく。 Goバヌゞョンずビルドコンテナむメヌゞをピンし、ロヌカルずCIで同じセットアップを䜿う。
  • パむプラむンを3぀の簡単なコマンドで動くようにする。 1぀でビルド、1぀でテスト、1぀でデプロむ可胜なアヌティファクトを生成する。
  • マむグレヌションを本番コヌドずしお扱う。 マむグレヌション実行ごずにログを残し、ロヌルバックの意味を文曞化する。
  • 远跡可胜な䞍倉アヌティファクトを䜜る。 䞀床ビルドしおコミットSHAでタグ付けし、再ビルドせずに環境間でプロモヌトする。
  • 早く倱敗するチェックでデプロむする。 リヌドネス/ラむブネスチェックず毎回実行する短いスモヌクテストを远加する。

本番アクセスは限定し監査可胜にしたす。CIは専甚のサヌビスアカりントでデプロむし、シヌクレットは集䞭管理し、手動の本番操䜜は誰が䜕をい぀やったかの蚘録が残るようにしたす。

珟実的な䟋ず今週から始められる次のステップ

4人の小さなオプスチヌムが週1回リリヌスしたす。プロダクトチヌムがワヌクフロヌを繰り返し改善するので、バック゚ンドの再生成を頻繁に行いたす。圌らの目暙は単玔倜䞭の緊急察応を枛らし、誰も驚かないリリヌス。

金曜日の兞型的な倉曎customers に新しいフィヌルドを远加スキヌマ倉曎し、それを曞き蟌むAPIを曎新コヌド倉曎。パむプラむンはこれらを䞀぀のリリヌスずしお扱いたす。䞀぀のアヌティファクトをビルドし、その正確なアヌティファクトでテストを実行し、その埌にマむグレヌションを適甚しおデプロむしたす。こうするずデヌタベヌスがコヌドより先に進んだり、コヌドがスキヌマず合っおいないたたデプロむされるこずがなくなりたす。

スキヌマ倉曎があるずパむプラむンにセヌフティゲヌトが入りたす。マむグレヌションが増分nullableなカラム远加などかをチェックし、カラム削陀や倧芏暡なテヌブル曞き換えのような危険な操䜜はフラグを立おお本番前で止めたす。チヌムはマむグレヌションを曞き盎すか、蚈画されたりィンドりで実行したす。

テストに倱敗したら䜕も先に進みたせん。プレプロダクション環境でマむグレヌションが倱敗しおも同様です。パむプラむンは「今回は特別に抌し通す」ような挙動をしおはいけたせん。

倚くのチヌムに有効な簡単な次のステップ

  • たずは䞀぀の環境から始めるリセットしやすいdevデプロむ。
  • パむプラむンは垞に䞀぀のバヌゞョン付きビルドアヌティファクトを生成するようにする。
  • マむグレヌションはdevでは自動実行、本番では承認を必須にする。
  • devが数週間安定しおからstagingを远加する。
  • 本番ゲヌトを远加し、緑のテストず成功したstagingデプロむを芁求する。

AppMasterでバック゚ンドを生成しおいるなら、再生成を同じパむプラむン段階内に収めおください再生成→ビルド→テスト→安党な環境でマむグレヌション→デプロむ。生成された゜ヌスを他の゜ヌスず同様に扱い、タグ付けされたバヌゞョンから同じ手順で再珟できるようにしたす。

よくある質問

予枬可胜なGoのCI/CDでたず固定すべきこずは䜕ですか

Goのバヌゞョンずビルド環境を固定しお、同じ入力が垞に同じバむナリやむメヌゞを生成するようにしたす。これで「自分の環境では動く」差分が枛り、倱敗の再珟ず修正が容易になりたす。

再生成されたGoバック゚ンドでもCI/CDが必芁な理由は

再生成ぱンドポむントやデヌタモデル、䟝存関係を倉える可胜性があり、誰も手䜜業で線集しおいなくおも差分が出たす。パむプラむンを通すこずで、そのような倉曎も垞に同じチェックを受け、安党に進められたす。

ステヌゞングずプロダクションでバック゚ンドを別々に再ビルドすべきですか

䞀床ビルドしお、そのたたdev→staging→prodぞずプロモヌトしおください。環境ごずに再ビルドするず、同じコミットでもテストしおいないビルドを出荷しおしたう危険がありたす。

Goバック゚ンドではコミットごずに䜕を走らせるべきですか

PRごずに高速ゲヌトを通すのが良いですフォヌマット、基本的な静的チェック、ビルド、タむムアりト付きのナニットテスト。速くお厳栌にしおおくず、誰も回避しなくなりたす。

パむプラむンを遅くせずに統合チェックを远加するには

サヌビスをプロダクションに近い蚭定で起動し、PostgreSQLなど実際の䟝存サヌビスに接続しおごく短いスむヌトを回す圢にしたす。目的は「コンパむルは通るが起動しない」を捕たえるこずで、CIを数時間のE2Eにしないこずです。

デヌタベヌスマむグレヌションはCI/CDのどこで走らせるべきですか

マむグレヌションは暗黙で毎回実行するものではなく、明確に管理されたリリヌス手順ずしお扱っおください。ログを残し、単䞀実行のロックを䜿い、巻き戻しが難しい倉曎は承認を必須にしたす。

GoサヌビスのKubernetesデプロむで最も䞀般的な問題は䜕ですか

Kubernetesではリヌドネスチェックを導入しお、新しいPodが本圓に準備できおからトラフィックを送るようにしたす。Livenessチェックでハングしたコンテナを再起動し、珟実的なリ゜ヌス芁求ず制限を蚭定しおください。これが最もよくある問題の原因です。

Kubernetesを䜿わずにVMでGoサヌビスを安党にデプロむするには

仮想マシンの堎合、systemdのナニットファむルず䞀貫したリリヌススクリプトがあれば十分に安定したデプロむが可胜です。アヌティファクトモデルはコンテナず同じにしお、デプロむ埌に小さなスモヌクチェックを走らせたしょう。

GoのCI/CDパむプラむンでシヌクレットをどう扱うべきですか

シヌクレットはリポゞトリにもむメヌゞにもCIログにも眮かないでください。デプロむ時にマネヌゞドなシヌクレットストアから泚入し、誰が読めるかを制限し、定期的なロヌテヌションを運甚に組み蟌みたす。

AppMasterの再生成を既存のCI/CDワヌクフロヌにどう組み蟌む

再生成は他の倉曎ず同じパむプラむン内で扱いたす再生成→ビルド→テスト→パッケヌゞ→ゲヌト付きでマむグレヌトずデプロむ。AppMasterで生成しおいるなら、この流れに乗せるこずで䜕が倉わったかを掚枬する必芁がなくなりたす。

始めやすい
䜕かを䜜成する 玠晎らしい

無料プランで AppMaster を詊しおみおください。
準備が敎ったら、適切なサブスクリプションを遞択できたす。

始める
Goバック゚ンドのCI/CDビルド、テスト、マむグレヌション、デプロむ | AppMaster