Gogs+Jenkins+Docker による .NetCore ステップの自動デプロイ

Gogs+Jenkins+Docker による .NetCore ステップの自動デプロイ

環境説明

  • Tencent Cloud 軽量サーバー、構成1c 2g 6mb 、システムはubuntu 20.14 、Docker と Jenkins はこのサーバー上にインストールされています。
  • このサーバーには Synology 218+、Gogs が 1 台あります。

Dockerのインストール

古いDockerをアンインストールする

sudo apt-get 削除 docker docker-engine docker.io containerd runc

apt パッケージ インデックスを更新し、apt が HTTPS 経由でリポジトリを使用できるようにパッケージをインストールします。

sudo apt-getアップデート

sudo apt-get インストール \
  apt-transport-https \
  ca証明書\
  カール\
  gnupg \
  lsb リリース

Docker公式GPGキーを追加する

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Dockerをインストールする

sudo apt-get install docker-ce docker-ce-cli containerd.io

hello-world を実行して、Docker が正しくインストールされていることを確認します。出力Hello from Docker!はインストールが成功したことを示します。

sudo docker run hello-world

さまざまなシステムのインストール方法については、公式のDockerインストール手順を参照してください。

ゴグのインストール

Gogs は、Go 言語で開発された、軽量で簡単に構築できるセルフサービス Git サービスです。 Gogs を選んだ主な理由は、内部使用率が数 GB の Gitlab よりもはるかに軽量であることです。 Gogs はシステムのオーバーヘッドを大幅に削減し、実行時に 100 MB のメモリしか消費しません。私のGogsはSynology上で実行され、結果は同じです。どちらもDockerでホストされています。

Gogsイメージをプル

sudo docker pull gogs/gogs

Gogsファイルのマウントパスを作成する

mkdir -p /var/gogs

コンテナ6022を起動するとhttps、6080はhttpになります。正常に起動しているかはdocker psコマンドで確認できます。

docker run -d --name=my_gogs -p 6022:22 -p 6080:3000 -v /var/gogs:/data gogs/gogs

コンテナが起動したら、 http://xxxxxxxx:6080から Gogs の初期設定を実行します。

推奨されるデータベース タイプは、Linux に付属する SQLite3 です。これは、12 人程度のチームをサポートするのに十分です。ドメイン名: Gogs が配置されているサーバーのドメイン名または IP アドレスを入力します。 http ポート番号はコンテナの内部ポートと一致します。アプリケーション URL に Gogs のドメイン名ポートまたは IP ポートを入力します。[インストール] をクリックし、新しいユーザーを登録してログインします。

Gogsをインストールしたら、後で使用するために新しいデモリポジトリを作成します。

Gogs 公式ドキュメント

Docker で .NetCore サービスをホストする

新しいWebApiプロジェクトを作成する

プロジェクトにDockerFileファイルを追加して設定するだけです

#依存関係のバージョンを指定します。FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim 
ワークディレクトリ /app

コピー ./publish
WORKDIR /publish
# DockerコンテナをポートEXPOSE 80を公開するように設定する
# タイムゾーンを設定する RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' >/etc/timezone 
# プログラムエントリ ENTRYPOINT ["dotnet", "DemoWebApi.dll"]

API サービスを公開します。公開されたファイルに DockerFile ファイルがない場合、プロジェクト ファイルを手動で変更する必要があります。リリースが成功したら、公開されたファイルをサーバーで指定されたフォルダーにコピーします。

 <アイテムグループ>
        <なし更新="Dockerfile">
            <CopyToOutputDirectory>常に</CopyToOutputDirectory>
        </なし>
    </アイテムグループ>

サーバーにコピーしたリリース ファイルのルート パスに移動し、 docker build -t {REPOSITORY}:{TAG} .このコマンドは、DockerFile を通じて Docker イメージ ファイルを生成します。REPOSITORY はイメージの名前、TAG はタグです。たとえば、 docker build -t demo:v1 .


生成されたすべてのイメージを表示するには、 docker imagesコマンドを使用します。

イメージが正常に生成されたら、イメージを使用してコンテナを作成して実行できます。 docker run --name demoapi -dp 5009:80/tcp demo:v1コマンドを実行して、コンテナを作成して実行します。
-d: コンテナをバックグラウンドで実行し、コンテナ ID を返します。
-p: ホスト ポート: コンテナ ポートの形式でポート マッピングを指定します。コンテナ ポートは、プログラムが起動されるポートです。プロジェクトにハードコードすることをお勧めします。
-- name: コンテナ名

実行後、 docker psを使用して実行中のすべてのコンテナのステータスを表示できます。すべてのコンテナを表示するには、 docker ps -aコマンドを使用します。

Postmanを使用して、デプロイメントが成功したかどうかをテストします。

