Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explicitly set Version to ensure Deployment Repeatability #48

Closed
laverick opened this issue Jun 26, 2018 · 1 comment
Closed

Explicitly set Version to ensure Deployment Repeatability #48

laverick opened this issue Jun 26, 2018 · 1 comment

Comments

@laverick
Copy link

laverick commented Jun 26, 2018

The way I understand it the current approach to tracking GOOGLE_CHROME_CHANNEL fails to guarantee repeatability in deployments and violates the 12 Factor App approach. If Google updates the stable version then the same code deployed to the same heroku environment at a later time could break purely due to the time-based dependency. As far as I can tell the previous configuration would not be recoverable with a rollback either.


Example:

Headless rendering via this build pack was working fine for us on Cedar-14, then on a subsequent deploy it was broken.

Chromedriver would fall over with the following error:

Selenium::WebDriver::Error::UnknownError: unknown error: DevToolsActivePort file doesn't exist

I tried running chrome from the command line, but it also failed as follows.

~ $ /app/.apt/usr/bin/google-chrome-stable
/app/.apt/opt/google/chrome/chrome: /lib/x86_64-linux-gnu/libdbus-1.so.3: no version information available (required by /app/.apt/usr/lib/x86_64-linux-gnu/libatk-bridge-2.0.so.0)
/app/.apt/opt/google/chrome/chrome: /lib/x86_64-linux-gnu/libdbus-1.so.3: no version information available (required by /app/.apt/usr/lib/x86_64-linux-gnu/libatspi.so.0)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmirclient.so.9)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmirclient.so.9)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmirclient.so.9)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmircommon.so.7)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmircommon.so.7)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmircommon.so.7)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmirprotobuf.so.3)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmirprotobuf.so.3)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmircore.so.1)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libmircore.so.1)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libprotobuf-lite.so.9)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0)
/app/.apt/opt/google/chrome/chrome: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /app/.apt/usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0)

On a whim I decided to upgrade our dated stack Cedar-14 to Heroku-16 and everything seemed to work again. I'm assuming a new version of chrome stopped working on Cedar-14.

I don't see how I could possibly go back to the previous working version of our application with the way this buildpack currently handles version configuration.

@laverick laverick changed the title Explicitly set Version Explicitly set Version to ensure Deployment Repeatability Jun 26, 2018
@joshwlewis
Copy link
Member

The way I understand it the current approach to tracking GOOGLE_CHROME_CHANNEL fails to guarantee repeatability in deployments and violates the 12 Factor App approach.

Yes, I tend to agree here. Unfortunately, Google only provides packages for their 3 release channels. They don't provide a way to download pre-built binaries of specific versions, which would be ideal to solve this problem. It is possible to download and build binaries for specific versions, but it's very resource intensive. So, at least for right now, we can't support version pinning.

Chromium does provide some version pinned packages which might make more sense to target repeatability. However, this buildpack targets Chrome, so maybe that's an idea for another buildpack.

On a whim I decided to upgrade our dated stack Cedar-14 to Heroku-16 and everything seemed to work again. I'm assuming a new version of chrome stopped working on Cedar-14.

I'm glad to hear it's working for you again. It's a good call to upgrade your stack anyway, Cedar-14 won't be around too much longer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants