doc/nwl-ci: added update src rev part, branch seeding and nightly trigger
Signed-off-by: Marc Mattmüller <marc.mattmueller@netmodule.com>
This commit is contained in:
parent
2a56bbd0e8
commit
3ff3dc9435
|
|
@ -1929,6 +1929,256 @@ Some side information about the directory structure of the JENKINS_HOME. The tre
|
||||||
+- workspace (working directory for the version control system)
|
+- workspace (working directory for the version control system)
|
||||||
|
|
||||||
|
|
||||||
|
Forward the Seeded Branch as well for the Pipelines
|
||||||
|
####################################################
|
||||||
|
Currently the pipelines that are created by the seed job are taken from the branch main. This shall change as we have
|
||||||
|
the seed job parameter ``SEEDING_BRANCH``. Its value needs to be used within the pipelines to seed. Therefore the
|
||||||
|
parameter needs to bind into the seed file. The changes are seen in the following diff:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
diff --git a/jobs/Jenkinsfile_Seed b/jobs/Jenkinsfile_Seed
|
||||||
|
index c3bb7cf..9cfb6f6 100644
|
||||||
|
--- a/jobs/Jenkinsfile_Seed
|
||||||
|
+++ b/jobs/Jenkinsfile_Seed
|
||||||
|
@@ -1,4 +1,6 @@
|
||||||
|
pipelineJob('nwl') {
|
||||||
|
+ def branchToUse = binding.variables.get("SEEDING_BRANCH")
|
||||||
|
+
|
||||||
|
displayName('1. NWL CI Pipeline')
|
||||||
|
description('CI pipeline for the NetModule Wireless Linux')
|
||||||
|
authorization {
|
||||||
|
@@ -24,7 +26,7 @@ pipelineJob('nwl') {
|
||||||
|
cpsScm {
|
||||||
|
scm {
|
||||||
|
git {
|
||||||
|
- branches('main')
|
||||||
|
+ branches(branchToUse)
|
||||||
|
extensions {
|
||||||
|
cloneOptions {
|
||||||
|
depth(1)
|
||||||
|
@@ -42,6 +44,8 @@ pipelineJob('nwl') {
|
||||||
|
}
|
||||||
|
|
||||||
|
pipelineJob('nwl-target') {
|
||||||
|
+ def branchToUse = binding.variables.get("SEEDING_BRANCH")
|
||||||
|
+
|
||||||
|
displayName('2. NWL Yocto Build')
|
||||||
|
description('CI pipeline building a NetModule Wireless Linux Yocto Target')
|
||||||
|
authorization {
|
||||||
|
@@ -58,7 +62,7 @@ pipelineJob('nwl-target') {
|
||||||
|
cpsScm {
|
||||||
|
scm {
|
||||||
|
git {
|
||||||
|
- branches('main')
|
||||||
|
+ branches(branchToUse)
|
||||||
|
extensions {
|
||||||
|
cloneOptions {
|
||||||
|
depth(1)
|
||||||
|
@@ -77,6 +81,8 @@ pipelineJob('nwl-target') {
|
||||||
|
|
||||||
|
|
||||||
|
pipelineJob('nwl-update-src-rev') {
|
||||||
|
+ def branchToUse = binding.variables.get("SEEDING_BRANCH")
|
||||||
|
+
|
||||||
|
displayName('0. Update Source Revisions')
|
||||||
|
description('CI pipeline updating the source revisions for the NetModule Wireless Linux')
|
||||||
|
authorization {
|
||||||
|
@@ -93,7 +99,7 @@ pipelineJob('nwl-update-src-rev') {
|
||||||
|
cpsScm {
|
||||||
|
scm {
|
||||||
|
git {
|
||||||
|
- branches('main')
|
||||||
|
+ branches(branchToUse)
|
||||||
|
extensions {
|
||||||
|
cloneOptions {
|
||||||
|
depth(1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Extract Update Source Revision Part Into Job
|
||||||
|
############################################
|
||||||
|
Preliminary Information
|
||||||
|
***********************
|
||||||
|
As we have already seen in NetModule's OEM Linux, some recipes refer to a specific source revision of a repository which
|
||||||
|
is independent from the OEM Linux Yocto project. Now there are cases where the project moves forward but the recipe
|
||||||
|
holds still this specific source revision but should be at the latest state. Therefore a workflow was created using
|
||||||
|
devtool to check whether there are new revisions available. Now, it would be possible to update the recipe source
|
||||||
|
revision automatically by using these information. This is very helpful in nightly builds to check if head is still
|
||||||
|
working as expected. At a release we want to fix those revisions which is possible too by automatically commit the
|
||||||
|
revisions found.
|
||||||
|
|
||||||
|
This behavior can be reflected with a Jenkins job.
|
||||||
|
|
||||||
|
Seeding an additional Job
|
||||||
|
*************************
|
||||||
|
The following diff shows you the changes for seeding a new job (where the job is a skeleton).
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
diff --git a/jobs/Jenkinsfile_Seed b/jobs/Jenkinsfile_Seed
|
||||||
|
index 45ec4e4..d1f3f48 100644
|
||||||
|
--- a/jobs/Jenkinsfile_Seed
|
||||||
|
+++ b/jobs/Jenkinsfile_Seed
|
||||||
|
@@ -65,3 +65,38 @@ pipelineJob('nwl-target') {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+pipelineJob('nwl-update-src-rev') {
|
||||||
|
+ def branchToUse = binding.variables.get("SEEDING_BRANCH")
|
||||||
|
+
|
||||||
|
+ displayName('0. Update Source Revisions')
|
||||||
|
+ description('CI pipeline updating the source revisions for the NetModule Wireless Linux')
|
||||||
|
+ authorization {
|
||||||
|
+ permissionAll('anonymous')
|
||||||
|
+ }
|
||||||
|
+ authenticationToken('buildNwlToken')
|
||||||
|
+ logRotator {
|
||||||
|
+ artifactDaysToKeep(7)
|
||||||
|
+ artifactNumToKeep(7)
|
||||||
|
+ daysToKeep(7)
|
||||||
|
+ numToKeep(7)
|
||||||
|
+ }
|
||||||
|
+ definition {
|
||||||
|
+ cpsScm {
|
||||||
|
+ scm {
|
||||||
|
+ git {
|
||||||
|
+ branches(branchToUse)
|
||||||
|
+ extensions {
|
||||||
|
+ cloneOptions {
|
||||||
|
+ depth(1)
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ remote {
|
||||||
|
+ credentials('nmgit_credentials')
|
||||||
|
+ url('ssh://git@bitbucket.gad.local:7999/nm-nsp/nwl-ci.git')
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ scriptPath('jobs/Jenkinsfile_UpdateSrcRevisions')
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
diff --git a/jobs/Jenkinsfile_UpdateSrcRevisions b/jobs/Jenkinsfile_UpdateSrcRevisions
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..000bbf9
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/jobs/Jenkinsfile_UpdateSrcRevisions
|
||||||
|
@@ -0,0 +1,41 @@
|
||||||
|
+// Loading code requires a NODE context
|
||||||
|
+// But we want the code accessible outside the node Context
|
||||||
|
+// So declare common (object created by the LOAD operation) outside the Node block.
|
||||||
|
+def common
|
||||||
|
+
|
||||||
|
+// declarative pipeline
|
||||||
|
+pipeline {
|
||||||
|
+ agent any
|
||||||
|
+
|
||||||
|
+ parameters {
|
||||||
|
+ string(name: 'BUILD_BRANCH', defaultValue: 'main', description: 'Enter the branch of the NWL to build (default = main), will skip deployment if not main')
|
||||||
|
+ booleanParam(name: 'CLEAN_BUILD', defaultValue: false, description: 'do a clean build, i.e. remove the yocto directory and start from scratch')
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ options {
|
||||||
|
+ timeout(time: 1, unit: 'HOURS')
|
||||||
|
+ buildDiscarder(
|
||||||
|
+ logRotator(numToKeepStr: '10')
|
||||||
|
+ )
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ stages {
|
||||||
|
+
|
||||||
|
+ stage('Prepare') {
|
||||||
|
+ steps {
|
||||||
|
+ script {
|
||||||
|
+ println "ToDo: prepare stage"
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ stage('Update') {
|
||||||
|
+ steps {
|
||||||
|
+ script {
|
||||||
|
+ println "ToDo: Update stage"
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ } // stages
|
||||||
|
+}
|
||||||
|
|
||||||
|
.. caution::
|
||||||
|
With the current setup the job seems to be sed but another seeding is triggered due to SCM change. See the following
|
||||||
|
subsection about how to solve this issue.
|
||||||
|
|
||||||
|
Adapt initial Seed Job not triggering on SCM change
|
||||||
|
===================================================
|
||||||
|
The initial seed job within the Jenkins instance needs to have a ``disableRemotePoll()`` so that the seed job is not
|
||||||
|
triggered on SCM change:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
diff --git a/jenkins-ci/jobs/seed.groovy b/jenkins-ci/jobs/seed.groovy
|
||||||
|
index 033eacf..277785c 100644
|
||||||
|
--- a/jenkins-ci/jobs/seed.groovy
|
||||||
|
+++ b/jenkins-ci/jobs/seed.groovy
|
||||||
|
@@ -58,6 +58,7 @@ freeStyleJob('nwl-seed-job') {
|
||||||
|
credentials('admin_credentials')
|
||||||
|
}
|
||||||
|
extensions {
|
||||||
|
+ disableRemotePoll()
|
||||||
|
wipeWorkspace()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
With this change we create a new version of the NWL docker instance:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
# on your local machine:
|
||||||
|
DOCKER_BUILDKIT=1 ./build.sh nwl 0.3.2
|
||||||
|
docker save nwl-env-ci:latest | bzip2 | pv | ssh user@10.115.101.98 docker load
|
||||||
|
|
||||||
|
# on the build server:
|
||||||
|
docker image tag nwl-env-ci:latest nwl-env-ci:0.3.2
|
||||||
|
./manage.sh --name=nwl_0_3_1 destroy
|
||||||
|
./manage.sh --image=nwl-env-ci:0.3.2 --branch=main --name=nwl_0_3_2 --platform=nwl --config=/home/user/work/ci/config/config.xml --revision=0.3.2 --maintainer=TeamCHBE create
|
||||||
|
|
||||||
|
|
||||||
|
Nightly Trigger Integration
|
||||||
|
###########################
|
||||||
|
With the Job DSL plugin version 1.77 the option ``triggers`` is deprecated and will be removed soon (reason: it caused
|
||||||
|
problems, see `ticket <https://issues.jenkins.io/browse/JENKINS-53775>`_). A replacement is available as stated in
|
||||||
|
the `migration note <https://github.com/jenkinsci/job-dsl-plugin/wiki/Migration#migrating-to-177>`_. According to this
|
||||||
|
note, the nightly trigger uses the ``pipelineTriggers`` as follows:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
diff --git a/jobs/Jenkinsfile_Seed b/jobs/Jenkinsfile_Seed
|
||||||
|
index d1f3f48..c3bb7cf 100644
|
||||||
|
--- a/jobs/Jenkinsfile_Seed
|
||||||
|
+++ b/jobs/Jenkinsfile_Seed
|
||||||
|
@@ -11,6 +11,15 @@ pipelineJob('nwl') {
|
||||||
|
daysToKeep(7)
|
||||||
|
numToKeep(7)
|
||||||
|
}
|
||||||
|
+ properties {
|
||||||
|
+ pipelineTriggers {
|
||||||
|
+ triggers {
|
||||||
|
+ cron {
|
||||||
|
+ spec('H H(5-6) * * 1-5')
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
definition {
|
||||||
|
cpsScm {
|
||||||
|
scm {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. |nwlCiChain| image:: ./media/nwl-ci-jenkins-dashboard.png
|
.. |nwlCiChain| image:: ./media/nwl-ci-jenkins-dashboard.png
|
||||||
:width: 700px
|
:width: 700px
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue