Skip to content

Commit c38c3e3

Browse files
Merge pull request #1 from bennu/feat/ci-cd
Feat/ci cd
2 parents 52266b3 + b78e020 commit c38c3e3

File tree

7 files changed

+451
-484
lines changed

7 files changed

+451
-484
lines changed

.dockerignore

Lines changed: 0 additions & 5 deletions
This file was deleted.

.github/workflows/build-image.yml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: Build Docker Image
2+
on:
3+
push:
4+
5+
jobs:
6+
build:
7+
runs-on: ubuntu-latest
8+
container:
9+
image: gcr.io/kaniko-project/executor:v1.24.0-debug
10+
permissions:
11+
contents: read
12+
packages: write
13+
timeout-minutes: 15
14+
env:
15+
GIT_USERNAME: ${{ github.actor }}
16+
GIT_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
17+
IMAGE_TAG: latest
18+
DOCKERFILE: ${{ secrets.DOCKERFILE || './Dockerfile.dev' }}
19+
IMAGE_NAME: ghcr.io/${{ github.repository }}
20+
IMAGE_REGISTRY_URL: ${{ secrets.IMAGE_REGISTRY_URL || 'https://ghcr.io' }}
21+
IMAGE_REGISTRY_USER: ${{ secrets.IMAGE_REGISTRY_USER || github.actor }}
22+
IMAGE_REGISTRY_PASSWORD: ${{ secrets.IMAGE_REGISTRY_PASSWORD || secrets.GITHUB_TOKEN }}
23+
24+
steps:
25+
- name: Setup env var TAG image debug
26+
if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' }}
27+
run: |
28+
echo "IMAGE_TAG=$(echo ${GITHUB_SHA} | head -c 7)" >> "$GITHUB_ENV"
29+
30+
- name: Setup env var TAG image production
31+
if: startsWith(github.ref, 'refs/tags')
32+
run: |
33+
echo "IMAGE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
34+
35+
- name: Build and Push Image to registry with kaniko
36+
run: |
37+
mkdir -p /kaniko/.docker
38+
cat <<EOF > /kaniko/.docker/config.json
39+
{
40+
"auths": {
41+
"${{ env.IMAGE_REGISTRY_URL }}": {
42+
"auth": "$(echo -n "${{ env.IMAGE_REGISTRY_USER }}:${{ env.IMAGE_REGISTRY_PASSWORD }}" | base64 )"
43+
}
44+
}
45+
}
46+
EOF
47+
48+
/kaniko/executor --dockerfile="${{ env.DOCKERFILE }}" \
49+
--context="${{ github.repositoryUrl }}#${{ github.ref }}#${{ github.sha }}" \
50+
--destination="$IMAGE_NAME:$IMAGE_TAG" \
51+
--push-retry 5\
52+
--verbosity=debug
Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,44 @@
1-
name: Deploy docker container
1+
name: Deploy to Production
22
on:
33
workflow_dispatch:
44

55
permissions:
66
packages: read
77

88
jobs:
9-
deploy:
9+
deploy_prod:
1010
runs-on: ec2-bice
11+
if: startsWith(github.ref, 'refs/tags')
12+
timeout-minutes: 15
1113
env:
12-
GIT_USERNAME: ${{ github.actor }}
13-
GIT_PASSWORD: ${{ secrets.GITHUB_TOKEN }}
14-
DOCKER_IMAGE_NAME: ghcr.io/${{ github.repository }}
15-
IMAGE_REGISTRY: ${{ 'https://ghcr.io' }}
14+
IMAGE_TAG: latest
1615
EXPOSE_PORT: ${{ secrets.EXPOSE_PORT || 8080 }}
1716
PUBLISH_PORT: ${{ secrets.PUBLISH_PORT || 8081 }}
18-
NAME_REPO: ${{ github.repository }}
19-
IMAGE_TAG: latest
17+
IMAGE_NAME: ghcr.io/${{ github.repository }}
18+
CONTAINER_NAME: ${{ secrets.CONTAINER_NAME || github.event.repository.name }}
19+
IMAGE_REGISTRY_URL: ${{ secrets.IMAGE_REGISTRY_URL || 'https://ghcr.io' }}
20+
IMAGE_REGISTRY_USER: ${{ secrets.IMAGE_REGISTRY_USER || github.actor }}
21+
IMAGE_REGISTRY_PASSWORD: ${{ secrets.IMAGE_REGISTRY_PASSWORD || secrets.GITHUB_TOKEN }}
2022