一般的なDockerコマンドをいくつか挙げる

  • docker restart {容器id} #コンテナを再起動します
  • docker start {容器id} #コンテナを起動する
  • docker attach {容器id} # これによりコンテナが終了し、attachによりユーザーはコンテナの標準出力を見ることができるようになります
  • docker attach {容器id} --sig-proxy=false # パラメータを追加しても同期終了は発生しません
  • docker exec -it {容器id} /bin/bash # コンテナに入るには、exec コマンドを使用してコンテナ内でコマンドを実行する必要があります。
  • docker logs {容器id} -f # 追跡ログ出力 -f 追跡ログ出力
  • docker rm -f {容器id} # 停止したコンテナを削除します
  • docker rmi {REPOSITORY:TAG} # 指定されたイメージを削除します
  • docker image prune # コンテナによって参照されていないイメージを削除します

この時点で、サービスは Docker でホストされていますが、リリースごとに新しいイメージを構築し、古いコンテナを停止して新しいコンテナを作成する必要があり、ワークロードが目に見えないほど増加します。 Jenkinsはこれを実行できます

Jenkinsのインストール

Jenkins は Java に依存しているため、Java SDK をインストールする必要があります。ここでは、Java 8 を選択します。

sudo apt-get で openjdk-8-jdk をインストールします

JenkinsのLTSバージョンのインストール

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key を追加 -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable バイナリ/ > \
    /etc/apt/sources.list.d/jenkins.list'
sudo apt-getアップデート
sudo apt-get でジェンキンスをインストールします

実行ステータスを確認するにはsystemctl status jenkins通常、出力は次のようになります。

Jenkins のデフォルト ポートは 8080 です。インストールが成功すると、 http://xxxx:8080からアクセスできます。最初のステップはロックを解除することです。インストールが成功すると、管理者パスワードが出力されます。コマンドcat /var/lib/jenkins/secrets/initialAdminPasswordを使用することもできます。

パスワードを入力した後、初期化ページに入り、推奨プラグインのインストールを選択します。

プラグインのインストールには時間がかかる場合があります。

完了したら、管理者アカウントを作成してログインし、システム管理に入り、プラグイン管理を選択して、 gogsプラグインを検索してインストールします。

インストール後、Jenkins を再起動する必要があります。リンクhttp://xxxx:8080/restartアクセスして「再起動」をクリックするか、 service jenkins restart実行して再起動します。

スクリプトの実行を容易にするには、Jenkins を root ユーザーとして実行する必要があります。 vim /etc/sysconfig/jenkinsまたはvim /etc/default/jenkinsファイルを編集し、 JENKINS_USERのコメントを解除し、値をJENKINS_USER="root"フォルダーの権限を変更します。

chown -R ルート:ルート /var/lib/jenkins
chown -R ルート:ルート /var/cache/jenkins
chown -R ルート:ルート /var/log/jenkins

Jenkinsの一般的な操作

  • service jenkins start
  • service jenkins restartを再起動するか、 http://xxxx:8080/restartにアクセスしてください。
  • service jenkins stopを停止するか、 http://xxxx:8080/exitにアクセスしてください。
  • 設定ファイルを再読み込みしますhttp://xxxx:8080/reload

Jenkinsによる自動化

サーバー上でプロジェクトをビルドする必要があるため、.NetCore 環境をインストールする必要があります。Microsoft の公式ドキュメントを参照して、自分でインストールすることができます。

新しく作成したプロジェクトをGogsリポジトリにプッシュし、リポジトリの詳細設定をクリックします。

Webフックを選択し、新しいGogs Webフックを追加します

Web フックを設定します。プッシュ アドレスの前に Jenkins アクセス リンクが付き、ジョブ名は自分で定義できます。プッシュ時にのみフックをトリガーするように選択することも、イベントを自分で選択することもできます。

追加後、再度「Web フックの管理」をクリックし、新しく作成したフックを選択して「プッシュのテスト」をクリックして正常かどうかを確認します。ジョブが定義されていないという例外がスローされた場合、フックが正常であることを意味します。他の例外の場合は、プッシュ アドレスが正しいかどうか、Jenkins 上の Gogs プラグインが正しくインストールされているかどうかを確認できます。

Jenkins ページに戻り、新しいタスクを作成します。タスク名は Gogs のジョブ名と同じです。「フリースタイル ソフトウェア プロジェクトのビルド」を選択します。

リポジトリ設定を追加します。リポジトリ URL はリポジトリのアドレスです。クリックしてリポジトリの資格情報を追加します。最後に、操作のブランチを指定します。

シェルスクリプトをビルドして実行を選択します。スクリプトはサーバー上に配置してここで呼び出すこともできます。便宜上、ここに記述するだけです。


