前回の方法を示しアリ雲がコンテナサービス実装CIを反映し、アリ雲Codepipelineを使用するように自動ユニットテスト、自動ビルドミラーを実行し、我々は自動的にコンパイルするコードを押した後、このことについて話して、ミラーが自動的に民間の倉庫にプッシュ。私たちの当初の目標はso'reちょうど小さなステップを設定し、それが自動的に/本番環境をテストするために配備されているからだから、このステップは、連続配信/展開(CD)です。
CDは、実際には二つの意味であります
(1)Continuous delivery (持续交付)
指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
(2)continuous deployment(持续部署)
指的是代码通过评审以后,自动部署到生产环境。
私はいつもCDだけで連続展開が意味することを考えて前に、最近、実際には二つの意味を持って前に慎重に情報を確認しました。二つの意味が、しかし同様の実際には、稼働環境、プログラムを実行するに配備されています。連続配信は通常、テスト環境、レビューのためのテスト・チームに展開、本番環境への展開による審査後の手段のテストの継続的な展開。ほとんどここので、それらが展開されたので、私は、壊れていないが、展開は同じ位置ではありません。
プロセス
画像への最後のプロセスが完了するために、シェルスクリプトを実行するために必要な手動のプロセスのバックの終了後、民間倉庫(アリクラウドコンテナミラーサービス)にプッシュ。私たちは、あなたがそのようなウェブフックとして、トリガ機構を必要とし、自動的にシェルスクリプトを持っているし、実行している、一緒に文字列に逆流する必要があります。幸いなことに、アリクラウドコンテナミラーリングサービスは、一緒に文字列に関数をトリガするプロセスを、私たちを可能にする、そのような機能を持っています。コンテナミラーリングサービスは、新しいイメージを受け取ることになりますほぼ同じウェブフック、このトリガ機能は、HTTP POSTリクエストを送信します。その後、我々は唯一のプログラムがアップ展開するように、シェルスクリプトを実行しているサーバーにPOSTリクエストを受信したときに、サーバー上のWebサービスを展開ミラーリングを引っ張って、コンテナを実行する必要があります。
新PublishHookサービス
POSTリクエストは、サービスの受け容器の画像に送られた上で、Webサービス要求処理を受けることが必要であると言われてきました。サービスは、ASP.NET MVCを使用することは非常に単純ですが、それを監視するだけの要求過剰です。ここで私は別のホイールAserverの使用https://github.com/kklldog/AServerを。
1. PublishHookという名前のコンソールプログラムを作成します
2. nugetインストールAserverの
3.プログラムの主な機能を変更します。
using Agile.FrameworkNetCore.Log;
using System;
using System.Diagnostics;
namespace PublishHook
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("PublishHook is running now !");
var server = new Agile.AServer.Server();
server.AddHandler(new Agile.AServer.HttpHandler()
{
Method = "POST",
Path = "/api/hook",
Handler = (req, resp) =>
{
string shell_name = req.Query.shell;
if (!string.IsNullOrEmpty(shell_name))
{
RunShell(shell_name);
}
return resp.Write("ok");
}
});
server
.SetIP("0.0.0.0")
.SetPort(9000)
.Run();
Console.Read();
}
static void RunShell(string fileName)
{
var processStartInfo = new ProcessStartInfo(fileName) { RedirectStandardOutput = true };
var process = Process.Start(processStartInfo);
if (process == null)
{
Console.WriteLine("Can not run shell .");
}
else
{
using (var sr = process.StandardOutput)
{
while (!sr.EndOfStream)
{
var str = sr.ReadLine();
Console.WriteLine(str);
Logger.Info(str);
}
if (!process.HasExited)
{
process.Kill();
}
}
}
}
}
}
ポート9000をリスニングHTTP Serverを起動し、HTTPハンドラを追加し、要求を受けた、のQueryStringは、スクリプトの名前を取得し解析して、スクリプトを実行します。
ファイル名を指定して実行publish_hook
sudo dotnet restore
sudo dotnet publish
コマンドプログラムを使用して、このリリースを公開し、サーバーにコピーさDOTNET。
sudo dotnet PublishHook.dll
DOTNETは、サーバー上のサービスを実行するには、このコマンドを使用します。注意:これは、ホスト・オペレーティング・ドッキングウィンドウへのシェルスクリプトを実行する必要があるため、このサービスは、ドッキングウィンドウの実行を使用することはできません。このサービスは、コンテナで実行されている場合は、そのコンテナに対する実行シェル、そして、それがドッキングウィンドウ環境のホストを操作することはできません。
プログラムディレクトリに最後の新しいpublish_cicd_test.shスクリプトファイルをコピーし、許可PublishHookを与えます
PublishHookプログラムディレクトリに最後の新しいpublish_cicd_test.shスクリプトファイルをコピーし、プログラムは、ルートディレクトリから再読み込みすることができます。
chmod +x publish_cicd_test.sh
シェルスクリプトの実行権限の割り当てにはchmod + Xを使用してください
新しいトリガコンテナミラーサービスで
トリガーを作成するためにクリックして
新しいインターフェイスでは、トリガー、トリガーのURLの名前を記入するが。これはPublishHookを聴くためのURLアドレスです
テスト
サービスのトリガーコンテナ良好な画像を設定した後、私たちの設定作業は基本的に完成します。さんがプッシュ自動展開が成功することはできません見た後、Giteeにプッシュその後、CoreCICDTestプロジェクトを変更してみましょう。
@{
ViewData["Title"] = "Home Page";
}
<h3>
.NET CORE CICD TEST -- V 3.0
</h3>
修改home/index首页,从V2.0改为V3.0,然后使用git push命令推送代码。等待一会后,访问一下CoreCICDTest的网址。
Wow!可以看到我们的网址已经自动部署成功了,终于完成了我们一开始设定的目标。
总结
回顾整个过程,我们可以发现各个服务之间虽然是彼此独立,但是我们可以通过WebHook功能串联起来。甚至最后我们自己定义了一个WebHook的监听程序来替我们执行对应的脚步。其实通过这种思想我们可以把更多的流程串联起来,实现更多自动化流程。
这次我们顺利的使用阿里云的Codepipeline、容器镜像服务,实现了最基本的CICD。现在各大云服务厂商基本都提供了很多基础功能,而且大部分是免费的,有效的利用这些服务可以节省宝贵的时间,开发者可以更专注在核心业务上面。