From 3d60d52b58656d6a441a1dcdbf99732fe7bf15a5 Mon Sep 17 00:00:00 2001 From: Reinaldy Rafli Date: Fri, 22 Nov 2024 13:26:36 +0700 Subject: [PATCH] ref: mssql 2022 --- .github/workflows/mssql.yml | 50 +++++++++++++++++++++++++++++++++++++ mssql/Dockerfile | 17 +++++++++++++ mssql/configure-db.sh | 25 +++++++++++++++++++ mssql/entrypoint.sh | 7 ++++++ mssql/mssql.conf | 5 ++++ mssql/setup.sql | 6 +++++ 6 files changed, 110 insertions(+) create mode 100644 .github/workflows/mssql.yml create mode 100644 mssql/Dockerfile create mode 100755 mssql/configure-db.sh create mode 100755 mssql/entrypoint.sh create mode 100644 mssql/mssql.conf create mode 100644 mssql/setup.sql diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml new file mode 100644 index 0000000..ccbb606 --- /dev/null +++ b/.github/workflows/mssql.yml @@ -0,0 +1,50 @@ +name: Consul + +on: + push: + branches: + - master + +env: + REGISTRY: ghcr.io + IMAGE_NAME: aldy505/mssql-ci + +jobs: + build: + name: Build + runs-on: ubuntu-latest + timeout-minutes: 300 + permissions: + contents: read + packages: write + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Log in to the Container registry + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + flavor: | + latest=true + tags: | + type=sha + + - name: Build and push Docker image + uses: docker/build-push-action@v3 + with: + context: "{{defaultContext}}:mssql" + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/mssql/Dockerfile b/mssql/Dockerfile new file mode 100644 index 0000000..487cd7e --- /dev/null +++ b/mssql/Dockerfile @@ -0,0 +1,17 @@ +FROM mcr.microsoft.com/mssql/server:2022-latest + +RUN openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=mssql' -addext "subjectAltName = DNS:mssql" -keyout /etc/ssl/private/mssql.key -out /etc/ssl/certs/mssql.pem -days 7 +RUN chmod 400 /etc/ssl/private/mssql.key +RUN chmod 400 /etc/ssl/certs/mssql.pem +RUN mkdir -p /var/opt/mssql +COPY mssql.conf /var/opt/mssql/mssql.conf + + +# Create a config directory +RUN mkdir -p /usr/config +WORKDIR /usr/config + +# Bundle config source +COPY . /usr/config + +ENTRYPOINT ["./entrypoint.sh"] diff --git a/mssql/configure-db.sh b/mssql/configure-db.sh new file mode 100755 index 0000000..ecf215c --- /dev/null +++ b/mssql/configure-db.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Wait 60 seconds for SQL Server to start up by ensuring that +# calling SQLCMD does not return an error code, which will ensure that sqlcmd is accessible +# and that system and user databases return "0" which means all databases are in an "online" state +# https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-databases-transact-sql?view=sql-server-2017 + +DBSTATUS=1 +ERRCODE=1 +i=0 + +while [[ $DBSTATUS -ne 0 ]] && [[ $i -lt 60 ]] && [[ $ERRCODE -ne 0 ]]; do + i=$i+1 + DBSTATUS=$(/opt/mssql-tools/bin/sqlcmd -h -1 -t 1 -U sa -P $MYSQL_SA_PASSWORD -Q "SET NOCOUNT ON; Select SUM(state) from sys.databases") + ERRCODE=$? + sleep 1 +done + +if [ $DBSTATUS -ne 0 ] OR [ $ERRCODE -ne 0 ]; then + echo "SQL Server took more than 60 seconds to start up or one or more databases are not in an ONLINE state" + exit 1 +fi + +# Run the setup script to create the DB and the schema in the DB +/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $MYSQL_SA_PASSWORD -d master -i setup.sql diff --git a/mssql/entrypoint.sh b/mssql/entrypoint.sh new file mode 100755 index 0000000..4f27408 --- /dev/null +++ b/mssql/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# Start the script to create the DB and user +/usr/config/configure-db.sh & + +# Start SQL Server +/opt/mssql/bin/sqlservr diff --git a/mssql/mssql.conf b/mssql/mssql.conf new file mode 100644 index 0000000..4f3641d --- /dev/null +++ b/mssql/mssql.conf @@ -0,0 +1,5 @@ +[network] +tlscert = /etc/ssl/certs/mssql.pem +tlskey = /etc/ssl/private/mssql.key +tlsprotocols = 1.2 +forceencryption = 1 diff --git a/mssql/setup.sql b/mssql/setup.sql new file mode 100644 index 0000000..e1263cd --- /dev/null +++ b/mssql/setup.sql @@ -0,0 +1,6 @@ +/* +Enter custom T-SQL here that would run after SQL Server has started up. +*/ + +CREATE DATABASE $(MSSQL_DB); +GO \ No newline at end of file