This is official Zebrunner CE slave image.
It might be integrated into the environment in different ways: docker-composer, AWS ECS cluster, Kubernetes etc. Example might be found in jenkins-master repository.
Jenkins slave docker.
This is official Zebrunner CE slave image.
It might be integrated into the environment in different ways: docker-composer, AWS ECS cluster, Kubernetes etc. Example might be found in jenkins-master repository.
for building and publishing python artifacts we need https://python-poetry.org/docs/
also python3 nedded to be able to run something
maybe python3-venv
env var should be used but can't be delivered to jenkins master as env variable
as we are going to move onto the open source a lot of static code analysis we have to provide default slave with ability to run aws cli to download jacoco binary report from aws s3
in 2.2 CE we plan to upgrade jenkins till latest stable. Let's review plugin number and provide the same swarm-clinet.jar for slave for compitibility
1.1-docker image has but 1.2-docker not. it should be fixed asap
31.0-rc2 seems work correct with MCloud so we have to return this utility into the default jenkins slave
during mass jobs start each thread could corrupt downloading dependencies.
As result we see that tests could fail later due to the class not found exception.
also during compilation maven shows below error in spite of the fact that "-U" arg is provided:
[ERROR] error reading /root/.m2/repository/com/itextpdf/itextpdf/5.0.6/itextpdf-5.0.6.jar; zip file is empty
existing CE v2.1 uses swarm plugin v3.24, let's deliver slave with the same jar by default.
Need to change base system platform to Alpine to reduce size of container
Need slave to release ops-infra-tf project.
jenkins/inbound-agent:latest-jdk11
has a newer version. let's reuse it to pull all fixes and release 1.4 jnpl slave
add valid install command for lsof utility for
Dockerfile
Dockerfile-alpine
Dockerfile-alpine-jdk11
we've found that during provisioning of the jenkins it might starts pretty slow (5m+). and even in starting state it can't return swarm plugin jar (503 error as I remember).
so let's use SWARM_RESPONSE_TIMEOUT=60
delay only when connection to jenkins master is established.
when connection is not available we have to try to connect forever without any limitations, i.e. even if jenkins master is available tomorrow agent should be able to reconnect
let's build using python:alpine3.14
docker image
need install the same on alpine
need jenkins-slave with ability to build any gradle programs
we need jenkins-slave image where we can execute docker related tasks. As of now - no need to install maven, java etc...
Error while executing process. Cannot run program "gpg": error=2, No such file or directory
Subj
I already commented installation of some tooling but size of the alpine image is still around 1Gb which is pretty huge.
In scope of this research I'd like to get answers onto the below questions about toolset and sizing because original alpine image is about 6Mb only :)
alpine 3.11.3 e7d92cdc71fe 9 months ago 5.59MB
What tools are installed by this command? their size and necessity for slave:
https://github.com/zebrunner/jenkins-slave/blob/83bc0d60e911c09f0f728b57d89d7f09c5f9cf64/Dockerfile#L15
size of docker components:
https://github.com/zebrunner/jenkins-slave/blob/83bc0d60e911c09f0f728b57d89d7f09c5f9cf64/Dockerfile#L39
Find commit and maybe person who requested to install kubectl, size of the image without it:
https://github.com/zebrunner/jenkins-slave/blob/83bc0d60e911c09f0f728b57d89d7f09c5f9cf64/Dockerfile#L45
size of the preinstalled 3.6.3 maven
https://github.com/zebrunner/jenkins-slave/blob/83bc0d60e911c09f0f728b57d89d7f09c5f9cf64/Dockerfile#L103
size of the java, inspect maybe other java version already installed...
https://github.com/zebrunner/jenkins-slave/blob/83bc0d60e911c09f0f728b57d89d7f09c5f9cf64/Dockerfile#L113
We already use M3 maven installed by jenkins from internet. So installing 3.6.3 maven again in the slave seems overhelming. But to main a decision we have to measure execution time for web-demo-test job as is and with removed maven&carina-demo dependencies. If time the same, please do 3 attempts with maven + carina-demo and without and collect statistic.
need upgrade swarm.jar from 3.6 to latest available 3.19 to solve all inconsistencies in connecting to latest jenkins
subj
let's provide alpine image with docker on-board already
need to redownload carina-demo dependencies everytime new carina is released. that's allow to speedup tests execution on actual CI environments.
1.0 are built using 6.4.44 or 6.5.44 core
steps to deploy documentation need mkdocs inside the alpine container:
apk add --update py-pip
apk add --update python3
apk add --update gcc
apk add --update python3-dev
apk add --update musl-dev
pip install mkdocs
pip install mkdocs-material
let's examine the size of the new slave and include into the default jenkins-slave if possible
subj
awscli has only cli tools installed so we can easily switch to the latest-ci which already has it
it is not recommended to publish any binary files. let's improve Dockerfile uploading exact swarm plugin jar during docker image build.
for example take a look how the same exercise was done for sonarqube jar plugin: https://github.com/zebrunner/sonarqube/blob/f4db117c809250f5df2c7372a1f4b9c8a3fbe8ee/Dockerfile#L26
try to integrate android adb tools into the jenkins slave without installing android sdk. better to integrate into the new slave generated from #28
let's investigate what might be done to combine all logic in the single Dockerfile and generate build.sh script which using args and params can build all posssible agent images:
swarm
jnpl
docker
etc
good article:
https://stackoverflow.com/questions/43654656/dockerfile-if-else-condition-with-external-arguments
and good example:
https://github.com/aerokube/selenoid/blob/master/ci/build.sh
starting from 1.4 let's release and publish docker images to public.ecr.aws/zebrunner/jenkins-slave
let's investigate an option to download sarm-plugin.jar from jenkins-master before start.
it should guarantee that our slaves can automatically reconnect to upgraded swarm on master.
make sure to validate the sate of the downloaded jar (via curl or wget?) and only if everything is ok - replace default one we provide with image.
INFO - Documentation built in 0.53 seconds
WARNING - Version check skipped: No version specified in previous deployment.
INFO - Copying '/opt/jenkins/workspace/qps-infra/deploy-docs-qps-infra/site' to 'gh-pages' branch and pushing to GitHub.
git: 'fast-import' is not a git command. See 'git --help'.
we can't predict parent OS so binary sharing is not valid solution and might work only for native alpine-alpine stuff
for alpine install line is:
apk add openssh-client
and onemore:
apk add gnupg
Jenkins-jnpl is already available with swarm client and jdk 8 and 11.
Their size is optiomized and around 200-300Mb.
It should satisfy most of our needs. All the rest like adb from android sdk should be added to specific slave images.
Investigate if we can jump onto the default jenkins-jnpl images at all and collect requirements for custom android adb slaves
decomission jdk11 and produce by default with jdk17 on board. make sure jenkins master also uses jdk17 (?!)
alpine images doesn't have lsof utility
ERROR: unsatisfiable constraints:
so:libprotobuf.so.24 (missing):
required by: android-tools-30.0.5-r0[so:libprotobuf.so.24]
The command '/bin/sh -c apk add android-tools --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing' returned a non-zero code: 2
/entrypoint.sh: line 7: java: command not found
Currently most of Zebrunner build jobs are using JDK 11 along with kubect client. We have to support both in new images.
need awscli on ubuntu slave container by default.
I'm ok to install it by default for each qps slaves.
apt-get install awscli
due to the crashes in swarm from time to time slave can't be re-registered. let's investigate possibility to provide random name posfix like:
jenkins-slave-python-PP86436734
as part of the infra we should organize android+gradle jenkins-slave using minimized linux os like alpine if possible:
https://github.com/qaprosoft/qps-sample-android
jenkins-slave by default should be compatible for new launcher generation
we have to test if jnpl dynamic jenkins-slaves might be used to connect into the MCloud and use devices remotely
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.