# デモイメージが存在するか、または Docker イメージが存在するかを確認します | grep demo &> /dev/null
[ $? -ne 0 ]の場合
それから
   # 存在しない場合は処理しません echo "not existing demo"
それ以外
    # イメージが存在する場合、コンテナはデフォルトで実行されているとみなされます echo "existed demo"
   	# コンテナとイメージの削除を停止します docker stop demoapi
    docker rm -f デモapi
    docker rmi デモ:v1
フィ

# イメージを再構築して生成し、コンテナを実行します cd DemoWebApi/
# 指定したパスに公開する dotnet publish -c Release -o /publish
# イメージを生成するためのパスを入力し、コンテナを起動します cd /publish
docker build -t demo:v1 を実行します。
docker run --name demoapi -dp 5009:80/tcp demo:v1 

保存したら、「今すぐビルド」をクリックして確認します。ビルドが失敗した場合は、コンソール出力で詳細なビルド プロセスとエラー情報を確認できます。

Gogs 管理 Web フック ページに戻り、再度プッシュします。成功すると、Jenkins が自動的にビルドして公開します。その後は、Master ブランチにプッシュする限り、自動的に公開されます。


要約する

私は単純に自分の取り組みの全過程を記録しました。Jenkins と Docker には、使いながら徐々に理解する必要がある機能が他にもたくさんあります。

Gogs+Jenkins+Docker による .NetCore の自動デプロイの方法と手順についてはこれで終わりです。Docker による .NetCore の自動デプロイに関するその他の関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • ASP.NET Core 開発 Docker デプロイ
  • Linux CentOS の Docker に Asp.Net Core (.Net6) をデプロイする
  • Linux システム Docker への ASP.NET Core アプリケーションのデプロイのプロセス分析
  • Jenkins + Docker + ASP.NET Core の自動デプロイメントの問題について (落とし穴を避ける)
  • docker を使用して Asp.net コア アプリケーションをデプロイするための完全な手順
  • Asp.net Core Jenkins Docker のワンクリックデプロイの実装
  • ASP.NET Core Docker デプロイメントの詳細
  • .Net Core は Docker コンテナを展開します

<<:  MySQL で 2 つのセットの交差/差/和を取得する方法

>>:  JavaScript スロットリングとアンチシェイクに関する簡単な説明

推薦する

初心者のためのMySQL外部キーの設定方法

目次外部キーの役割mysql 外部キー設定方法要約する外部キーの役割データの一貫性、整合性を維持し、...

WeChatアプレットAmapマルチポイントルート計画プロセス例の詳細な説明

電話Amap API を呼び出す方法は? Amap が https://lbs.amap.com/a...

Vue3スタイルのCSS変数注入の実装

目次まとめ基本的な例モチベーションデザインの詳細コンパイルの詳細採用戦略練習するヒント適切なプロパテ...

6つのレイアウトでのFrameLayoutの使用

序文前回はLinearLayoutについて説明しました。今回はFrameLayoutの使い方を説明し...

HTML でのフォームとフォーム送信操作に関する情報のコレクション

ここでは、フォーム要素とフォーム送信に関する知識を紹介します。フォーム要素フォーム要素の DOM イ...

DockerでEurekaを設定する方法

ユーレカ: 1. JDKイメージを構築するEurekaコンテナを起動するjdkフォルダと必要なファイ...

Win32 MySQL 5.7.27 のインストールと設定方法のグラフィックチュートリアル

MySQL 5.7.27のインストールチュートリアルは以下のように記録され、皆さんと共有されています...

Vueはボトムクエリ関数を実装します

この記事では、ボトムクエリ機能を実装するためのVueの具体的なコードを例として紹介します。具体的な内...

Msyql トランザクション分離について知っておくべきこと

トランザクションとは何ですか?トランザクションは、データベース管理システムの実行プロセスにおける論理...

MySQL 8.0.13 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.13のインストールと設定のチュートリアルを参考までに紹介します。具...

MySQL 8.0 ディクショナリテーブル拡張の詳細な説明

MySQL のデータ ディクショナリは、データベースの重要なコンポーネントの 1 つです。INFOR...

JavaScript オブジェクトの組み込みオブジェクト、値型、参照型の説明

目次物体オブジェクト定義オブジェクトのメンバーを反復処理するJS組み込みオブジェクト数学オブジェクト...

テーブルタグ(TAGS)の詳細な紹介

テーブルの基本構文<table>...</table> - テーブルを定義し...

Docker イメージ管理の一般的な操作コード例

ミラーリングも Docker のコアコンポーネントの 1 つです。ミラーリングはコンテナ操作の基盤で...

HTML テーブル マークアップ チュートリアル (14): テーブル ヘッダー

<br />HTML 言語では、タグを使用してテーブルにタイトルを自動的に追加できます。...