美文网首页
Gitlab+Jenkins+Pipeline+WebHook+

Gitlab+Jenkins+Pipeline+WebHook+

作者: 米开朗基乐 | 来源:发表于2019-07-25 14:21 被阅读0次

    [Gitlab + Jenkins + Pipeline + WebHook+ Multibranch] - 实现持续集成和自动发布

    本文的实现:

    • 代码提交gitlab,自动触发Jenkins构建
    • gitlab开发分支merge后自动发布到dev环境
    • gitlab master分支merge后自动构建,需手动更新prd环境

    1. Jenkins准备工作
    2. Jenkinsfile准备工作
    3. Gitlab准备工作
    4. 选择Jenkins任务的触发方式
    5. 验证

    Jenkins准备工作

    • 安装插件
    1. gitlab
    2. pipeline
    • 配置Gitlab的连接
    1. 打开系统管理 - 系统设置 - gitlab
    2. 去掉此选项的勾选Enable authentication for '/project' end-point
    3. 配置GitLab connections
    4. 设置Connection nameGitlab host URL
    5. Credentials的配置
      1. 添加Jenkins凭据
      2. 类型选择Gitlab API token
      3. API token的获取
        1. 在Gitlab上拥有一个用户并具有developer角色
        2. 获取方法:登录用户 - User settings - Access Tokens,创建一个Token记录
      4. 复制Token值并保存到Jenkins的凭据中
      5. 点击下面的Test Connection测试
        1. 成功会提示Success
        2. 如果失败检查gitlab的url地址是否正确
    • 配置多分支流水线任务
    1. 新建任务,选择多分支流水线
    2. 配置任务
    3. 添加一个仓库,类型选Git
    4. Credentials的配置
      1. 添加Jenkins凭据
      2. 类型选择Username with Password
      3. 用户的获取
        1. 在Gitlab上拥有一个用户并具有developer角色
        2. 如果你的项目类型属于Private,这个用户必须是这个项目的成员
    5. 其他默认读取根目录下的Jenkinsfile文件

    Jenkinsfile准备工作

    参考 Jenkinsfile Demo

    主要配置:

    // 获取gitlab connection, 填写我们之前配置gitlab connection
    properties([gitLabConnection('gitlab-bigdata')])
    // 拉取代码
    checkout scm
    // 告诉gitlab job状态
    updateGitlabCommitStatus name: 'build', state: 'pending'
    // 根据不同的分支触发不同的步骤
    if (env.BRANCH_NAME == 'master' || env.BRANCH_NAME == 'dev' ) {
            stage("Build Docker Image"){
                echo "build docker image"
                echo "Only dev/master branch can build docker image"
            }
    
            if(env.BRANCH_NAME == 'dev'){
                stage("Deploy to test"){
                    echo "branch dev to deploy to environment test"
                }
    
                stage("Integration test"){
                    echo "test环境集成测试"
                }
    
            }
    
            if(env.BRANCH_NAME == 'master'){
                stage("Deploy to prod"){
                    echo "branch master to deploy to environment prod"
                }
    
                stage("Health check"){
                    echo "prod检查"
                }
    
            }
        }
    

    Gitlab准备工作

    • 修改默认的安全请求
      1. 注意: 当Jenkins和Gitlab在同一台机器时
      2. 使用root登录,管理中心 - 设置 - 网络 - 外发请求(Admin Area - settings - Network - Outbound requests)
      3. 加上此选项的勾选Allow requests to the local network from hooks and services, 保存

    选择Jenkins任务的触发方式

    • 手动触发

    • 定时触发

    • Gitlab trigger

      1. 进入项目,Settings - Integrations
      2. 填写Jenkins任务的地址,选中Push eventsMerge request events
      3. Jenkins url格式:http://JENKINS_URL/project/PROJECT_NAME
      When you configure the plugin to trigger your Jenkins job, by following the instructions below depending on job type, it will listen on a dedicated URL for JSON POSTs from GitLab's webhooks. That URL always takes the form http://JENKINS_URL/project/PROJECT_NAME, or http://JENKINS_URL/project/FOLDER/PROJECT_NAME if the project is inside a folder in Jenkins. You should not be using http://JENKINS_URL/job/PROJECT_NAME/build or http://JENKINS_URL/job/gitlab-plugin/buildWithParameters, as this will bypass the plugin completely.
      

    验证

    1. 提交代码
    2. 查看状态 - 进入项目
      1. WebHook状态
      2. 依次点击Settings - Integrations
      3. 编辑触发Jenkins的那条记录
      4. 查看Recent Deliveries部分,显示了最近的Trigger状态
      5. Pipelines状态
      6. Jenkins Job状态
    3. 成功状态
      1. WebHook状态 - 200
      2. Pipelines状态 - passed
      3. Jenkins Job状态 - 成功

    感谢

    相关文章

      网友评论

          本文标题:Gitlab+Jenkins+Pipeline+WebHook+

          本文链接:https://www.haomeiwen.com/subject/fglhrctx.html