Below is the Dockerfile I am using.
# Base image: Ubuntu 22.04 FROM ubuntu:22.04 # Arguments to specify versions ARG OPENJDK_VERSION=17 ARG MAVEN_VERSION=3.8.8 ARG NODE_VERSION=18 # Update package list and install dependencies RUN apt-get update && apt-get install -y \ openjdk-${OPENJDK_VERSION}-jdk \ nano \ git \ curl \ gnupg2 \ ca-certificates \ lsb-release \ software-properties-common \ apt-transport-https \ wget # Install Maven RUN curl -o apache-maven-${MAVEN_VERSION}-bin.tar.gz "https://dlcdn.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" && ls -la RUN tar -xvzf apache-maven-${MAVEN_VERSION}-bin.tar.gz && ls -la RUN mv apache-maven-${MAVEN_VERSION} /opt/apache-maven-${MAVEN_VERSION} && ln -s /opt/apache-maven-${MAVEN_VERSION}/bin/mvn /usr/bin/mvn # Install Node.js, npm, and Yarn RUN curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - \ && apt-get install -y nodejs \ && npm install -g npm \ && npm install -g yarn \ && apt-get clean # Install Azure CLI RUN curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.asc.gpg > /dev/null RUN AZ_REPO=$(lsb_release -cs) \ && echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ ${AZ_REPO} main" | tee /etc/apt/sources.list.d/azure-cli.list RUN apt-get update && apt-get install -y azure-cli # Install Docker (make sure Docker is installed inside the image) RUN apt-get update && \ apt-get install -y \ ca-certificates \ curl \ gnupg \ lsb-release # Add Docker’s official GPG key RUN mkdir -p /etc/apt/keyrings && \ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ gpg --dearmor -o /etc/apt/keyrings/docker.gpg # Set up the Docker repository RUN echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null # Install Docker Engine RUN apt-get update && \ apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Set environment variables ENV JAVA_HOME /usr/lib/jvm/java-${OPENJDK_VERSION}-openjdk-amd64 ENV MAVEN_HOME /opt/apache-maven-${MAVEN_VERSION} ENV PATH $MAVEN_HOME/bin:$PATH # Set the default command for the container CMD ["bash"]
name: Build and Push Docker Image
on:
push:
branches:
- main
- az
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
# Checkout the repository
- name: Checkout code
uses: actions/checkout@v3
# Set up Docker Buildx (for better multi-platform builds)
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
# Log in to Docker Hub
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
# Build the Docker image
- name: Build Docker image
run: |
docker build \
-t ${{ secrets.DOCKER_HUB_USERNAME }}/ubuntu-openjdk17-maven-node-az:${{ github.run_number }} .
# Push the Docker image to Docker Hub
- name: Push Docker image
run: |
docker push ${{ secrets.DOCKER_HUB_USERNAME }}/ubuntu-openjdk17-maven-node-az:${{ github.run_number }}
docker tag ${{ secrets.DOCKER_HUB_USERNAME }}/ubuntu-openjdk17-maven-node-az:${{ github.run_number }} ${{ secrets.DOCKER_HUB_USERNAME }}/ubuntu-openjdk17-maven-node-az:latest
docker push ${{ secrets.DOCKER_HUB_USERNAME }}/ubuntu-openjdk17-maven-node-az:latest
# Show Docker image
- name: Show Docker image
run: |
echo ${{ secrets.DOCKER_HUB_USERNAME }}/ubuntu-openjdk17-maven-node-az:${{ github.run_number }}
echo ${{ secrets.DOCKER_HUB_USERNAME }}/ubuntu-openjdk17-maven-node-az:latest
Once the above image is pushed to dockerhub. You can reference that docker image in the github workflows.
name: Docker Test Workflow
on:
workflow_dispatch:
push:
branches: [test*, 12.5*, Cloud*, 14.*]
jobs:
test:
name: Test Job in Docker
runs-on: githubrunner # This will run on your self-hosted runner
container: # Use a Docker container
image: udayglobuslive/ubuntu-openjdk17-maven-node-az:25
options: --rm # Remove the container after the job is complete
steps:
- name: Print system info
run: |
echo "Running inside a Docker container"
uname -a # Prints system information
hostname
- name: Create and list a directory
run: |
mkdir test_dir
echo "Created test_dir"
ls -l # List the contents of the current directory
- name: Cleanup
run: |
rm -rf test_dir
echo "test_dir removed"
Where, everytime it will use the self hosted runner and create a new container and destroy at the end of pipeline.
Instead of self-hosted runner, you can use github provided runner also.
Like, simply replace githubrunner above and keep ubuntu-latest.
name: Docker Test Workflow
on:
workflow_dispatch:
push:
branches: [test*, 12.5*, Cloud*, 14.*]
jobs:
test:
name: Test Job in Docker
runs-on: ubuntu-latest # This will run on github provided runner
container: # Use a Docker container
image: udayglobuslive/ubuntu-openjdk17-maven-node-az:25
options: --rm # Remove the container after the job is complete
steps:
- name: Print system info
run: |
echo "Running inside a Docker container"
uname -a # Prints system information
hostname
- name: Create and list a directory
run: |
mkdir test_dir
echo "Created test_dir"
ls -l # List the contents of the current directory
- name: Cleanup
run: |
rm -rf test_dir
echo "test_dir removed"
No comments:
Post a Comment