From 20a993d258fbf74b2f36164b3c0dfec17590810f Mon Sep 17 00:00:00 2001 From: Matthew McKinnon Date: Sun, 22 Sep 2024 01:27:39 +1000 Subject: [PATCH] feat: new post 21-09-2024 --- .eleventy.js | 22 ++-- package-lock.json | 36 ++++- package.json | 1 + src/assets/img/gitea-action-successful.png | Bin 0 -> 24314 bytes src/assets/img/gitea-secrets.png | Bin 0 -> 16883 bytes .../posts/2024/09/21-WebsiteDeployment.md | 124 ++++++++++++++++++ src/css/global.css | 8 ++ 7 files changed, 180 insertions(+), 11 deletions(-) create mode 100644 src/assets/img/gitea-action-successful.png create mode 100644 src/assets/img/gitea-secrets.png create mode 100644 src/blog/posts/2024/09/21-WebsiteDeployment.md diff --git a/.eleventy.js b/.eleventy.js index c9232cc..6d835c3 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -1,28 +1,35 @@ const blogTools = require("eleventy-plugin-blog-tools"); const markdownIt = require("markdown-it"); const markdownItAttrs = require("markdown-it-attrs"); +const markdownItAnchor = require("markdown-it-anchor"); const syntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight"); - - -// Import prior to `module.exports` within `.eleventy.js` const { DateTime } = require("luxon"); - module.exports = function(eleventyConfig) { const mdOptions = { html: true, breaks: true, linkify: true, }; + const markdownLib = markdownIt(mdOptions) .use(markdownItAttrs) + .use(markdownItAnchor, { + permalink: markdownItAnchor.permalink.linkInsideHeader({ + // Change the symbol to a link icon, e.g., "🔗" + symbol: '🔗', // Change this to whatever symbol you want + class: 'anchor-link', // You can style this class with CSS + ariaHidden: false, + tabIndex: -1, + before: '', // Leave empty to not add anything before the icon + }) + }) .disable("code"); eleventyConfig.addFilter("postDate", (dateObj) => { return DateTime.fromJSDate(dateObj).toLocaleString(DateTime.DATE_MED); }); - - + eleventyConfig.setLibrary("md", markdownLib); eleventyConfig.setUseGitIgnore(false); @@ -38,7 +45,7 @@ module.exports = function(eleventyConfig) { eleventyConfig.setTemplateFormats("html,njk,md"); eleventyConfig.addCollection('posts', function(collectionApi) { - return collectionApi.getFilteredByGlob('src/blog/posts/**/*.md') + return collectionApi.getFilteredByGlob('src/blog/posts/**/*.md'); }); eleventyConfig.addPlugin(blogTools); @@ -46,7 +53,6 @@ module.exports = function(eleventyConfig) { return { passthroughFileCopy: true, - dir: { input: 'src', includes: '_includes', diff --git a/package-lock.json b/package-lock.json index 3d5ee3e..c754830 100644 --- a/package-lock.json +++ b/package-lock.json @@ -128,6 +128,7 @@ "lodash.deburr": "^4.1.0", "lru-cache": "^10.4.3", "luxon": "^3.5.0", + "markdown-it-anchor": "^9.2.0", "maximatch": "^0.1.0", "mdurl": "^1.0.1", "merge2": "^1.4.1", @@ -652,6 +653,28 @@ "@types/node": "*" } }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "peer": true + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "peer": true, + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "peer": true + }, "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", @@ -2901,7 +2924,6 @@ "version": "13.0.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", - "dev": true, "dependencies": { "argparse": "^2.0.1", "entities": "~3.0.1", @@ -2913,6 +2935,15 @@ "markdown-it": "bin/markdown-it.js" } }, + "node_modules/markdown-it-anchor": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-9.2.0.tgz", + "integrity": "sha512-sa2ErMQ6kKOA4l31gLGYliFQrMKkqSO0ZJgGhDHKijPf0pNFM9vghjAh3gn26pS4JDRs7Iwa9S36gxm3vgZTzg==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, "node_modules/markdown-it-attrs": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/markdown-it-attrs/-/markdown-it-attrs-4.2.0.tgz", @@ -2928,8 +2959,7 @@ "node_modules/markdown-it/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/maximatch": { "version": "0.1.0", diff --git a/package.json b/package.json index 80bf1f2..054bf56 100644 --- a/package.json +++ b/package.json @@ -146,6 +146,7 @@ "lodash.deburr": "^4.1.0", "lru-cache": "^10.4.3", "luxon": "^3.5.0", + "markdown-it-anchor": "^9.2.0", "maximatch": "^0.1.0", "mdurl": "^1.0.1", "merge2": "^1.4.1", diff --git a/src/assets/img/gitea-action-successful.png b/src/assets/img/gitea-action-successful.png new file mode 100644 index 0000000000000000000000000000000000000000..251c6cf3281eb547783b22abf97d961256c76a6d GIT binary patch literal 24314 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 LG9jNn|KmRaijGaC literal 0 HcmV?d00001 diff --git a/src/assets/img/gitea-secrets.png b/src/assets/img/gitea-secrets.png new file mode 100644 index 0000000000000000000000000000000000000000..8b206a69e0cfe6210e6d6be8067dbf67be30b760 GIT binary patch literal 16883 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 A@c;k- literal 0 HcmV?d00001 diff --git a/src/blog/posts/2024/09/21-WebsiteDeployment.md b/src/blog/posts/2024/09/21-WebsiteDeployment.md new file mode 100644 index 0000000..ac63c04 --- /dev/null +++ b/src/blog/posts/2024/09/21-WebsiteDeployment.md @@ -0,0 +1,124 @@ +--- +layout: layouts/post.njk +title: Continuous Integration & Continuous Deployment +description: Website Deployment using CI/CD Piplines +date: 2024-09-21 +author: Matthew McKinnon +--- + + +### {{ description }} + +
+ +![](https://cd.foundation/wp-content/uploads/sites/78/2020/09/devops.png){width=800} + +
+ +Since the reset of the website, I have been working on getting it to auto build and deploy using [Gitea Actions](https://docs.gitea.com/usage/actions/overview). Which is similar and compatible to [GitHub Actions](https://github.com/features/actions) + +Before implementing the action it was a manual process which required using docker commands to login, build and push the image to the container registry. + + + +### Why use CI/CD? + +It takes the manual process steps away and does them for you, helping you to avoid missing any steps and avoiding errors. This also makes the interaction seamless and automated. + +### Setting up the Aciton + +To setup the action we first needed to create some "secrets" in the repo. Secrets are secure variables that are requied to interact with systems. Such as passwords, usernames, SSH Keys etc. + +![gitea secrets](/assets/img/gitea-secrets.png) + +After populating our secrets file we can then create our ```.gitea/workflows/build.yml``` file. This file contains all the steps to build, test and deploy the container. + +{% raw %} +```yml +on: push +jobs: + build-node: + runs-on: ubuntu-latest + container: + image: catthehacker/ubuntu:act-latest + steps: + - name: checkout repo + uses: actions/checkout@v4 + + - name: Use Node.js + uses: actions/setup-node@v4 + + - name: Install Node Dependencies + run: npm ci + + - name: Build 11ty Site + run: npm run build --if-present + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to DockerHub + uses: docker/login-action@v3 + with: + registry: git.comprofix.com + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: ./ + file: ./Dockerfile + push: true + tags: git.comprofix.com/mmckinnon/comprofix.com:latest + + publish: + runs-on: ubuntu-latest + steps: + - name: checkout repo + uses: actions/checkout@v4 + + - name: Publish Website + run: | + mkdir ~/.ssh + echo "${{ secrets.SSH_KNOWN_HOSTS }}" >> ~/.ssh/known_hosts + chmod 644 ~/.ssh/known_hosts + eval $(ssh-agent -s) + ssh-add <(echo "${{ secrets.SSH_PRIVATE_KEY }}") + ssh administrator@comprofix.com "cd /opt/comprofix; docker compose down" || true + scp docker-compose.yml administrator@comprofix.com:/opt/comprofix + ssh administrator@comprofix.com "cd /opt/comprofix; docker compose pull; docker compose up -d" +``` +{% endraw %} + +### build.yml explained + +* ```yml + on: push + ``` + This tells the action to run when code is pushed to the repo. +* ```yml + runs-on: ubuntu-latest + container: + image: catthehacker/ubuntu:act-latest + ``` + This specified the "container" to use to run all the steps on. This was crucial as running without a "conatiner" would fail as not all required dependencies where available +* ```yml + jobs: + build-node: + ... + publish: + ``` + These are the names of the separate jobs for the build action. The build node will build the site and create the new docker container and push to the registry. The publish will connect the host running the container and restart using the new container. +* ```yml + steps: + ``` + Each job has a list of steps it performs on the code. Most of these a pretty self explaining on what they do. Everything from check out the code. Setup Node environment and build. Run the docker commands to login to the registry, build the container and push. Then the last job steps connect the host and pull the new container and start. + + +### Gitea Action Completes + +Once the new code was commited to the repo the Action was able to complete successfully. + +![alt text](/assets/img/gitea-action-successful.png){width=1200} + diff --git a/src/css/global.css b/src/css/global.css index dd9772a..424b832 100644 --- a/src/css/global.css +++ b/src/css/global.css @@ -1,3 +1,11 @@ +.anchor-link { + margin-left: 0.5em; + font-size: 0.8em; /* Adjust size as needed */ + text-decoration: none; +} + + + /* styles.css */ :root { --bg-color: lightgrey;