最終的にAKSにデプロイするまでのCICDを構築していきたいと思っています。
まずは、コンテナで動かすまで
開発デバイスの環境
コンテナを使っていきたいので、また、開発はVisual Studioを使う。
そのために以下をインストールしておく。
- Visual Studio2022
- Docker desktop
プログラム作成
とりあえず、コードはこんな感じにしておく。単体テスト書く段階になったらリファクタリングしていくつもり。
現在時刻と数字の"1"をDBにInsertするだけの簡単なプログラム。
using System;
using System.Data.SqlClient;
namespace SqlServerOperation
{
class Program
{
static void Main(string[] args)
{
string server = "192.168.10.13,1433"; // ホスト名と動的に割り当てられたポート
string database = "TestDB"; // データベース名
string username = "sa";
string password = "P@$$w0rd";
string connectionString = $"Server={server};Database={database};User Id={username};Password={password};";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
//現在日時取得
DateTime now = DateTime.Now;
// テーブルに挿入する数値
int testNum = 1;
//データ登録
string insertQuery = "INSERT INTO TestTable (date,num) VALUES (@Value1, @Value2)";
using (SqlCommand command = new SqlCommand(insertQuery, connection))
{
command.Parameters.AddWithValue("@Value1", now);
command.Parameters.AddWithValue("@Value2", testNum);
command.ExecuteNonQuery();
}
Console.WriteLine("Data inserted successfully.");
}
}
}
}
using System.Data.SqlClientしているのに、SqlConnectionとかでCS1069エラーになっている。
調べたところ、System.Data.SqlClientをNugetしないといけないらしい。
感覚的には、using System.Data.SqlClientのところがエラーになるんじゃないの?って思ってしまうんだけど、そういうもんなのかなぁ。と思いながらNuget
とりあえず、エラー無くなった。
Dockerコンテナ化対応(Docker Compose)
開発デバイス上でのDockerコンテナを使ったCICD環境は、Docker Cmposeが良いとのことなので、
プロジェクトを右クリックし、「追加」 > 「コンテナーオーケストレーターのサポート」を選択
Windowsライセンスのこととか考えたくないのでLinuxで
docker-compose.ymlと
Dockerfileが自動で作成
デバッグ実行が、"Docker Compose"に変わった。
DBはまだないけど、デバッグ実行。
あたりまえだけどDB接続エラー。それはいいとして、コンテナを見てみる
コンテナが作られて動いてる
っていうか、コンテナイメージのほうを見てみると脆弱性が21あるんだけど
いちおう、12日前に作られたイメージっぽいけど・・・
dockerfileの中で、apt update upgradeしようとしたけど
.NETの公式DockerイメージはMicrosoftが提供し、セキュリティパッチを含む定期的な更新が行われています。一般的に、これらのイメージに対して apt-get update や apt-get upgrade を実行することは、特に必要がない限り推奨されません。
とのことなので、止めとくことにした。
デバッグのとき接続する用のDB作成
このプログラムが接続しに行くDBを作成。
UbuntuベースのSQLServer Dockerコンテナを使う。
Microsoft SQL Server - Ubuntu based images by Microsoft | Docker Hub
単体テスト用はDocker Composeを使ってコンテナを作るつもりだが、デバッグ用は単純にコンテナを稼働させておくだけにしておく。
SQLServer2022のイメージを使う。まずはdocker pull
今のところ特に何か理由があるわけではないけど、SQL Server照合順序を"Japanese_CI_AS"に、コンテナの名前を"sqlserver_express_debug"にして、1433ポートをマッピング。
コンテナが稼働したので、
標準出力がコンテナのログとして出力されていることを確認
データがDBに登録されたことを確認
いったんこれで区切って、次は単体テストを作ることを行う