gitlab-org--gitlab-foss/doc/integration/jenkins.md

10 KiB
Raw Blame History

stage group info
Ecosystem Integrations To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments

Jenkins integration (FREE)

Moved to GitLab Free in 13.7.

You can trigger a build in Jenkins when you push code to your repository or create a merge request in GitLab. The Jenkins pipeline status displays on merge requests widgets and on the GitLab project's home page.

For an overview of the Jenkins integration for GitLab, see GitLab workflow with Jira issues and Jenkins pipelines.

Use the Jenkins integration when:

  • You plan to migrate your CI from Jenkins to GitLab CI/CD in the future, but need an interim solution.
  • You're invested in Jenkins plugins and choose to keep using Jenkins to build your apps.

NOTE: This documentation focuses only on how to configure a Jenkins integration with GitLab. Learn how to set up Jenkins on your local machine in the developer documentation, and how to migrate from Jenkins to GitLab CI/CD in the Migrating from Jenkins documentation.

The Jenkins integration requires configuration in both GitLab and Jenkins.

Grant Jenkins access to the GitLab project

Grant a GitLab user access to the relevant GitLab projects.

  1. Create a new GitLab user, or choose an existing GitLab user.

    This account is used by Jenkins to access the GitLab projects. We recommend creating a GitLab user for only this purpose. If you use a person's account, and their account is deactivated or deleted, the Jenkins integration stops working.

  2. Grant the user permission to the GitLab projects.

    If you're integrating Jenkins with many GitLab projects, consider granting the user the administrator access level. Otherwise, add the user to each project and grant the Developer role.

Grant Jenkins access to the GitLab API

Create a personal access token to authorize Jenkins to access GitLab.

  1. Sign in to GitLab as the user to be used with Jenkins.
  2. On the top bar, in the top right corner, select your avatar.
  3. Select Edit profile.
  4. On the left sidebar, select Access Tokens.
  5. Create a personal access token and select the API scope.
  6. Copy the personal access token. You need it to configure the Jenkins server.

Configure the Jenkins server

Install and configure the Jenkins plugin. The plugin must be installed and configured to authorize the connection to GitLab.

  1. On the Jenkins server, select Manage Jenkins > Manage Plugins.

  2. Install the Jenkins GitLab Plugin.

  3. Select Manage Jenkins > Configure System.

  4. In the GitLab section, select Enable authentication for '/project' end-point.

  5. Select Add, then choose Jenkins Credential Provider.

  6. Select GitLab API token as the token type.

  7. Enter the GitLab personal access token's value in API Token and select Add.

  8. Enter the GitLab server's URL in GitLab host URL.

  9. To test the connection, select Test Connection.

    Jenkins plugin configuration

For more information, see Jenkins-to-GitLab authentication.

Configure the Jenkins project

Set up the Jenkins project you intend to run your build on.

  1. On your Jenkins instance, go to New Item.
  2. Enter the project's name.
  3. Select Freestyle or Pipeline and select OK. We recommend a Freestyle project, because the Jenkins plugin updates the build status on GitLab. In a Pipeline project, you must configure a script to update the status on GitLab.
  4. Choose your GitLab connection from the dropdown list.
  5. Select Build when a change is pushed to GitLab.
  6. Select the following checkboxes:
    • Accepted Merge Request Events
    • Closed Merge Request Events
  7. Specify how the build status is reported to GitLab:
    • If you created a Freestyle project, in the Post-build Actions section, choose Publish build status to GitLab.

    • If you created a Pipeline project, you must use a Jenkins Pipeline script to update the status on GitLab.

      Example Jenkins Pipeline script:

      pipeline {
         agent any
      
         stages {
            stage('gitlab') {
               steps {
                  echo 'Notify GitLab'
                  updateGitlabCommitStatus name: 'build', state: 'pending'
                  updateGitlabCommitStatus name: 'build', state: 'success'
               }
            }
         }
      }
      

      For more Jenkins Pipeline script examples, go to the Jenkins GitLab plugin repository on GitHub.

