diff --git a/.github/workflows/Procedure_push_docker_images.yml b/.github/workflows/Procedure_push_docker_images.yml index b287b7a3..37b41fcd 100644 --- a/.github/workflows/Procedure_push_docker_images.yml +++ b/.github/workflows/Procedure_push_docker_images.yml @@ -15,6 +15,12 @@ on: description: 'Filebeat module version' default: '0.5' required: true + type: string + products: + description: 'Comma-separated list of the image names to build and push' + default: 'wazuh-manager,wazuh-dashboard,wazuh-indexer,wazuh-agent' + required: false + type: string revision: description: 'Package revision' default: '1' @@ -44,6 +50,11 @@ on: default: '0.5' required: true type: string + products: + description: 'Comma-separated list of the image names to build and push' + default: 'wazuh-manager,wazuh-dashboard,wazuh-indexer,wazuh-agent' + required: false + type: string revision: description: 'Package revision' default: '1' @@ -60,7 +71,7 @@ on: required: false jobs: - build-and-push: + setup: runs-on: ubuntu-22.04 permissions: @@ -73,6 +84,9 @@ jobs: FILEBEAT_MODULE_VERSION: ${{ inputs.filebeat_module_version }} REVISION: ${{ inputs.revision }} + outputs: + WAZUH_COMPONENTS: ${{ steps.compute-outputs.outputs.WAZUH_COMPONENTS }} + steps: - name: Print inputs run: | @@ -88,10 +102,51 @@ jobs: echo "* image_tag: ${{ inputs.image_tag }}" echo "* docker_reference: ${{ inputs.docker_reference }}" echo "* filebeat_module_version: ${{ inputs.filebeat_module_version }}" + echo "* products: ${{ inputs.products }}" echo "* revision: ${{ inputs.revision }}" echo "* dev: ${{ inputs.dev }}" echo "---------------------------------------------" + - name: Set up variables + id: compute-outputs + run: | + if [[ "${{ inputs.products }}" != "null" && "${{ inputs.products }}" != "" ]]; then + # Convert comma-separated list to JSON array format + IFS=',' read -ra COMPONENTS <<< "${{ inputs.products }}" + JSON_ARRAY="[" + for i in "${!COMPONENTS[@]}"; do + if [ $i -gt 0 ]; then + JSON_ARRAY+="," + fi + JSON_ARRAY+="\"${COMPONENTS[$i]}\"" + done + JSON_ARRAY+="]" + echo "WAZUH_COMPONENTS=$JSON_ARRAY" >> $GITHUB_OUTPUT + else + echo "WAZUH_COMPONENTS=[\"wazuh-manager\",\"wazuh-dashboard\",\"wazuh-indexer\",\"wazuh-agent\"]" >> $GITHUB_OUTPUT + fi + + build-and-push: + runs-on: ubuntu-22.04 + + permissions: + id-token: write + contents: read + + needs: + - setup + + strategy: + fail-fast: false # all jobs will run even if one fails + matrix: + wazuh_component: ${{ fromJson(needs.setup.outputs.WAZUH_COMPONENTS) }} + + env: + IMAGE_REGISTRY: ${{ inputs.dev && vars.IMAGE_REGISTRY_DEV || vars.IMAGE_REGISTRY_PROD }} + IMAGE_TAG: ${{ inputs.image_tag }} + REVISION: ${{ inputs.revision }} + + steps: - name: Checkout repository uses: actions/checkout@v4 with: @@ -138,9 +193,9 @@ jobs: fi DEV_STAGE=${tokens[1]} WAZUH_VER=${tokens[0]} - ./build-images.sh -v $WAZUH_VER -r $REVISION -d $DEV_STAGE -f $FILEBEAT_MODULE_VERSION -rg $IMAGE_REGISTRY -m + ./build-images.sh -v $WAZUH_VER -r $REVISION -d $DEV_STAGE -f $FILEBEAT_MODULE_VERSION -rg $IMAGE_REGISTRY -m -c ${{ matrix.wazuh_component }} else - ./build-images.sh -v $IMAGE_TAG -r $REVISION -f $FILEBEAT_MODULE_VERSION -rg $IMAGE_REGISTRY -m + ./build-images.sh -v $IMAGE_TAG -r $REVISION -f $FILEBEAT_MODULE_VERSION -rg $IMAGE_REGISTRY -m -c ${{ matrix.wazuh_component }} fi # Save .env file (generated by build-images.sh) contents to $GITHUB_ENV diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cdf4346..d7510e0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ All notable changes to this project will be documented in this file. ### Changed -- None +- Backport from 5.0.0: Backport from 5.0.0: Allow building separate targets #2177 ([#2184](https://github.com/wazuh/wazuh-docker/pull/2184)) ### Fixed diff --git a/build-docker-images/build-images.sh b/build-docker-images/build-images.sh index ffdb29be..197dc8eb 100755 --- a/build-docker-images/build-images.sh +++ b/build-docker-images/build-images.sh @@ -61,7 +61,6 @@ build() { fi fi - echo WAZUH_VERSION=$WAZUH_IMAGE_VERSION > ../.env echo WAZUH_IMAGE_VERSION=$WAZUH_IMAGE_VERSION >> ../.env echo WAZUH_TAG_REVISION=$WAZUH_TAG_REVISION >> ../.env @@ -75,18 +74,74 @@ build() { source ../.env set +a - if [ "${MULTIARCH}" ];then - docker buildx bake \ - --file build-images.yml \ - --push \ - --set *.platform=linux/amd64,linux/arm64 \ - --no-cache || clean 1 + # Define all available components + local all_components=("wazuh-indexer" "wazuh-manager" "wazuh-dashboard" "wazuh-agent") + local components_to_build=() + + # Determine which components to build + if [ -z "${WAZUH_COMPONENT}" ]; then + echo "No component specified. Building all components..." + components_to_build=("${all_components[@]}") else - docker buildx bake \ - --file build-images.yml \ - --load \ - --no-cache || clean 1 + # Validate component + case "${WAZUH_COMPONENT}" in + wazuh-indexer|wazuh-manager|wazuh-dashboard|wazuh-agent) + components_to_build=("${WAZUH_COMPONENT}") + ;; + *) + echo "Error: Unknown component '${WAZUH_COMPONENT}'" >&2 + clean 1 + ;; + esac fi + + # Determine build command and base options + if [ "${MULTIARCH}" ]; then + build_cmd="docker buildx build --platform linux/amd64,linux/arm64 --push --no-cache" + else + build_cmd="docker build --no-cache" + fi + + # Build each component + for component in "${components_to_build[@]}"; do + echo "Building ${component} image..." + + # Build common args (used by all components) + build_args=( + -t "${WAZUH_REGISTRY}/wazuh/${component}:${IMAGE_TAG}" + --build-arg WAZUH_VERSION="${WAZUH_IMAGE_VERSION}" + --build-arg WAZUH_TAG_REVISION="${WAZUH_TAG_REVISION}" + ) + + # Add component-specific args + case "${component}" in + wazuh-indexer) + # No additional args for wazuh-indexer + ;; + wazuh-manager) + build_args+=( + --build-arg FILEBEAT_TEMPLATE_BRANCH="${FILEBEAT_TEMPLATE_BRANCH}" + --build-arg WAZUH_FILEBEAT_MODULE="${WAZUH_FILEBEAT_MODULE}" + ) + ;; + wazuh-dashboard) + build_args+=( + --build-arg WAZUH_UI_REVISION="${WAZUH_UI_REVISION}" + ) + ;; + wazuh-agent) + # No additional args for wazuh-agent + ;; + esac + + # Execute build + $build_cmd "${build_args[@]}" ${component}/ || clean 1 + echo "${component} image built successfully!" + done + + echo "" + echo "Image build process completed!" + return 0 } @@ -100,6 +155,7 @@ help() { echo " -f, --filebeat-module [Optional] Set Filebeat module version. By default ${FILEBEAT_MODULE_VERSION}." echo " -r, --revision [Optional] Package revision. By default ${WAZUH_TAG_REVISION}" echo " -rg, --registry [Optional] Set the Docker registry to push the images." + echo " -c, --component [Required] Set the Wazuh component to build. Accepted values: 'wazuh-indexer', 'wazuh-manager', 'wazuh-dashboard', 'wazuh-agent'." echo " -v, --version [Optional] Set the Wazuh version should be builded. By default, ${WAZUH_IMAGE_VERSION}." echo " -m, --multiarch [Optional] Enable multi-architecture builds." echo " -h, --help Show this help." @@ -160,6 +216,14 @@ main() { help 1 fi ;; + "-c"|"--component") + if [ -n "${2}" ]; then + WAZUH_COMPONENT="${2}" + shift 2 + else + help 1 + fi + ;; *) help 1 esac