[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 0/3] Yocto Gitlab CI
Hi Bertrand, On 19/10/2022 12:40, Bertrand Marquis wrote: > > > Hi Michal, > >> On 19 Oct 2022, at 10:06, Michal Orzel <michal.orzel@xxxxxxx> wrote: >> >> Hi Stefano, >> >> On 19/10/2022 02:02, Stefano Stabellini wrote: >>> >>> >>> On Mon, 17 Oct 2022, Stefano Stabellini wrote: >>>> It should be >>>> >>>> BB_NUMBER_THREADS="2" >>>> >>>> but that worked! Let me a couple of more tests. >>> >>> I could run successfully a Yocto build test with qemuarm64 as target in >>> gitlab-ci, hurray! No size issues, no build time issues, everything was >>> fine. See: >>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.com%2Fxen-project%2Fpeople%2Fsstabellini%2Fxen%2F-%2Fjobs%2F3193051236&data=05%7C01%7Cmichal.orzel%40amd.com%7C5f7fc3a161fe44b5954808dab1be5c3a%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C638017728406088513%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=2mb3N26wiz39RJNSA4KoIOt%2BG9X7EMDOWIpfKc2ZZOc%3D&reserved=0 >>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.com%2Fxen-project%2Fpeople%2Fsstabellini%2Fxen%2F-%2Fjobs%2F3193083119&data=05%7C01%7Cmichal.orzel%40amd.com%7C5f7fc3a161fe44b5954808dab1be5c3a%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C638017728406088513%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=QhTFefS8NU1f7oLemB0Vtn%2BDCD%2BCnq1v1gEmlKCJt84%3D&reserved=0 >>> >>> I made the appended changes in top of this series. >>> >>> - I pushed registry.gitlab.com/xen-project/xen/yocto:kirkstone and >>> registry.gitlab.com/xen-project/xen/yocto:kirkstone-qemuarm64 >>> - for the gitlab-ci runs, we need to run build-yocto.sh from the copy in >>> xen.git, not from a copy stored inside a container >>> - when building the kirkstone-qemuarm64 container the first time >>> (outside of gitlab-ci) I used COPY and took the script from the local >>> xen.git tree >>> - after a number of tests, I settled on: BB_NUMBER_THREADS="8" more than >>> this and it breaks on some workstations, please add it >>> - I am running the yocto build on arm64 so that we can use the arm64 >>> hardware to do it in gitlab-ci >>> >>> Please feel free to incorporate these changes in your series, and add >>> corresponding changes for the qemuarm32 and qemux86 targets. >>> >>> I am looking forward to it! Almost there! >>> >>> Cheers, >>> >>> Stefano >>> >>> >>> diff --git a/automation/build/yocto/build-yocto.sh >>> b/automation/build/yocto/build-yocto.sh >>> index 0d31dad607..16f1dcc0a5 100755 >>> --- a/automation/build/yocto/build-yocto.sh >>> +++ b/automation/build/yocto/build-yocto.sh >>> @@ -107,6 +107,9 @@ IMAGE_INSTALL:append:pn-xen-image-minimal = " >>> ssh-pregen-hostkeys" >>> # Save some disk space >>> INHERIT += "rm_work" >>> >>> +# Reduce number of jobs >>> +BB_NUMBER_THREADS="8" >>> + >>> EOF >>> >>> if [ "${do_localsrc}" = "y" ]; then >>> diff --git a/automation/build/yocto/kirkstone-qemuarm64.dockerfile >>> b/automation/build/yocto/kirkstone-qemuarm64.dockerfile >>> index f279a7af92..aea3fc1f3e 100644 >>> --- a/automation/build/yocto/kirkstone-qemuarm64.dockerfile >>> +++ b/automation/build/yocto/kirkstone-qemuarm64.dockerfile >>> @@ -16,7 +16,8 @@ ARG target=qemuarm64 >>> >>> # This step can take one to several hours depending on your download >>> bandwith >>> # and the speed of your computer >>> -RUN /home/$USER_NAME/bin/build-yocto.sh --dump-log $target >>> +COPY ./build-yocto.sh / >>> +RUN /build-yocto.sh --dump-log $target >>> >>> FROM $from_image >>> >>> diff --git a/automation/build/yocto/kirkstone.dockerfile >>> b/automation/build/yocto/kirkstone.dockerfile >>> index 367a7863b6..ffbd91aa90 100644 >>> --- a/automation/build/yocto/kirkstone.dockerfile >>> +++ b/automation/build/yocto/kirkstone.dockerfile >>> @@ -84,9 +84,6 @@ RUN mkdir -p /home/$USER_NAME/yocto-layers \ >>> /home/$USER_NAME/xen && \ >>> chown $USER_NAME.$USER_NAME /home/$USER_NAME/* >>> >>> -# Copy the build script >>> -COPY build-yocto.sh /home/$USER_NAME/bin/ >>> - >>> # clone yocto repositories we need >>> ARG yocto_version="kirkstone" >>> RUN for rep in \ >>> diff --git a/automation/gitlab-ci/build.yaml >>> b/automation/gitlab-ci/build.yaml >>> index ddc2234faf..4b8bcde252 100644 >>> --- a/automation/gitlab-ci/build.yaml >>> +++ b/automation/gitlab-ci/build.yaml >>> @@ -584,6 +584,22 @@ alpine-3.12-gcc-arm64-boot-cpupools: >>> EXTRA_XEN_CONFIG: | >>> CONFIG_BOOT_TIME_CPUPOOLS=y >>> >>> +yocto-kirkstone-qemuarm64: >>> + stage: build >>> + image: registry.gitlab.com/xen-project/xen/${CONTAINER} >>> + script: >>> + - ./automation/build/yocto/build-yocto.sh -v --log-dir=./logs >>> --xen-dir=`pwd` qemuarm64 >>> + variables: >>> + CONTAINER: yocto:kirkstone-qemuarm64 >>> + artifacts: >>> + paths: >>> + - '*.log' >>> + - '*/*.log' >> The above lines are not needed as the logs/* below will handle them all >> (logs are only stored in logs/). > > Ack > >> >>> + - 'logs/*' >>> + when: always >>> + tags: >>> + - arm64 >>> + >> build-yocto.sh performs both build and run actions. I think it'd be better >> to move this into test.yaml in that case. >> The best would be to create one build job (specifying --no-run) in >> build.yaml and one test job (specifying --no-build) in test.yaml. >> This however would probably require marking path >> build/tmp/deploy/***/qemuarm64 as an build artifact. The question then is >> whether having this path would be enough for runqemu (Bertrand's opinion >> needed). > > This will not be enough to run qemu as the qemu binary and its dependencies > are in the build artifacts and not in deploy. > Splitting the build and run is not a good idea because the size of the > artifact between the 2 will be huge. > >> >> Apart from that there is an aspect of Yocto releases and the >> containers/tests names. >> Yocto needs to be up-to-date in order to properly build Xen+tools. >> This basically means that we will need to update the containers once >> per Yocto release. The old containers would still need to be stored in our >> CI container registry >> so that we can use CI for older versions of Xen. However, updating the >> containers would also require >> modifying the existing tests (for now we have e.g. yocto-kirkstone-qemuarm64 >> but in a month we will have >> to change them to yocto-langdale-qemuarm64). In a few years time this will >> result in several CI jobs >> that are the same but differ only in name/container. I would thus suggest to >> name the CI jobs like this: >> yocto-qemuarm64 (without yocto release name) and define the top-level >> YOCTO_CONTAINER variable to store >> the current yocto release container. This will solve the issue I described >> above. > > I think we have no other way around this and we will need to have one Yocto > release supported by Xen officially so > we will have to keep old docker images for old releases of Xen and move to > newer versions of Yocto in staging when > it is needed. > > We have to find a way for gitlab-ci to use the build.yaml contained inside > the tree that is to be tested somehow so that gitlab would automatically take > the right one. > Which means that build.yaml will be different between branches and contain > the right version for the current branch. > What I suggest is that with each new yocto release, we add new docker container files and push them to registry. So we will end up in a registry having e.g. (arm64 as an example): - kirkstone-qemuarm64 - langdale-qemuarm64 We maintain only the one group of CI jobs whose names are generic (yocto-qemuarm64). After adding new containers for a new Yocto release, we modify the YOCTO_RELEASE variable to point to the latest yocto release containers. test.yaml: ... # Yocto test jobs variables: YOCTO_RELEASE: "kirkstone" yocto-qemuarm64: extends: .test-jobs-common script: - ./automation/build/yocto/build-yocto.sh -v --log-dir=./logs --xen-dir=`pwd` qemuarm64 variables: CONTAINER: yocto:${YOCTO_RELEASE}-qemuarm64 artifacts: paths: - 'logs/*' when: always tags: - arm64 This means that: - on the current staging branch the YOCTO_RELEASE points to the latest containers (for the latest yocto release) - on the old stable branches the YOCTO_RELEASE points to the old containers (for the old yocto release). ~Michal
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |