From 3e0130a7672694f5a11b7e2c0b56e0ba6a14f528 Mon Sep 17 00:00:00 2001 From: Reinaldy Rafli Date: Fri, 22 Nov 2024 13:44:12 +0700 Subject: [PATCH] ref(mssql): explicitly use ubuntu 20 --- .github/workflows/mssql.yml | 52 ++++++++++++++++++++++----- {mssql => mssql-2019}/Dockerfile | 2 +- {mssql => mssql-2019}/configure-db.sh | 0 {mssql => mssql-2019}/entrypoint.sh | 0 {mssql => mssql-2019}/mssql.conf | 0 {mssql => mssql-2019}/setup.sql | 0 mssql-2022/Dockerfile | 17 +++++++++ mssql-2022/configure-db.sh | 25 +++++++++++++ mssql-2022/entrypoint.sh | 7 ++++ mssql-2022/mssql.conf | 5 +++ mssql-2022/setup.sql | 6 ++++ 11 files changed, 105 insertions(+), 9 deletions(-) rename {mssql => mssql-2019}/Dockerfile (88%) rename {mssql => mssql-2019}/configure-db.sh (100%) rename {mssql => mssql-2019}/entrypoint.sh (100%) rename {mssql => mssql-2019}/mssql.conf (100%) rename {mssql => mssql-2019}/setup.sql (100%) create mode 100644 mssql-2022/Dockerfile create mode 100755 mssql-2022/configure-db.sh create mode 100755 mssql-2022/entrypoint.sh create mode 100644 mssql-2022/mssql.conf create mode 100644 mssql-2022/setup.sql diff --git a/.github/workflows/mssql.yml b/.github/workflows/mssql.yml index 6b1756e..349b3df 100644 --- a/.github/workflows/mssql.yml +++ b/.github/workflows/mssql.yml @@ -5,13 +5,10 @@ on: branches: - master -env: - REGISTRY: ghcr.io - IMAGE_NAME: aldy505/mssql-ci jobs: - build: - name: Build + build-2022: + name: Build MSSQL 2022 runs-on: ubuntu-latest timeout-minutes: 300 permissions: @@ -27,7 +24,7 @@ jobs: - name: Log in to the Container registry uses: docker/login-action@v2 with: - registry: ${{ env.REGISTRY }} + registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} @@ -35,7 +32,7 @@ jobs: id: meta uses: docker/metadata-action@v4 with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + images: ghcr.io/aldy505/mssql-2022 flavor: | latest=true tags: | @@ -44,7 +41,46 @@ jobs: - name: Build and push Docker image uses: docker/build-push-action@v3 with: - context: "{{defaultContext}}:mssql" + context: "{{defaultContext}}:mssql-2022" + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + build-2019: + name: Build MSSQL 2019 + 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: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/aldy505/mssql-2019 + flavor: | + latest=true + tags: | + type=sha + + - name: Build and push Docker image + uses: docker/build-push-action@v3 + with: + context: "{{defaultContext}}:mssql-2019" push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} diff --git a/mssql/Dockerfile b/mssql-2019/Dockerfile similarity index 88% rename from mssql/Dockerfile rename to mssql-2019/Dockerfile index 487cd7e..bb0c835 100644 --- a/mssql/Dockerfile +++ b/mssql-2019/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/mssql/server:2022-latest +FROM mcr.microsoft.com/mssql/server:2022-CU16-ubuntu-20.04 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 diff --git a/mssql/configure-db.sh b/mssql-2019/configure-db.sh similarity index 100% rename from mssql/configure-db.sh rename to mssql-2019/configure-db.sh diff --git a/mssql/entrypoint.sh b/mssql-2019/entrypoint.sh similarity index 100% rename from mssql/entrypoint.sh rename to mssql-2019/entrypoint.sh diff --git a/mssql/mssql.conf b/mssql-2019/mssql.conf similarity index 100% rename from mssql/mssql.conf rename to mssql-2019/mssql.conf diff --git a/mssql/setup.sql b/mssql-2019/setup.sql similarity index 100% rename from mssql/setup.sql rename to mssql-2019/setup.sql diff --git a/mssql-2022/Dockerfile b/mssql-2022/Dockerfile new file mode 100644 index 0000000..d6289cc --- /dev/null +++ b/mssql-2022/Dockerfile @@ -0,0 +1,17 @@ +FROM mcr.microsoft.com/mssql/server:2019-CU29-GDR1-ubuntu-20.04 + +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-2022/configure-db.sh b/mssql-2022/configure-db.sh new file mode 100755 index 0000000..ecf215c --- /dev/null +++ b/mssql-2022/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-2022/entrypoint.sh b/mssql-2022/entrypoint.sh new file mode 100755 index 0000000..4f27408 --- /dev/null +++ b/mssql-2022/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-2022/mssql.conf b/mssql-2022/mssql.conf new file mode 100644 index 0000000..4f3641d --- /dev/null +++ b/mssql-2022/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-2022/setup.sql b/mssql-2022/setup.sql new file mode 100644 index 0000000..e1263cd --- /dev/null +++ b/mssql-2022/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