2123
steps:
22-
- name: deploy in Docker
24+
- name: Setup env var TAG image production
25+
run: |
26+
echo "IMAGE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
27+
28+
- name: Normalize container name
29+
run: |
30+
SAFE_NAME="${CONTAINER_NAME//-/_}"
31+
SAFE_NAME="$(echo "$SAFE_NAME" | tr 'A-Z' 'a-z')"
32+
echo "CONTAINER_NAME=$SAFE_NAME" >> $GITHUB_ENV
33+
34+
- name: Deploy in Docker
2335
run: |
24-
echo $GIT_PASSWORD | docker login $IMAGE_REGISTRY -u $GIT_USERNAME --password-stdin
25-
docker rm -f "$NAME_REPO"
26-
docker run -d --restart=unless-stopped --name "$NAME_REPO" -p "$PUBLISH_PORT:$EXPOSE_PORT" "$DOCKER_IMAGE_NAME:$IMAGE_TAG"
27-
echo "El container $NAME_REPO, se ejecuto correctamente"
36+
echo $IMAGE_REGISTRY_PASSWORD | docker login $IMAGE_REGISTRY_URL -u $IMAGE_REGISTRY_USER --password-stdin
37+
docker rm -f "$CONTAINER_NAME"
38+
docker run -d --restart=unless-stopped --name "$CONTAINER_NAME" -p "$PUBLISH_PORT:$EXPOSE_PORT" "$IMAGE_NAME:$IMAGE_TAG"
39+
if [ "$(docker inspect -f '{{.State.Running}}' $CONTAINER_NAME)" != "true" ]; then
40+
echo "El contenedor $CONTAINER_NAME no inicio como se esperaba "
41+
docker logs $CONTAINER_NAME || true
42+
exit 1
43+
fi
44+
echo "El container $CONTAINER_NAME, inicio correctamente"

Dockerfile

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
## Stage 1 : build with maven builder image with native capabilities
2+
FROM quay.io/quarkus/ubi9-quarkus-mandrel-builder-image:jdk-21 AS build
3+
COPY --chown=quarkus:quarkus --chmod=0755 mvnw /code/mvnw
4+
COPY --chown=quarkus:quarkus .mvn /code/.mvn
5+
COPY --chown=quarkus:quarkus pom.xml /code/
6+
USER quarkus
7+
WORKDIR /code
8+
RUN ./mvnw -B org.apache.maven.plugins:maven-dependency-plugin:3.8.1:go-offline
9+
COPY src /code/src
10+
RUN ./mvnw package -Dnative
11+
12+
## Stage 2 : create the docker final image
13+
FROM quay.io/quarkus/ubi9-quarkus-micro-image:2.0
14+
WORKDIR /work/
15+
COPY --from=build /code/target/*-runner /work/application
16+
17+
# set up permissions for user `1001`
18+
RUN chmod 775 /work /work/application \
19+
&& chown -R 1001 /work \
20+
&& chmod -R "g+rwX" /work \
21+
&& chown -R 1001:root /work
22+
23+
EXPOSE 8080
24+
USER 1001
25+
26+
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

Dockerfile.dev

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## Stage 1 : build with maven builder image with native capabilities
2+
FROM maven:3.9.9-eclipse-temurin-21-alpine
3+
COPY . /code
4+
WORKDIR /code
5+
6+
EXPOSE 8080
7+
CMD ["mvn", "quarkus:dev"]

0 commit comments

Comments
 (0)