Configure the GitLab project

Configure the GitLab integration with Jenkins in one of the following ways.

GitLab recommends this approach for Jenkins integrations because it is easier to configure than the webhook integration.

  1. On the top bar, select Menu > Projects and find your project.

  2. On the left sidebar, select Settings > Integrations.

  3. Select Jenkins.

  4. Select the Active checkbox.

  5. Select the events you want GitLab to trigger a Jenkins build for:

    • Push
    • Merge request
    • Tag push
  6. Enter the Jenkins server URL.

  7. Enter the Project name.

    The project name should be URL-friendly, where spaces are replaced with underscores. To ensure the project name is valid, copy it from your browser's address bar while viewing the Jenkins project.

  8. If your Jenkins server requires authentication, enter the Username and Password.

  9. To test the connection to Jenkins, select Test settings.

  10. Select Save changes.

Configure a webhook

If you are unable to provide GitLab with your Jenkins server login, you can use this option to integrate GitLab and Jenkins.

  1. In the configuration of your Jenkins job, in the GitLab configuration section, select Advanced.
  2. Under Secret Token, select Generate.
  3. Copy the token, and save the job configuration.
  4. In GitLab, create a webhook for your project, enter the trigger URL (such as https://JENKINS_URL/project/YOUR_JOB) and paste the token in Secret Token.
  5. To test the webhook, select Test.

Troubleshooting

Error during GitLab configuration - "Connection failed. Please check your settings"

If you get this error message while configuring GitLab, the following are possible causes:

  • GitLab is unable to reach your Jenkins instance at the address. If your GitLab instance is self-managed, try pinging the Jenkins instance at the domain provided on the GitLab instance.
  • The Jenkins instance is at a local address and is not included in the GitLab installation's allowlist.
  • The credentials for the Jenkins instance do not have sufficient access or are invalid.
  • The Enable authentication for /project end-point checkbox is not selected in your Jenkin's plugin configuration.

Error in merge requests - "Could not connect to the CI server"

You might get the Could not connect to the CI server error if GitLab did not receive a build status update from Jenkins via the Commit Status API.

This issue occurs when Jenkins is not properly configured or there is an error reporting the status via the API.

To fix this issue, ensure you:

  1. Configure the Jenkins server for GitLab API access.
  2. Configure the Jenkins project, including the 'Publish build status to GitLab' post-build action.

Merge request event does not trigger a Jenkins pipeline

This issue can occur when the request exceeds the webhook timeout, which is set to 10 seconds by default.

Check the service hook logs for request failures or check the /var/log/gitlab/gitlab-rails/production.log file for messages like:

WebHook Error => Net::ReadTimeout

or

WebHook Error => execution expired

Or check for duplicate messages in /var/log/gitlab/gitlab-rail, like:

2019-10-25_04:22:41.25630 2019-10-25T04:22:41.256Z 1584 TID-ovowh4tek WebHookWorker JID-941fb7f40b69dff3d833c99b INFO: start
2019-10-25_04:22:41.25630 2019-10-25T04:22:41.256Z 1584 TID-ovowh4tek WebHookWorker JID-941fb7f40b69dff3d833c99b INFO: start

To fix this issue:

  1. Increase the gitlab_rails['webhook_timeout'] value in the gitlab.rb configuration file.

  2. Restart GitLab:

    gitlab-ctl reconfigure
    

Enable job logs in Jenkins

To troubleshoot an integration issue, you can enable job logs in Jenkins to get more details about your builds.

To enable job logs in Jenkins:

  1. Go to Dashboard > Manage Jenkins > System Log.
  2. Select Add new log recorder.
  3. Enter a name for the log recorder.
  4. On the next screen, select Add and enter org.jenkinsci.plugins.workflow.job.
  5. Make sure that the Log Level is All and select Save.

To view your logs:

  1. Run a build.
  2. Go to Dashboard > Manage Jenkins > System Log.
  3. Select your logger and check the logs.