バイブの展開Githubアクションで3 Dアプリ
13688 ワード
提出カテゴリ
DIY展開
バックストーリー
If you don't care for the backstory you can totally skip this chapter. And if you just want the complete script you can scroll to the end.
まずはバックストーリーから始めましょう.もし私が誰か知らないなら、私はpastemyst , ソートのpastebinクローン(実際にはpastebinより良い).それは安価な$ 5/m vULTIインスタンス(非常に良いVPSホスト)でホストされます.Vultr ref ), そして、Pestemystの巨大な2.0アップデート以来、1つのCPUと1 GBのRAMでそのインスタンスのプログラムを構築することは、アプリケーションの規模のために不可能でした.最大のメモリ使用状況は、コンパイル時に生成されるため、ビューテンプレートです.
これにはいくつかの解決策があった.最初にスワップメモリを使用していたが、スワップDMDの追加の2 GBがメモリ不足でクラッシュしたとしても失敗した.次に、私はマシン上でコンパイルし、SCPでサーバーにアップロードしようとしましたが、Alas、私の天才は長い間持続していませんでした.私は私のマシン上でアーチLinuxを実行します(私はアーチBTWを使用します)これはもちろん、最新のバージョンに更新されて存在したすべてのlibを持って、私のサーバーはUbuntu 18.04を実行している間(古代私は知っている).アーチを使用するクールな子供(私は涼しいです...?問題のライブラリはglibcでした.私はサーバー上で更新してみました(ソースからビルドできませんでした.それで、次の明らかな解決に我々は行きます.
VMSは素晴らしいことです、あなたの他のより良いOSの中の任意のバージョンの任意のOSを実行することができます.私はubuntuと同じバージョンをQemuを使ってVMにインストールし、その上にpastemystを構築し、サーバーにアップロードしました.そして最後にそれは働いた!それは長くて痛い過程でした、しかし、私はサーバー上で動いているpastemyst v 2を得ました、そして、すべてのユーザーは新しいバージョンでびっくりしました、そして、私のハードワークは払われました(しかし、私はまだそれからどんなお金も決してしません).このアプローチでは、VMを起動し、pastemystをビルドするのにしばらくかかりました(これはVMであるので、まだ高速化されていませんでした)、そして、私のアップロード速度は非常に遅いので、結局、それは効果的にサーバーに構築を得るために30分ほどかかりました.でも、ハ!私はより良い方法を見つけました、私はあなたがこれが起こると思っていなかったと賭けました、私の才能はまだその限界に達しませんでした!
Githubアクションの使用
それで、ある日退屈している間、私は、私がPestemystを構築して、サーバーにアップロードするために、私が空想的なギタブ動作(私がこれまであらゆるコミットを構築して、テストするためにこれまで使った)を使うことができると理解しました.それは少しの面倒をしました、しかし、私は働くためにそれを得ました、そして、結果はとても単純です.
どのように最終的な結果を得たかについて一歩ずつ進みましょう.まず、新しいワークフロースクリプトを作成する必要があります.relevant article ). ワークフローファイルは
.github/workflows/
.ですから、プログラムをすべてのコミットでメインブランチに展開しますか?いいえ、しかし、Githubはそのための解決策を持っています!実行するワークフローを設定できます
on: workflow_dispatch
そして、あなたは展開するたびに押して素敵な大きなボタンを持っているでしょう.あなたは十分なハードgoogled場合は、この新しいタグ/リリースで実行することができます.name: Deploy to server
on: workflow_dispatch
jobs:
deploy:
name: Deploy to server
runs-on: ubuntu-18.04
steps:
- uses: actions/[email protected]
Dをインストールするための別のステップを追加しましょう.この例ではlibscrypt依存関係をダウンロードして、すべてのサブモジュールをチェックしています.- name: install D
uses: dlang-community/[email protected]
with:
compiler: dmd-latest
- name: Install libscrypt
run: |
sudo apt-get install libscrypt0
sudo apt-get install libscrypt-dev
- name: Checkout submodules
uses: srt32/[email protected]
with:
args: git submodule update --init --recursive
今すぐリリースモードでプロジェクトを構築する.- name: build
run: dub build -b release
今面白い部分.もう2つの手順があり、結果のバイナリをサーバにコピーしてから、sshをサーバに移し、バイナリを適切な場所に移動し、それからgit引きを実行して、CSSやスタッフのようなすべての必要な資産を取得します.以下のようにローカルマシンにsshキーを生成します.
ssh-keygen -t rsa -b 4096 -C "[email protected]"
コマンドを実行すると、パスを要求します.GSITUB動作のためにこのsshキーを使用すると、デフォルトとしてそのままにしないでください.また、既存のsshキーを上書きすることがあります(この設定を終えた後にローカルマシンからキーを削除することができます).これは今、非常に重要な部分です、それが空のままにパスフレーズを求めているとき、私は何度もこの仕事をしていない自分自身を求めて何度もこの困難を学んだ?(パスフレーズを設定して、パスフレーズキーをアクションに設定することはできますが、テストしていません).
公開キーをコピーし、あなたの
~/.ssh/authorized_keys
あなたのサーバ上のファイル、これは提供された公開鍵と一致する秘密鍵を持つ誰でもサーバにsshに、そして、この場合githubを許します.今すぐあなたのgithubレポに行く必要があります設定に移動し、秘密のセクションを開きます.SSHのユーザー名、ホスト、ポート、および秘密キーの新しい秘密を追加する必要があります.SSHキーはSSHキーを生成するのに得た秘密鍵を含みます.

SCPステップをワークフローに追加できます.
- name: upload to server
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_SECRET }}
port: ${{ secrets.SSH_PORT }}
source: "bin/pastemyst"
target: "builds"
ソースとターゲットのフィールドは奇妙なので、その例からバイナリを終了する方法を設定する方法builds/bin/pastemyst
何らかの理由で、まあまあ、我々はサーバーにsshに行くととにかく移動します.そして最後のステップ.
- name: move binary and pull repo
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_SECRET }}
port: ${{ secrets.SSH_PORT }}
script: |
rm pastemyst/pastemyst
mv builds/bin/pastemyst pastemyst/pastemyst
cd pastemyst
git pull origin main
スクリプトは最初に現在のバイナリファイルを削除し、新しい場所を適切な場所に移動し、最終的にrepoを引きます.これでアクションを実行すると「実行時フロー」ボタンが表示されます

