wip
All checks were successful
Release CI action / build-and-push-container (push) Successful in 35s
All checks were successful
Release CI action / build-and-push-container (push) Successful in 35s
This commit is contained in:
parent
7e84b198fc
commit
02a84b7d37
24
.gitea/workflows/build.yml
Normal file
24
.gitea/workflows/build.yml
Normal file
@ -0,0 +1,24 @@
|
||||
name: Release CI action
|
||||
run-name: ${{ gitea.repository }} release
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build-and-push-container:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: build container
|
||||
run: docker build -t git.gtz.dk/${{ gitea.repository }}:latest .
|
||||
- name: login
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
# NOTE: See https://gitea.com/gitea/docs/pulls/77/files
|
||||
registry: git.gtz.dk
|
||||
username: ${{ gitea.actor }}
|
||||
password: ${{ secrets.PACKAGE_TOKEN }}
|
||||
- name: push container
|
||||
run: docker push git.gtz.dk/${{ gitea.repository }}:latest
|
@ -7,4 +7,6 @@ ADD hugo.toml /hugo/hugo.toml
|
||||
ADD content /hugo/content
|
||||
ADD static /hugo/static
|
||||
ADD shortcodes /hugo/layouts/shortcodes
|
||||
CMD ["hugo", "serve", "--bind", "0.0.0.0"]
|
||||
ENV PORT=1313
|
||||
EXPOSE $PORT
|
||||
CMD hugo serve --bind 0.0.0.0 --port $PORT
|
||||
|
@ -54,7 +54,9 @@ RUN git clone https://github.com/yihui/hugo-xmin.git themes/hugo-xmin
|
||||
ADD hugo.toml /hugo/hugo.toml
|
||||
ADD content /hugo/content
|
||||
ADD static /hugo/static
|
||||
CMD ["hugo", "serve", "--bind", "0.0.0.0"]
|
||||
ENV PORT=1313
|
||||
EXPOSE $PORT
|
||||
CMD hugo serve --bind 0.0.0.0 --port $PORT
|
||||
```
|
||||
|
||||
For now, I am just using the built-in server in `hugo`, but it should be possible to serve using `nginx`.
|
||||
@ -104,27 +106,69 @@ Then we can use this new shortcode like so:
|
||||
|
||||
{{< centered image="/example.png" >}}
|
||||
|
||||
Yes! Now we're cooking with gas! ... or atleast cooking with something.
|
||||
Yes! Now we're cooking with gas! ... or atleast cooking with something. Note that this image centering trick does not work in [reader mode](https://support.mozilla.org/en-US/kb/firefox-reader-view-clutter-free-web-pages).
|
||||
|
||||
## Conclusion
|
||||
We have made a docker file for automatically downloading, generating and serving a simple `hugo` blog site.
|
||||
Personally, I would've liked the `static` and `shortcodes` directories to not exist, but blogposts need images and it needs to center them, so they are a necessary evil.
|
||||
Could we make the directory structure better and cleaner? Probably yes.
|
||||
Will I make it better for this blog in the future? Probably yes.
|
||||
Will I make another post when I do that? Probably yes!
|
||||
|
||||
If you want to just manually build and run docker image on your website server, feel free to stop reading here.
|
||||
The next section really elevates the publishing flow to a whole another level though.
|
||||
The next section concerns about hosting, orchestrating and deploying the site automatically, but it's totally not required.
|
||||
|
||||
# Hosting and Deployment
|
||||
# Deployment
|
||||
Being able to build and launch the docker image is nice and can suffice for smaller projects.
|
||||
Yes, this blog is a small project and the manual method should be more than enough, but I also play [factorio](https://store.steampowered.com/app/427520/Factorio/) (highly recommend it!), so I _hvae_ to automate everything that is tedious.
|
||||
I also have other projects that I host on my VPS (Virtual Private Server) such my portfolio site [gtz.dk](https://gtz.dk) and a [gitea instance](https://git.gtz.dk/) amongst other things.
|
||||
|
||||
## Continuous Integration
|
||||
This section
|
||||
I am using my [personal gitea instance](git.gtz.dk/agj/blog) to host the source code for this blog - which means that I will be using the integrated CI system there, but you can use whichever CI service you'd like.
|
||||
The general concepts of the workflow should be fairly easy to translate to any kind of CI
|
||||
I am using my personal [gitea instance](https://git.gtz.dk/agj/blog) to host the source code for this blog - which means that I will be using the integrated CI system there, but you can use whichever CI service you'd like.
|
||||
The general concepts of the workflow should be fairly easy to translate to any kind of CI, but this is how my setup looks like:
|
||||
|
||||
<!-- TODO: Implement the fucking thing -->
|
||||
```yaml
|
||||
name: Release CI action
|
||||
run-name: ${{ gitea.repository }} release
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
This setup also gives us the possibility of performing traditional code-review before releasing by using [pull requests]().
|
||||
jobs:
|
||||
build-and-push-container:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: build container
|
||||
run: docker build -t git.gtz.dk/${{ gitea.repository }}:latest .
|
||||
- name: login
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
# NOTE: See https://gitea.com/gitea/docs/pulls/77/files
|
||||
registry: git.gtz.dk
|
||||
username: ${{ gitea.actor }}
|
||||
password: ${{ secrets.PACKAGE_TOKEN }}
|
||||
- name: push container
|
||||
run: docker push git.gtz.dk/${{ gitea.repository }}:latest
|
||||
```
|
||||
|
||||
This may look a bit overwhelming if you don't know [Github Actions](https://docs.github.com/en/actions), but it is really quite straight forward.
|
||||
Every time we push a commit to the `main` branch, we run the job named `build-and-push-container`.
|
||||
In the job, we first download our repository with the `actions/checkout@v4` action, then we build the container using `docker build` (we make sure to accurately tag the image), then we log in to the container registry that we want to host the container at using the `docker/login-action@v3` action, and the we simply `docker push` the container image.
|
||||
|
||||
Make sure to replace the `git.gtz.dk` website mentions with your own github hosting service (whether self-hosted, or `github.com`) and replace the `gitea/GITEA` mentions with `github/GITHUB` instead.
|
||||
Note that the syntax is extemely similar to GitHub Actions - in fact Gitea Actions are trying to be 1 to 1 compatible with GitHub Actions, so it should be relatively straight forward.
|
||||
|
||||
This setup also gives us the possibility of performing traditional code-review before releasing by using [pull requests](https://docs.gitea.com/next/usage/pull-request?_highlight).
|
||||
This should empower us to identify and correct issues (e.g. spelling mistakes or whatever) before they are pushed to the official website.
|
||||
|
||||
## Continuous Delivery
|
||||
With a docker image readily available
|
||||
I will probably make a post about how to host a private gitea instance with an actions runner and all that jazz. For now, I will consider that particular rabbit hole out-of-scope.
|
||||
|
||||
### Orchestration
|
||||
I personally am a big fan of the simplicity of [portainer](), as it scales really well when doing perosnal server stuff
|
||||
This was the most difficult thing to do. We are _almost_ there.
|
||||
|
||||
## Continuous Delivery
|
||||
With a docker image readily available, we can automatically deploy the blog when we push it!
|
||||
|
||||
I personally am a big fan of the simplicity of [portainer](https://www.portainer.io/), as it scales really well when doing perosnal server stuff.
|
||||
|
Loading…
x
Reference in New Issue
Block a user