Jenkins Handbuch

Jenkinks mit Docker Agent bereitstellen

Odoo Build Projekt auschecken.

Jenkins starten.

task start cd

Einloggen und Plugins docker und Docker Pipeline via /manage installieren.

Via /manage eine Cloud docker mit Option Docker hinzufügen. Als Docker Host URI tcp://dind:2375 verwenden und die Optionen Enabled und Expose DOCKER_HOST aktivieren.

Anschliessend ein Docker Agent template hinzufügen mit Label jenkins-agent, Enabled, Name agent und Docker Image jenkins/agent.

SSH-Schlüssel einrichten

Navigieren Sie nach Dashboard > Jenkins verwalten > Zugangsdaten > System > Globale Zugangsdaten und fügen Sie einen Eintrag hinzu:

ID: jenkins-ssh-credentials
Username: bot-mintsys

Fügen Sie den Inhalt des privaten Schlüssels hinzu.

Node mit Jenkins bauen

Erstellen neue Pipeline Node mit diesem Script:

pipeline {
    agent {
        docker { image 'node:18.16.0-alpine' }
    }
    stages {
        stage('test') {
            steps {
                sh 'node --version'
            }
        }
        stage('log') {
            steps {
                script {
                    currentBuild.description = """Build url: <a href="${BUILD_URL}">Link</a>"""
                }
            }
        }
    }
}

Mit Jetzt bauen den Build-Prozess starten

Git mit Submodules auschecken

Installieren Sie das Plugin SSH Agent.

Erstellen Sie eine neue Pipeline Git.

Das Repo <git@github.com:sozialinfo/odoo-cd.git> enthält Submodule und wird wie folgt geklont:

pipeline {
	agent any
    stages {
        stage('Checkout') {
	        steps {
		        checkout scmGit(
		            branches: [name: 'main'](/name:--main'.html),
		            userRemoteConfigs: [
		                credentialsId:  'jenkins-ssh-credentials',
		                url: 'https://github.com/sozialinfo/odoo-cd'
		            ](/-credentialsid:--jenkins-ssh-credentials',-url:-'https://github.com/sozialinfo/odoo-cd'-.html))
				sshagent(credentials: ['jenkins-ssh-credentials']) {
			      sh '''
                      [ -d ~/.ssh ] || mkdir ~/.ssh && chmod 0700 ~/.ssh
                      ssh-keyscan -t rsa,dsa github.com >> ~/.ssh/known_hosts
                      git submodule update --init
                  '''
				}
		    }
	    }
	}
	post {
        always {
            archiveArtifacts artifacts: '**/*'
        }
    }
}

Odoo mit Jenkins bauen

Die Artefakte aus > Git mit Submodules auschecken werden kopiert und auf einem Image bereitgestellt.

def withDockerNetwork(Closure inner) {
    try {
        networkId = UUID.randomUUID().toString()
        sh "docker network create ${networkId}"
        inner.call(networkId)
    } finally {
        sh "docker network rm ${networkId}"
    }
}

node {
    withDockerNetwork{ n ->
	   docker.image('postgres:12').withRun("--network ${n} --name db -e POSTGRESQL_PASSWORD=postgres") { c->
	      docker.image('odoo:16').inside("--network ${n}") {
	         // do something with host "sidecar"
	         echo "Odoo"
	      }
	   }
	}
}

Source: https://issues.jenkins.io/browse/JENKINS-49567open in new window

Auth OIDC konfigurieren

https://www.epiclabs.io/configure-jenkins-azure-authentication-connect/open in new window

User name field name: preferred_username

Full name field name: name

Email field name: email

GitHub Webhook einrichten

Neuer Eintrag unter https://github.com/ORG/REPO/settings/hooksopen in new window mit Url https://jenkins.example.com/github-webhook/open in new window erstellen.