あなたが正しくすべてをしたならば、あなたの新しいプログラムは現在超高速を展開します、そして、あなたは他に何かをする必要はありません
systemctl restart service
, しかし、スクリプトに追加することもできます).しかし、それは最初に試してみません、そして、あなたは「更新された配備スクリプト」と10の失敗したワークフロー実行と言っている10コミットで終わります、しかし、CI/CDはそれのようです.
また、Githubのおかげで、私たちが無料でサーバーに悪いコードを実行できるようになりました.
フルワークフロー
ここでは、すべての怠惰な人々のための完全なワークフロースクリプト(または単に人が高速で行わ取得する).
name: Deploy to server
on: workflow_dispatch
jobs:
deploy:
name: Deploy to server
runs-on: ubuntu-18.04
steps:
- uses: actions/[email protected]
- name: install D
uses: dlang-community/[email protected]
with:
compiler: dmd-latest
- name: Install libscrypt
run: |
sudo apt-get install libscrypt0
sudo apt-get install libscrypt-dev
- name: Checkout submodules
uses: srt32/[email protected]
with:
args: git submodule update --init --recursive
- name: build
run: dub build -b release
- name: upload to server
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_SECRET }}
port: ${{ secrets.SSH_PORT }}
source: "bin/pastemyst"
target: "builds"
- name: move binary and pull repo
uses: appleboy/[email protected]
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_SECRET }}
port: ${{ secrets.SSH_PORT }}
script: |
rm pastemyst/pastemyst
mv builds/bin/pastemyst pastemyst/pastemyst
cd pastemyst
git pull origin main
追加情報
setup-dlang - ギタブアクション
git-actions - gthuubアクションでgitコマンドを実行する
scp-action - SSH経由でサーバーにファイルをコピーする
ssh-action - サーバ上のコマンドをssh上で実行する
Reference
この問題について(バイブの展開Githubアクションで3 Dアプリ), 我々は、より多くの情報をここで見つけました https://dev.to/codemyst/deploying-vibed-apps-with-github-actions-290fテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol