harlan-zw/unlighthouse

Running unlighthouse in Jenkins Chromium error

thidayatullah opened this issue · 1 comments

Describe the bug

I write a go module to read data from google sheets, and run unlighthouse audit before writing the report back into the sheet.
It works fine on my computer. Now I want to run it from Jenkins job but I keep getting errors.

The Jenkins agent run on a container and doesn't have Chrome installed. So I added this into my unlighthouse.config.ts:
(In my local computer I don't use this config because it runs well with my System Chrome Browser)

export default {
    chrome: {
      useSystem: false,
    },
};

It installed Chromium successfully but failed to launch it with this error:

Error: Unable to launch browser for worker, error message: Failed to launch the browser process!
/root/.unlighthouse/chromium/linux-1095492/chrome-linux/chrome: error while loading shared libraries: libatk-1.0.so.0: cannot open shared object file: No such file or directory

If I run the module in my computer using the config above, it launch a bunch of Chromium app and then get stuck on this step:
ℹ The url config has been provided with 1 paths for scanning. Disabling sitemap, robots, sampling and crawler.
So I just commented out the config if I want to run it locally.

Here is the bash script I run on Jenkins:

#!/bin/bash
export NVM_DIR="${WORKSPACE}/.nvm"
export NVM_VERSION="18.19.0"

# Create the .nvm directory if it doesn't exist
if [ ! -d "$NVM_DIR" ]; then
    mkdir -p $NVM_DIR
fi

# Install nvm if not already installed
if [ ! -s "$NVM_DIR/nvm.sh" ]; then
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
fi

# Load nvm and install the required Node.js version
export NVM_DIR="$NVM_DIR"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install $NVM_VERSION
nvm use $NVM_VERSION

# Verify Node.js and npm versions
node -v
npm -v

# Install packages
npm install -g @unlighthouse/cli puppeteer

# Manually install missing dependencies
apt install -y chromium
apt-get install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget -y

.
.
.
#some code to download and execute the go binary

EDIT: I successfully install Chromium and missing dependencies on Jenkins pipeline.
Now the error changed to this:

Error: Unable to launch browser for worker, error message: Failed to launch the browser process! undefined
[4606:4606:0520/035905.234446:ERROR:zygote_host_impl_linux.cc(100)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.

How do I add --no-sandbox for puppeteer launch from unlighthouse?

P.S:
I'm new to this Infra stuffs, I'm a iOS dev originally. Sorry if this is just me being stupid, but I'm really stumped.

Appreciate any help.

Thank you.

Reproduction

unlighthouse-ci --site --reporter jsonExpanded --urls / --output-path "./output"

System / Nuxt Info

System:
    OS: Linux 5.15 Debian GNU/Linux 10 (buster) 10 (buster)
    CPU: (4) x64 Intel(R) Xeon(R) CPU @ 2.20GHz
    Memory: 3.54 GB / 7.77 GB
    Container: Yes
    Shell: 5.0.3 - /bin/bash
  Binaries:
    Node: 16.20.2 - /usr/bin/node
    npm: 8.19.4 - /usr/bin/npm