Compare commits
34 Commits
089935525b
...
test
| Author | SHA1 | Date | |
|---|---|---|---|
| fcbd2c5452 | |||
| 039531ce7b | |||
| 91fe69a0a2 | |||
| 81af16cedf | |||
| 03be79d149 | |||
| 1112e15d80 | |||
| 0c86b453a6 | |||
| 882755ffc8 | |||
| 2854955c74 | |||
| fa06beefdd | |||
| d7f1052305 | |||
| 8ab7ff54b9 | |||
| 993104e122 | |||
| 44a3bc1cf4 | |||
| 44b4aa9e7a | |||
| 7986278926 | |||
| a1752e68c7 | |||
| f3ac36a139 | |||
| f95de88005 | |||
| 9f2e966662 | |||
| baf814e0e5 | |||
|
|
0722d1942f | ||
| 1119a38496 | |||
| 91afa98d6b | |||
| f3ce93f8b1 | |||
| 7bb7bfc3a5 | |||
| 5e70da801f | |||
| 7b0392a98c | |||
|
|
bb33667302 | ||
| ead031ac44 | |||
|
|
a41dbfeed3 | ||
| 8ccc13c7bb | |||
| 5e685381cb | |||
| 4b8c91d957 |
@@ -1,23 +1,25 @@
|
||||
name: Zabbix APK Builder
|
||||
run-name: ${{ gitea.actor }} is building Zabbix APK packages 🚀
|
||||
|
||||
on:
|
||||
# Trigger on pushes to main/test branch
|
||||
# Trigger on pushes to main/test branch into the zabbix-apk-builder directory
|
||||
push:
|
||||
branches: [ main, test ]
|
||||
paths: [ 'zabbix-apk-builder/**' ]
|
||||
|
||||
# Scheduled check for new versions (daily at 6 AM UTC)
|
||||
# Scheduled runs at 06:00 UTC daily
|
||||
schedule:
|
||||
- cron: '0 6 * * *'
|
||||
|
||||
jobs:
|
||||
check-version:
|
||||
runs-on: ubuntu-latest
|
||||
# Skip the execution if the commit author is the bot itself to prevent loops
|
||||
if: ${{ gitea.event.head_commit.author.name != 'Gitea Action' }}
|
||||
outputs:
|
||||
should_build: ${{ steps.version-check.outputs.should_build }}
|
||||
latest_version: ${{ steps.version-check.outputs.latest_version }}
|
||||
current_version: ${{ steps.version-check.outputs.current_version }}
|
||||
is_push_trigger: ${{ steps.version-check.outputs.is_push_trigger }}
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
@@ -26,54 +28,55 @@ jobs:
|
||||
- name: Check for new Zabbix version
|
||||
id: version-check
|
||||
run: |
|
||||
# Install jq for JSON parsing
|
||||
sudo apt-get update && sudo apt-get install -y jq
|
||||
set -euo pipefail
|
||||
|
||||
# Get current version from APKBUILD
|
||||
# Remove jq installation
|
||||
# apt-get update && apt-get install -y jq
|
||||
|
||||
# Detect trigger type
|
||||
IS_PUSH="${{ gitea.event_name == 'push' }}"
|
||||
echo "is_push_trigger=${IS_PUSH}" >> "${GITHUB_OUTPUT}"
|
||||
|
||||
# Get versions
|
||||
CURRENT_VERSION=$(grep '^pkgver=' zabbix-apk-builder/APKBUILD | cut -d'=' -f2)
|
||||
echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
|
||||
echo "Current version: $CURRENT_VERSION"
|
||||
|
||||
# Get latest version from Zabbix API (stable releases only)
|
||||
LATEST_VERSION=$(curl -s "https://git.zabbix.com/rest/api/1.0/projects/ZBX/repos/zabbix/tags?limit=100" | \
|
||||
jq -r '.values[].displayId' | \
|
||||
grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | \
|
||||
grep -v 'rc\|beta\|alpha' | \
|
||||
sort -V | \
|
||||
tail -1)
|
||||
grep -o '"displayId":"[^"]*"' | cut -d'"' -f4 | \
|
||||
grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | grep -v 'rc\|beta\|alpha' | \
|
||||
sort -V | tail -1)
|
||||
|
||||
echo "latest_version=$LATEST_VERSION" >> $GITHUB_OUTPUT
|
||||
echo "Latest version: $LATEST_VERSION"
|
||||
echo "current_version=${CURRENT_VERSION}" >> "${GITHUB_OUTPUT}"
|
||||
echo "latest_version=${LATEST_VERSION}" >> "${GITHUB_OUTPUT}"
|
||||
|
||||
# Determine if we should build (remove workflow_dispatch reference)
|
||||
if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then
|
||||
echo "should_build=true" >> $GITHUB_OUTPUT
|
||||
echo "Build required: Version changed"
|
||||
# Always build on push, build on schedule if versions differ
|
||||
if [[ "${IS_PUSH}" == "true" || "${CURRENT_VERSION}" != "${LATEST_VERSION}" ]]; then
|
||||
echo "should_build=true" >> "${GITHUB_OUTPUT}"
|
||||
else
|
||||
echo "should_build=false" >> $GITHUB_OUTPUT
|
||||
echo "No build required: Version unchanged"
|
||||
echo "should_build=false" >> "${GITHUB_OUTPUT}"
|
||||
fi
|
||||
|
||||
update-version:
|
||||
needs: check-version
|
||||
if: needs.check-version.outputs.should_build == 'true' && needs.check-version.outputs.current_version != needs.check-version.outputs.latest_version
|
||||
# Only update version during scheduled runs when new version is available
|
||||
if: ${{ needs.check-version.outputs.should_build == 'true' && needs.check-version.outputs.is_push_trigger == 'false' && needs.check-version.outputs.current_version != needs.check-version.outputs.latest_version }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
|
||||
- name: Update APKBUILD version
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
LATEST_VERSION="${{ needs.check-version.outputs.latest_version }}"
|
||||
CURRENT_VERSION="${{ needs.check-version.outputs.current_version }}"
|
||||
|
||||
echo "Updating APKBUILD from $CURRENT_VERSION to $LATEST_VERSION"
|
||||
echo "Updating APKBUILD from ${CURRENT_VERSION} to ${LATEST_VERSION}"
|
||||
|
||||
# Update pkgver
|
||||
sed -i "s/^pkgver=.*/pkgver=$LATEST_VERSION/" zabbix-apk-builder/APKBUILD
|
||||
sed -i "s/^pkgver=.*/pkgver=${LATEST_VERSION}/" zabbix-apk-builder/APKBUILD
|
||||
|
||||
# Reset pkgrel to 0 for new version
|
||||
sed -i "s/^pkgrel=.*/pkgrel=0/" zabbix-apk-builder/APKBUILD
|
||||
@@ -81,76 +84,120 @@ jobs:
|
||||
# Clear checksums (will be regenerated during build)
|
||||
sed -i 's/^sha512sums=.*/sha512sums="SKIP"/' zabbix-apk-builder/APKBUILD
|
||||
|
||||
# Commit changes
|
||||
# Commit changes with [ci skip] to prevent recursive triggers
|
||||
git config --local user.email "action@gitea.com"
|
||||
git config --local user.name "Gitea Action"
|
||||
git add zabbix-apk-builder/APKBUILD
|
||||
git commit -m "Update Zabbix to version $LATEST_VERSION" || exit 0
|
||||
git commit -m "AUTO: Update Zabbix to version ${LATEST_VERSION} [ci skip]" || exit 0
|
||||
git push
|
||||
|
||||
build-packages:
|
||||
needs: [check-version]
|
||||
if: needs.check-version.outputs.should_build == 'true'
|
||||
# Build packages after version update (for scheduled runs) or immediately (for push runs)
|
||||
needs: [check-version, update-version]
|
||||
# Run if should_build=true AND either update-version ran successfully OR it was skipped due to push trigger
|
||||
if: ${{ needs.check-version.outputs.should_build == 'true' && (success() || needs.check-version.outputs.is_push_trigger == 'true') }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
# Use token to ensure we get the latest version if it was updated
|
||||
token: ${{ secrets.ACCESS_TOKEN }}
|
||||
ref: ${{ gitea.ref }}
|
||||
|
||||
- name: Verify build environment
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
echo "=== Build Environment ==="
|
||||
echo "Trigger type: ${{ gitea.event_name }}"
|
||||
echo "Current branch: $(git branch --show-current)"
|
||||
echo "APKBUILD version: $(grep '^pkgver=' zabbix-apk-builder/APKBUILD | cut -d'=' -f2)"
|
||||
echo "Target version: ${{ needs.check-version.outputs.latest_version }}"
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Build Zabbix packages
|
||||
env:
|
||||
CI_RUN_ID: ${{ gitea.run_id }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
cd zabbix-apk-builder
|
||||
chmod +x build.sh
|
||||
./build.sh
|
||||
|
||||
- name: List built packages
|
||||
- name: Verify and list built packages
|
||||
run: |
|
||||
echo "Built packages:"
|
||||
ls -la zabbix-apk-builder/packages/
|
||||
set -euo pipefail
|
||||
|
||||
cd zabbix-apk-builder
|
||||
|
||||
echo "Package sizes:"
|
||||
du -h zabbix-apk-builder/packages/*.apk || echo "No packages found"
|
||||
# Verify packages exist somewhere
|
||||
PACKAGE_COUNT=$(find packages -name "*.apk" | wc -l)
|
||||
|
||||
if [[ $PACKAGE_COUNT -eq 0 ]]; then
|
||||
echo "ERROR: No packages found"
|
||||
find packages -type f 2>/dev/null || echo "packages directory is empty"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Found $PACKAGE_COUNT packages:"
|
||||
find packages -name "*.apk" -exec ls -lh {} \;
|
||||
|
||||
- name: Upload packages as artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: zabbix-apk-packages
|
||||
path: zabbix-apk-builder/packages/*.apk
|
||||
name: zabbix-apk-packages-${{ gitea.run_number }}
|
||||
path: zabbix-apk-builder/packages/**/*.apk
|
||||
retention-days: 30
|
||||
if-no-files-found: error
|
||||
|
||||
deploy-test:
|
||||
needs: [check-version, build-packages]
|
||||
if: needs.check-version.outputs.should_build == 'true' && gitea.ref == 'refs/heads/test'
|
||||
if: ${{ needs.check-version.outputs.should_build == 'true' && contains(gitea.ref, 'test') }}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Download packages
|
||||
uses: actions/download-artifact@v4
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: zabbix-apk-packages
|
||||
name: zabbix-apk-packages-${{ gitea.run_number }}
|
||||
path: packages/
|
||||
|
||||
- name: Test deployment in Alpine container
|
||||
run: |
|
||||
echo "Testing package installation..."
|
||||
set -euo pipefail
|
||||
|
||||
# Test agent package
|
||||
docker run --rm -v $PWD/packages:/packages alpine:latest sh -c "
|
||||
apk add --allow-untrusted /packages/zabbix-agent-*.apk
|
||||
which zabbix_agentd
|
||||
zabbix_agentd --version
|
||||
" || echo "Agent test failed"
|
||||
# Find packages
|
||||
AGENT_PKG=$(find packages -name "zabbix-agent-*.apk" | head -1)
|
||||
PROXY_PKG=$(find packages -name "zabbix-proxy-*.apk" | head -1)
|
||||
|
||||
# Test proxy package
|
||||
docker run --rm -v $PWD/packages:/packages alpine:latest sh -c "
|
||||
apk add --allow-untrusted /packages/zabbix-proxy-*.apk
|
||||
which zabbix_proxy
|
||||
zabbix_proxy --version
|
||||
" || echo "Proxy test failed"
|
||||
# Test function
|
||||
test_package() {
|
||||
local pkg="$1"
|
||||
local binary="$2"
|
||||
|
||||
if [[ -f "$pkg" ]]; then
|
||||
echo "Testing $(basename "$pkg")..."
|
||||
CONTAINER_ID=$(docker run -d alpine:latest sleep 30)
|
||||
docker cp "$pkg" "$CONTAINER_ID:/$(basename "$pkg")"
|
||||
if docker exec "$CONTAINER_ID" sh -c "
|
||||
apk add --allow-untrusted /$(basename "$pkg") >/dev/null 2>&1
|
||||
which $binary >/dev/null 2>&1
|
||||
$binary --version >/dev/null 2>&1
|
||||
"; then
|
||||
echo "SUCCESS: $(basename "$pkg") test passed"
|
||||
else
|
||||
echo "FAIL: $(basename "$pkg") test failed"
|
||||
fi
|
||||
docker rm -f "$CONTAINER_ID" >/dev/null
|
||||
else
|
||||
echo "ERROR: Package not found: $pkg"
|
||||
fi
|
||||
}
|
||||
|
||||
echo "✅ Package deployment test completed"
|
||||
test_package "$AGENT_PKG" "zabbix_agentd"
|
||||
test_package "$PROXY_PKG" "zabbix_proxy"
|
||||
@@ -1,19 +0,0 @@
|
||||
name: Gitea Actions Demo
|
||||
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
Explore-Gitea-Actions:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
|
||||
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
|
||||
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v4
|
||||
- run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
|
||||
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
|
||||
- name: List files in the repository
|
||||
run: |
|
||||
ls ${{ gitea.workspace }}
|
||||
- run: echo "🍏 This job's status is ${{ job.status }}."
|
||||
1
zabbix-apk-builder/.gitignore
vendored
1
zabbix-apk-builder/.gitignore
vendored
@@ -9,6 +9,7 @@ src/
|
||||
|
||||
# Backup files
|
||||
*.backup
|
||||
*.bak
|
||||
*~
|
||||
|
||||
# OS files
|
||||
|
||||
@@ -138,11 +138,11 @@ proxy() {
|
||||
install -dm755 "$subpkgdir"/var/log/zabbix
|
||||
install -dm755 "$subpkgdir"/var/run/zabbix
|
||||
}
|
||||
|
||||
# --- TEST ---
|
||||
sha512sums="
|
||||
3bf1f915c2cd5a59f1dd3afc10dd1a6e596840e576013839d6eae057cd327893f87cc5cec1d32b6a8ca8bd00735c0070327084aae01dc8d3399202f5a3e365c1 zabbix-7.4.2.tar.gz
|
||||
SKIP
|
||||
SKIP
|
||||
SKIP
|
||||
SKIP
|
||||
"
|
||||
SKIP
|
||||
"
|
||||
@@ -36,5 +36,32 @@ COPY --chown=builder:builder . /home/builder/zabbix/
|
||||
|
||||
WORKDIR /home/builder/zabbix
|
||||
|
||||
# Create build script that just builds packages
|
||||
USER root
|
||||
RUN cat > /usr/local/bin/build-packages.sh << 'EOF'
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
echo "Building packages as builder user..."
|
||||
sudo -u builder sh -c "
|
||||
cd /home/builder/zabbix
|
||||
echo 'Generating checksums...'
|
||||
abuild checksum
|
||||
echo 'Building packages...'
|
||||
abuild -r
|
||||
"
|
||||
|
||||
echo "Build complete! Packages built in /home/builder/packages:"
|
||||
find /home/builder/packages -name "*.apk" -exec ls -la {} \;
|
||||
|
||||
echo "Setting proper permissions on packages..."
|
||||
chmod 644 /home/builder/packages/*.apk 2>/dev/null || true
|
||||
|
||||
echo "Final package list (excluding APKINDEX):"
|
||||
find /home/builder/packages -name "*.apk" -exec ls -la {} \;
|
||||
EOF
|
||||
|
||||
RUN chmod +x /usr/local/bin/build-packages.sh
|
||||
|
||||
# Set build command
|
||||
CMD ["abuild", "-r"]
|
||||
CMD ["/usr/local/bin/build-packages.sh"]
|
||||
@@ -4,43 +4,32 @@ Automated Alpine Linux package builder for Zabbix Agent and Proxy with CI/CD pip
|
||||
|
||||
## Features
|
||||
|
||||
- 🔄 **Automatic Version Detection**: Monitors Zabbix releases using official Bitbucket API
|
||||
- 🏗️ **Docker-based Building**: Consistent, reproducible builds in isolated environment
|
||||
- 🔄 **Automatic Version Detection**: Monitors Zabbix releases using Bitbucket API
|
||||
- 🚀 **CI/CD Pipeline**: Full automation from version detection to package deployment
|
||||
- 📦 **Multi-package Support**: Builds agent, proxy, and main packages
|
||||
- 📦 **Multi-package Support**: Builds agent and proxy packages
|
||||
- 🧪 **Automated Testing**: Tests package installation in Alpine containers
|
||||
- 📊 **Gitea Integration**: Publishes packages to your private Gitea repository
|
||||
- 📊 **Gitea Integration**: Publishes packages to Gitea repository
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Repository Setup
|
||||
### Prerequisites
|
||||
|
||||
- Docker installed
|
||||
- Gitea repository with Actions enabled
|
||||
|
||||
### Manual Build
|
||||
|
||||
```bash
|
||||
# Clone this repository
|
||||
git clone <your-repo-url>
|
||||
# Clone the repository
|
||||
git clone <your-gitea-repo>
|
||||
cd zabbix-apk-builder
|
||||
|
||||
# Make build script executable
|
||||
chmod +x build.sh setup-cicd.sh
|
||||
```
|
||||
|
||||
### 2. Manual Build
|
||||
|
||||
```bash
|
||||
# Build packages locally
|
||||
chmod +x build.sh
|
||||
./build.sh
|
||||
|
||||
# Packages will be in ./packages/
|
||||
ls -la packages/
|
||||
```
|
||||
|
||||
### 3. CI/CD Setup
|
||||
|
||||
```bash
|
||||
# Run the setup script
|
||||
./setup-cicd.sh
|
||||
|
||||
# Follow the prompts to configure GitHub secrets
|
||||
# Check built packages
|
||||
ls -la packages/builder/x86_64/
|
||||
```
|
||||
|
||||
## Package Information
|
||||
@@ -48,19 +37,8 @@ ls -la packages/
|
||||
### Built Packages
|
||||
|
||||
1. **zabbix-agent** - Zabbix Agent only
|
||||
2. **zabbix-proxy** - Zabbix Proxy (without LDAP)
|
||||
3. **zabbix** - Main package with libraries
|
||||
|
||||
### Current Version
|
||||
|
||||
- **Zabbix Version**: 7.4.2
|
||||
- **Alpine Base**: 3.18
|
||||
- **Architecture**: x86_64
|
||||
|
||||
### Dependencies Removed
|
||||
|
||||
- LDAP support removed from proxy build
|
||||
- Simplified configuration for smaller footprint
|
||||
2. **zabbix-proxy** - Zabbix Proxy
|
||||
3. **zabbix** - Meta package
|
||||
|
||||
## CI/CD Pipeline
|
||||
|
||||
@@ -68,7 +46,6 @@ ls -la packages/
|
||||
|
||||
- **Daily**: Checks for new Zabbix versions at 6 AM UTC
|
||||
- **Push**: Builds when code changes in main/test branches
|
||||
- **Manual**: Force builds via GitHub Actions
|
||||
|
||||
### Version Detection
|
||||
|
||||
@@ -96,46 +73,22 @@ GITEA_SSH_KEY # SSH private key for Gitea access
|
||||
### File Structure
|
||||
|
||||
```
|
||||
.
|
||||
├── APKBUILD # Alpine package definition
|
||||
├── build.sh # Build automation script
|
||||
├── Dockerfile # Build environment
|
||||
├── .github/workflows/ # CI/CD pipeline
|
||||
├── packages/ # Built packages
|
||||
├── zabbix-agent.initd # Agent init script
|
||||
├── zabbix-agent.confd # Agent config
|
||||
├── zabbix-proxy.initd # Proxy init script
|
||||
└── zabbix-proxy.confd # Proxy config
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Install Packages
|
||||
|
||||
```bash
|
||||
# Add repository
|
||||
echo "http://gitea-repo/mbuz/Zabbix/raw/branch/main/alpine/v3.18/main" >> /etc/apk/repositories
|
||||
|
||||
# Update and install
|
||||
apk update
|
||||
apk add zabbix-agent
|
||||
|
||||
# Enable and start
|
||||
rc-update add zabbix-agent default
|
||||
rc-service zabbix-agent start
|
||||
```
|
||||
|
||||
### Configuration
|
||||
|
||||
```bash
|
||||
# Configure agent
|
||||
vim /etc/zabbix/zabbix_agentd.conf
|
||||
|
||||
# Set server IP
|
||||
Server=your.zabbix.server
|
||||
|
||||
# Restart service
|
||||
rc-service zabbix-agent restart
|
||||
zabbix-git/
|
||||
└── zabbix-apk-builder/
|
||||
├── .gitea/
|
||||
│ └── workflows/
|
||||
│ └── build.yaml # Main CI/CD pipeline
|
||||
├── APKBUILD # Alpine package definition
|
||||
├── Dockerfile # Build environment container
|
||||
├── README.md # This file
|
||||
├── build.sh # Local build script
|
||||
├── packages/ # Generated packages (gitignored)
|
||||
├── zabbix-agent.confd # Agent configuration
|
||||
├── zabbix-agent.initd # Agent init script
|
||||
├── zabbix-agent.pre-install # Agent pre-install script
|
||||
├── zabbix-proxy.confd # Proxy configuration
|
||||
├── zabbix-proxy.initd # Proxy init script
|
||||
└── zabbix-proxy.pre-install # Proxy pre-install script
|
||||
```
|
||||
|
||||
## Development
|
||||
@@ -157,28 +110,16 @@ docker run --rm -it \
|
||||
|
||||
### Branch Strategy
|
||||
|
||||
- **main**: Production releases, auto-deployed
|
||||
- **test**: Testing and validation, no auto-deploy
|
||||
- **main**: Production releases, merge only
|
||||
- **test**: Testing and validation
|
||||
|
||||
### Making Changes
|
||||
|
||||
1. Create feature branch from `test`
|
||||
1. Create feature branch from `main`
|
||||
2. Test changes thoroughly
|
||||
3. Merge to `test` for CI validation
|
||||
4. Merge to `main` for production release
|
||||
3. Validate CI
|
||||
4. Merge to `main`
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Build Issues
|
||||
|
||||
```bash
|
||||
# Check build logs
|
||||
docker logs $(docker ps -l -q)
|
||||
|
||||
# Manual build debug
|
||||
docker run -it --rm -v $(pwd):/build alpine:3.18 sh
|
||||
cd /build && ./build.sh
|
||||
```
|
||||
|
||||
### Version Detection
|
||||
|
||||
@@ -191,45 +132,8 @@ curl -s "https://git.zabbix.com/rest/api/1.0/projects/ZBX/repos/zabbix/tags?limi
|
||||
sort -V | tail -1
|
||||
```
|
||||
|
||||
### CI/CD Issues
|
||||
|
||||
1. Check GitHub Actions logs
|
||||
2. Verify SSH key permissions
|
||||
3. Test Gitea connectivity
|
||||
4. Validate APKBUILD syntax
|
||||
|
||||
## Documentation
|
||||
|
||||
- **[CI-CD-DOCS.md](CI-CD-DOCS.md)**: Comprehensive CI/CD documentation
|
||||
- **[setup-cicd.sh](setup-cicd.sh)**: Setup script for CI/CD configuration
|
||||
|
||||
## Security
|
||||
|
||||
- Uses SSH keys for Gitea access
|
||||
- Minimal package dependencies
|
||||
- Regular security updates via automated builds
|
||||
- No secrets stored in repository
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork the repository
|
||||
2. Create feature branch
|
||||
3. Test changes in `test` branch
|
||||
4. Submit pull request to `main`
|
||||
|
||||
## License
|
||||
|
||||
This project follows the same license as Zabbix (GPL v2).
|
||||
|
||||
## Support
|
||||
|
||||
For issues:
|
||||
1. Check troubleshooting section
|
||||
2. Review CI/CD logs
|
||||
3. Test manual build process
|
||||
4. Check Zabbix API connectivity
|
||||
This project follows the same license as Zabbix (AGPLv3).
|
||||
|
||||
---
|
||||
|
||||
**Built with ❤️ for Alpine Linux and Zabbix monitoring**
|
||||
# Workflow test - Wed Sep 3 19:02:19 CEST 2025
|
||||
|
||||
@@ -3,52 +3,57 @@
|
||||
set -e
|
||||
|
||||
# Configuration
|
||||
PROJECT_DIR="$(pwd)"
|
||||
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
IMAGE_NAME="zabbix-apk-builder"
|
||||
CONTAINER_NAME="zabbix-build-$$"
|
||||
# Use a unique ID from the CI environment if available, otherwise fall back to PID
|
||||
UNIQUE_ID="${CI_RUN_ID:-$$}"
|
||||
CONTAINER_NAME="zabbix-build-${UNIQUE_ID}"
|
||||
OUTPUT_DIR="$PROJECT_DIR/packages"
|
||||
|
||||
echo "=== Zabbix APK Builder ==="
|
||||
echo "Project directory: $PROJECT_DIR"
|
||||
echo "Output directory: $OUTPUT_DIR"
|
||||
|
||||
# Clean up any existing containers
|
||||
# Clean up function
|
||||
cleanup() {
|
||||
echo "Cleaning up..."
|
||||
docker rm -f "$CONTAINER_NAME" 2>/dev/null || true
|
||||
echo "Cleaning up container..."
|
||||
docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
|
||||
# Create output directory
|
||||
# Clean and create output directory
|
||||
rm -rf "$OUTPUT_DIR"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
# Build Docker image
|
||||
echo "Building Docker image..."
|
||||
docker build -t "$IMAGE_NAME" "$PROJECT_DIR"
|
||||
|
||||
# Run the build in container
|
||||
echo "Running package build..."
|
||||
docker run --rm \
|
||||
--name "$CONTAINER_NAME" \
|
||||
-v "$OUTPUT_DIR:/output" \
|
||||
"$IMAGE_NAME" \
|
||||
sh -c "
|
||||
set -e
|
||||
echo 'Starting package build...'
|
||||
|
||||
# Generate checksums for APKBUILD
|
||||
echo 'Generating checksums for APKBUILD...'
|
||||
abuild checksum
|
||||
|
||||
# Build packages
|
||||
abuild -r
|
||||
|
||||
# Copy packages to output
|
||||
echo 'Copying packages to output directory...'
|
||||
find /home/builder/packages -name '*.apk' -exec cp {} /output/ \;
|
||||
"
|
||||
echo "Build completed successfully!"
|
||||
echo "To install packages:"
|
||||
echo " apk add --allow-untrusted $OUTPUT_DIR/zabbix-agent-*.apk"
|
||||
echo " apk add --allow-untrusted $OUTPUT_DIR/zabbix-proxy-*.apk"
|
||||
# Run the build in the container
|
||||
echo "Running package build in container..."
|
||||
docker run --name "$CONTAINER_NAME" "$IMAGE_NAME"
|
||||
|
||||
# Copy packages from container to host
|
||||
echo "Copying packages from container..."
|
||||
if docker cp "$CONTAINER_NAME:/home/builder/packages/." "$OUTPUT_DIR/"; then
|
||||
echo "✅ Packages copied successfully"
|
||||
|
||||
# Remove APKINDEX files (we only want the .apk packages)
|
||||
echo "Removing repository index files..."
|
||||
find "$OUTPUT_DIR" -name "APKINDEX.tar.gz" -delete 2>/dev/null || true
|
||||
|
||||
# Fix permissions on copied files
|
||||
echo "Fixing file permissions..."
|
||||
find "$OUTPUT_DIR" -name "*.apk" -exec chmod 644 {} \; 2>/dev/null || true
|
||||
|
||||
echo "Build completed successfully!"
|
||||
echo "Packages are in $OUTPUT_DIR:"
|
||||
find "$OUTPUT_DIR" -name "*.apk" -exec ls -la {} \;
|
||||
else
|
||||
echo "❌ Failed to copy packages"
|
||||
echo "Checking what's in the container..."
|
||||
docker exec "$CONTAINER_NAME" find /home/builder -name "*.apk" -exec ls -la {} \; 2>/dev/null || true
|
||||
docker exec "$CONTAINER_NAME" ls -la /home/builder/packages/ 2>/dev/null || true
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user