{"id":281,"date":"2026-04-16T23:13:29","date_gmt":"2026-04-17T03:13:29","guid":{"rendered":"https:\/\/blog.siliconbrane.com\/?p=281"},"modified":"2026-04-20T00:06:54","modified_gmt":"2026-04-20T04:06:54","slug":"yocto-setup-with-docker-and-jenkins","status":"publish","type":"post","link":"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/","title":{"rendered":"Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins"},"content":{"rendered":"\n<p>Building Yocto directly on a host machine is fragile \u2014 dependency mismatches, missing packages, and environment drift can break a build that worked yesterday. A Docker\u2011based build environment solves this by giving you:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A clean, reproducible OS<\/li>\n\n\n\n<li>A known\u2011good dependency set<\/li>\n\n\n\n<li>Zero host pollution<\/li>\n\n\n\n<li>Portability across machines<\/li>\n\n\n\n<li>Easy integration with CI (Jenkins, GitHub Actions, GitLab CI)<\/li>\n<\/ul>\n\n\n\n<p>I am using a Ubuntu 24.04 server and to resolve conflicts I will use Docker. Here is a post I made <a href=\"https:\/\/blog.siliconbrane.com\/index.php\/2020\/07\/07\/quick-and-easy-docker-setup\/\" type=\"link\" id=\"https:\/\/blog.siliconbrane.com\/index.php\/2020\/07\/07\/quick-and-easy-docker-setup\/\">how to install docker<\/a> if you don&#8217;t have it installed it already. <\/p>\n\n\n\n<p>We will use a Beagle Bone Black (BBB) as the hardware. Its easily available and relatively cheap and decently powerful. Its widely available as well. <\/p>\n\n\n\n<p><strong><strong>1. Directory Layout<\/strong><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/&lt;path to your folder&gt;\/yocto\/\n   \u251c\u2500\u2500 docker-compose.yml\n   \u251c\u2500\u2500 downloads\/\n   \u251c\u2500\u2500 sstate-cache\/\n   \u2514\u2500\u2500 workspace\/\n        \u251c\u2500\u2500 sources\/\n        \u2514\u2500\u2500 build\/\n<\/code><\/pre>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">mkdir -p yocto\/{downloads,sstate-cache,workspace}\ncd yocto<\/pre><\/div>\n\n\n\n<p><strong>2. <code>docker-compose.yml<\/code> (scarthgap\u2011ready)<\/strong><\/p>\n\n\n\n<p>Inside the yocto folder yocto\/, lets create a file called &#8220;Dockerfile&#8221; no file extension is needed. <br><\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">touch Dockerfile\nnano Dockerfile<\/pre><\/div>\n\n\n\n<p>Inside the Dockerfile lets put all the dependencies and work with the latest Ubuntu available now. This is to create a custom Ubuntu docker with all the build dependencies. <\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">FROM ubuntu:24.04\n\nENV DEBIAN_FRONTEND=noninteractive\n\nRUN apt-get update &amp;&amp; apt-get install -y \\\n    gawk wget git-core diffstat unzip texinfo gcc-multilib \\\n    build-essential chrpath socat cpio python3 python3-pip \\\n    python3-pexpect xz-utils debianutils iputils-ping \\\n    libsdl1.2-dev xterm locales sudo ccache lz4 zstd file \\\n    &amp;&amp; locale-gen en_US.UTF-8 &amp;&amp; apt install -y locales nano\n\nRUN useradd -m yocto &amp;&amp; echo &quot;yocto ALL=(ALL) NOPASSWD:ALL&quot; &gt;&gt; \/etc\/sudoers\n\nUSER yocto\nWORKDIR \/workspace<\/pre><\/div>\n\n\n\n<p>Once you have the content in the file close it by pressing Ctrl + X. Now we can create the custom image with the command below. <\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">docker build -t yocto-bbb .<\/pre><\/div>\n\n\n\n<p><strong>3. Run the Container With Proper Bind Mounts<\/strong><\/p>\n\n\n\n<p>Now you can start the docker container by using the command below:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">docker run -it --privileged \\\n  -v $(pwd)\/downloads:\/downloads \\\n  -v $(pwd)\/sstate-cache:\/sstate-cache \\\n  -v $(pwd)\/workspace:\/workspace \\\n  yocto-bbb<\/pre><\/div>\n\n\n\n<p>Inside the container, you\u2019ll be logged in as the yocto user.<\/p>\n\n\n\n<p>Next time you can use the command below to go to the command terminal.<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">docker exec -it --privileged yocto-bbb bash<\/pre><\/div>\n\n\n\n<p><strong><strong>4. Clone Yocto (Scarthgap) and Initialize the Build Environmen<\/strong><\/strong>t<\/p>\n\n\n\n<p>Inside the container:<\/p>\n\n\n\n<p>We will set the correct permission to the folders and clone <code>poky<\/code> <code>scarthgap<\/code> and initialize the build environment. <\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">sudo chown -R yocto:yocto \/workspace\ncd \/workspace\/sources\ngit clone git:\/\/git.yoctoproject.org\/poky -b scarthgap\ncd poky\nsource oe-init-build-env ..\/build<\/pre><\/div>\n\n\n\n<p>This will create the 2 conf file we need to edit for our setup:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>workspace\/\n\u2514\u2500\u2500 build\/\n    \u251c\u2500\u2500 conf\/local.conf\n    \u2514\u2500\u2500 conf\/bblayers.conf\n<\/code><\/pre>\n\n\n\n<p><strong><strong>5. Configure Yocto for the BeagleBone Black<\/strong><\/strong><\/p>\n\n\n\n<p>Edit <code>conf\/bblayers.conf <\/code>and add the meta\u2011ti layer:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">cd \/workspace\/sources\ngit clone https:\/\/git.yoctoproject.org\/meta-ti -b scarthgap\nnano build\/conf\/bblayers.conf<\/pre><\/div>\n\n\n\n<p>Add the below script to <code>bblayers.conf<\/code>:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">Code\nBBLAYERS += &quot; \\\n  \/workspace\/sources\/meta-ti \\\n&quot;<\/pre><\/div>\n\n\n\n<p><strong>6. Configure Caches and BBB Machine Settings<\/strong><\/p>\n\n\n\n<p>Edit<code> nano build\/conf\/local.conf:<\/code><\/p>\n\n\n\n<p><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-vivid-red-color\"><strong>Update this Section<\/strong><\/mark><\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">MACHINE = &quot;beaglebone&quot;\n\nDL_DIR ?= &quot;\/downloads&quot;\nSSTATE_DIR ?= &quot;\/sstate-cache&quot;\n\nINHERIT += &quot;ccache&quot;\nCCACHE_DIR = &quot;\/workspace\/ccache&quot;<\/pre><\/div>\n\n\n\n<p>Next lets create the cache directory <\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">mkdir -p \/workspace\/ccache<\/pre><\/div>\n\n\n\n<p><strong>7. Build a BBB Image<\/strong><\/p>\n\n\n\n<p>To build the image we need to run the commands below. <\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">cd \/workspace\/sources\/poky\nsource oe-init-build-env ..\/build\nbitbake core-image-minimal<\/pre><\/div>\n\n\n\n<p>We can also build:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u2022 core-image-base\n\u2022 core-image-full-cmdline\n\u2022 tisdk-default-image (if using TI SDK layers)\n<\/code><\/pre>\n\n\n\n<p><strong>8. Output Artifacts<\/strong><\/p>\n\n\n\n<p>After the build completes, images will be located in:<\/p>\n\n\n\n<p><code>workspace\/build\/tmp\/deploy\/images\/beaglebone\/<\/code><\/p>\n\n\n\n<p>You will see:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>core-image-minimal-beaglebone.wic.xz<\/code><\/li>\n\n\n\n<li><code>u-boot-beaglebone.bin<\/code><\/li>\n\n\n\n<li>MLO<\/li>\n\n\n\n<li>zImage or Image<\/li>\n\n\n\n<li>DTBs<\/li>\n<\/ul>\n\n\n\n<p>Flash the <code>.wic.xz<\/code> to an SD card:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;shell&quot;,&quot;mime&quot;:&quot;text\/x-sh&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:true,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;Shell&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;shell&quot;}\">xz -d core-image-minimal-beaglebone.wic.xz\nsudo dd if=core-image-minimal-beaglebone.wic of=\/dev\/sdX bs=4M status=progress\nsync<\/pre><\/div>\n\n\n\n<p>In Jenkins UI:<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\"><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Manage Jenkins \u2192 Nodes \u2192 New Node<\/li>\n\n\n\n<li>Name: <code>yocto-agent<\/code><\/li>\n\n\n\n<li>Type: \u201cPermanent Agent\u201d<\/li>\n\n\n\n<li>Remote root dir: <code>\/workspace<\/code><\/li>\n\n\n\n<li>Launch method: \u201cLaunch agent via execution of command on the controller\u201d or SSH (your choice)<\/li>\n\n\n\n<li>Label: <code>yocto-bbb<\/code><\/li>\n<\/ul>\n\n\n\n<p>If you use SSH, run an SSH server in the agent container; if you use JNLP, download the agent jar and run it inside the container.<\/p>\n\n\n\n<p><strong>6. Jenkinsfile for BBB + scarthgap<\/strong><\/p>\n\n\n\n<p>Create a <code>Jenkinsfile<\/code> in your Yocto platform repo (or a freestyle pipeline using this):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pipeline {\n    agent { label 'yocto-bbb' }\n\n    environment {\n        YOCTO_TOP = \"\/workspace\"\n        BUILD_DIR = \"${YOCTO_TOP}\/build-bbb\"\n        MACHINE   = \"beaglebone\"\n        TARGET    = \"core-image-minimal\"\n    }\n\n    stages {\n        stage('Env info') {\n            steps {\n                sh 'uname -a'\n                sh 'nproc'\n            }\n        }\n\n        stage('Prepare build env') {\n            steps {\n                sh \"\"\"\n                    cd ${YOCTO_TOP}\n                    source sources\/poky\/oe-init-build-env ${BUILD_DIR}\n                    bitbake-layers show-layers\n                \"\"\"\n            }\n        }\n\n        stage('Build image') {\n            steps {\n                sh \"\"\"\n                    cd ${YOCTO_TOP}\n                    source sources\/poky\/oe-init-build-env ${BUILD_DIR}\n                    bitbake ${TARGET}\n                \"\"\"\n            }\n        }\n\n        stage('Archive artifacts') {\n            steps {\n                archiveArtifacts artifacts: \"${BUILD_DIR}\/tmp\/deploy\/images\/${MACHINE}\/*\", fingerprint: true\n            }\n        }\n    }\n}\n<\/code><\/pre>\n\n\n\n<p><strong>7. Where your BBB images will land<\/strong><\/p>\n\n\n\n<p>After a successful build:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/workspace\/build-bbb\/tmp\/deploy\/images\/beaglebone\/<\/code><\/pre>\n\n\n\n<p>You\u2019ll see <code>.wic<\/code>, <code>.tar.xz<\/code>, <code>u-boot<\/code>, kernel, etc.\u2014ready to flash.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Building Yocto directly on a host machine is fragile \u2014 dependency mismatches, missing packages, and environment drift can break a build that worked yesterday. A Docker\u2011based build environment solves this by giving you: I am using a Ubuntu 24.04 server and to resolve conflicts I will use Docker. Here is a post I made how&hellip;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-281","post","type-post","status-publish","format-standard","hentry","category-siliconbranenews"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins - SiliconBrane Inc<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins - SiliconBrane Inc\" \/>\n<meta property=\"og:description\" content=\"Building Yocto directly on a host machine is fragile \u2014 dependency mismatches, missing packages, and environment drift can break a build that worked yesterday. A Docker\u2011based build environment solves this by giving you: I am using a Ubuntu 24.04 server and to resolve conflicts I will use Docker. Here is a post I made how&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/\" \/>\n<meta property=\"og:site_name\" content=\"SiliconBrane Inc\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/siliconbraneinc\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-17T03:13:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-20T04:06:54+00:00\" \/>\n<meta name=\"author\" content=\"Kaushik Ray\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kaushik Ray\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/index.php\\\/2026\\\/04\\\/16\\\/yocto-setup-with-docker-and-jenkins\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/index.php\\\/2026\\\/04\\\/16\\\/yocto-setup-with-docker-and-jenkins\\\/\"},\"author\":{\"name\":\"Kaushik Ray\",\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/#\\\/schema\\\/person\\\/fdf84c44d9bd05d66f7206187c353cc9\"},\"headline\":\"Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins\",\"datePublished\":\"2026-04-17T03:13:29+00:00\",\"dateModified\":\"2026-04-20T04:06:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/index.php\\\/2026\\\/04\\\/16\\\/yocto-setup-with-docker-and-jenkins\\\/\"},\"wordCount\":462,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/#organization\"},\"articleSection\":[\"SiliconBrane News\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.siliconbrane.com\\\/index.php\\\/2026\\\/04\\\/16\\\/yocto-setup-with-docker-and-jenkins\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/index.php\\\/2026\\\/04\\\/16\\\/yocto-setup-with-docker-and-jenkins\\\/\",\"url\":\"https:\\\/\\\/blog.siliconbrane.com\\\/index.php\\\/2026\\\/04\\\/16\\\/yocto-setup-with-docker-and-jenkins\\\/\",\"name\":\"Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins - SiliconBrane Inc\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/#website\"},\"datePublished\":\"2026-04-17T03:13:29+00:00\",\"dateModified\":\"2026-04-20T04:06:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/index.php\\\/2026\\\/04\\\/16\\\/yocto-setup-with-docker-and-jenkins\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.siliconbrane.com\\\/index.php\\\/2026\\\/04\\\/16\\\/yocto-setup-with-docker-and-jenkins\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/index.php\\\/2026\\\/04\\\/16\\\/yocto-setup-with-docker-and-jenkins\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.siliconbrane.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/#website\",\"url\":\"https:\\\/\\\/blog.siliconbrane.com\\\/\",\"name\":\"SiliconBrane Inc\",\"description\":\"Live Smart!\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.siliconbrane.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/#organization\",\"name\":\"SiliconBrane Inc.\",\"url\":\"https:\\\/\\\/blog.siliconbrane.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blog.siliconbrane.com\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/android-chrome-512x512-2.png\",\"contentUrl\":\"https:\\\/\\\/blog.siliconbrane.com\\\/wp-content\\\/uploads\\\/2020\\\/06\\\/android-chrome-512x512-2.png\",\"width\":512,\"height\":512,\"caption\":\"SiliconBrane Inc.\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/siliconbraneinc\\\/\",\"https:\\\/\\\/www.instagram.com\\\/siliconbraneinc\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/organization-guest\\\/company\\\/siliconbraneinc\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.siliconbrane.com\\\/#\\\/schema\\\/person\\\/fdf84c44d9bd05d66f7206187c353cc9\",\"name\":\"Kaushik Ray\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd47e9b23705ad8cfafb167fd5044f3f13974fc4d2aca07ff3b03e933180e75e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd47e9b23705ad8cfafb167fd5044f3f13974fc4d2aca07ff3b03e933180e75e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fd47e9b23705ad8cfafb167fd5044f3f13974fc4d2aca07ff3b03e933180e75e?s=96&d=mm&r=g\",\"caption\":\"Kaushik Ray\"},\"sameAs\":[\"http:\\\/\\\/www.siliconbrane.com\"],\"url\":\"https:\\\/\\\/blog.siliconbrane.com\\\/index.php\\\/author\\\/kaushik_ray_1\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins - SiliconBrane Inc","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/","og_locale":"en_US","og_type":"article","og_title":"Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins - SiliconBrane Inc","og_description":"Building Yocto directly on a host machine is fragile \u2014 dependency mismatches, missing packages, and environment drift can break a build that worked yesterday. A Docker\u2011based build environment solves this by giving you: I am using a Ubuntu 24.04 server and to resolve conflicts I will use Docker. Here is a post I made how&hellip;","og_url":"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/","og_site_name":"SiliconBrane Inc","article_publisher":"https:\/\/www.facebook.com\/siliconbraneinc\/","article_published_time":"2026-04-17T03:13:29+00:00","article_modified_time":"2026-04-20T04:06:54+00:00","author":"Kaushik Ray","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kaushik Ray","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/#article","isPartOf":{"@id":"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/"},"author":{"name":"Kaushik Ray","@id":"https:\/\/blog.siliconbrane.com\/#\/schema\/person\/fdf84c44d9bd05d66f7206187c353cc9"},"headline":"Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins","datePublished":"2026-04-17T03:13:29+00:00","dateModified":"2026-04-20T04:06:54+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/"},"wordCount":462,"commentCount":0,"publisher":{"@id":"https:\/\/blog.siliconbrane.com\/#organization"},"articleSection":["SiliconBrane News"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/","url":"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/","name":"Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins - SiliconBrane Inc","isPartOf":{"@id":"https:\/\/blog.siliconbrane.com\/#website"},"datePublished":"2026-04-17T03:13:29+00:00","dateModified":"2026-04-20T04:06:54+00:00","breadcrumb":{"@id":"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.siliconbrane.com\/index.php\/2026\/04\/16\/yocto-setup-with-docker-and-jenkins\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.siliconbrane.com\/"},{"@type":"ListItem","position":2,"name":"Yocto setup with Docker and JenkinsBuilding a Jenkins (Scarthgap + BeagleBone Black)Yocto setup with Docker and Jenkins"}]},{"@type":"WebSite","@id":"https:\/\/blog.siliconbrane.com\/#website","url":"https:\/\/blog.siliconbrane.com\/","name":"SiliconBrane Inc","description":"Live Smart!","publisher":{"@id":"https:\/\/blog.siliconbrane.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.siliconbrane.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/blog.siliconbrane.com\/#organization","name":"SiliconBrane Inc.","url":"https:\/\/blog.siliconbrane.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.siliconbrane.com\/#\/schema\/logo\/image\/","url":"https:\/\/blog.siliconbrane.com\/wp-content\/uploads\/2020\/06\/android-chrome-512x512-2.png","contentUrl":"https:\/\/blog.siliconbrane.com\/wp-content\/uploads\/2020\/06\/android-chrome-512x512-2.png","width":512,"height":512,"caption":"SiliconBrane Inc."},"image":{"@id":"https:\/\/blog.siliconbrane.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/siliconbraneinc\/","https:\/\/www.instagram.com\/siliconbraneinc\/","https:\/\/www.linkedin.com\/organization-guest\/company\/siliconbraneinc"]},{"@type":"Person","@id":"https:\/\/blog.siliconbrane.com\/#\/schema\/person\/fdf84c44d9bd05d66f7206187c353cc9","name":"Kaushik Ray","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/fd47e9b23705ad8cfafb167fd5044f3f13974fc4d2aca07ff3b03e933180e75e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fd47e9b23705ad8cfafb167fd5044f3f13974fc4d2aca07ff3b03e933180e75e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fd47e9b23705ad8cfafb167fd5044f3f13974fc4d2aca07ff3b03e933180e75e?s=96&d=mm&r=g","caption":"Kaushik Ray"},"sameAs":["http:\/\/www.siliconbrane.com"],"url":"https:\/\/blog.siliconbrane.com\/index.php\/author\/kaushik_ray_1\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.siliconbrane.com\/index.php\/wp-json\/wp\/v2\/posts\/281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.siliconbrane.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.siliconbrane.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.siliconbrane.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.siliconbrane.com\/index.php\/wp-json\/wp\/v2\/comments?post=281"}],"version-history":[{"count":53,"href":"https:\/\/blog.siliconbrane.com\/index.php\/wp-json\/wp\/v2\/posts\/281\/revisions"}],"predecessor-version":[{"id":372,"href":"https:\/\/blog.siliconbrane.com\/index.php\/wp-json\/wp\/v2\/posts\/281\/revisions\/372"}],"wp:attachment":[{"href":"https:\/\/blog.siliconbrane.com\/index.php\/wp-json\/wp\/v2\/media?parent=281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.siliconbrane.com\/index.php\/wp-json\/wp\/v2\/categories?post=281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.siliconbrane.com\/index.php\/wp-json\/wp\/v2\/tags?post=281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}