Jenkins简单使用

Jenkins

Jenkins是一款开源的持续集成工具,广泛用于项目开发,具有自动化构建、测试和部署等功能
其本身主要负责自动化的 代码编译, 打包, 测试, 组装;向上要与代码管理工具(如gitlab)/配置管理工具进行交互;向下要与服务器管理工具/容器(docker)/服务器(物理机, aws)进行交互。

Jenkins
W3Cschool Jenkins官方文档
wiki
github
step ref
持续集成是什么?
Jenkins打造强大的前端自动化工作流
很强的教程
十个最佳实践
groovy in y minutes
Jenkins持续集成 - 管道详解

使用

构建

  • 通过在界面上操作, 配置构建过程,有很多插件
源码管理:git svn
构建触发器: 何时进行构建
构建环境
构建步骤: 按顺序添加的可用的构建操作, 有很多插件增加构建功能.
构建后操作: 增加一些清理, 通知, 报告之类的操作.

通过在这个页面上点点点, 就可以配置好这个项目的整个构建流程.

  • 通过编写Pipeline, 描述构建过程
    Pipeline是一个文件, 随着项目代码保存在一起,这个文件里面就描述了构建的整个过程,这个文件习惯叫作Jenkinsfile。创建Pipeline类型的项目, 在配置中,只剩下源码管理和构建触发器, 构建环境/构建步骤/构建后操作 都移到Pipeline文件中描述了。
    eg1:
    new item -> 选择pipline -> 在脚本中输入如下内容保存 -> Build now -> 在构建历史记录下,选择执行的结果单击console output查看输出
    一些通用的格式:
node {
   echo 'Hello World'
}

在Jenkins服务 {jenkins_url}/pipeline-syntax/ url上, 有一个自带的语法帮助
step references相关查询

添加credentials,configfile

拉取gitlab代码

选择Credentials -> 选择一个相应的目录下,add Credentials -> kind选择SSH Username with private key,在private key中输入密钥,设置相应名称 -> ok
在gitlab界面的SSH连接中添加公钥
其中ssh key可以选择在任意机器上执行ssh-keygen生成的结果,也可以使用本地连接gitlab的密钥,这样就不需要操作gitlab了

configfile配置

在当前目录下选择Config Files -> add a new Config -> 配置里面的东西,比如添加server等

构建项目

freestyle_test

new item -> name:freestyle_test,Freestyle project -> Configure -> 配置 -> build now -> consule output

maven_test

new item -> name:maven_test,Maven project -> Configure -> 配置 -> build now -> consule output
使用设置的config file setting,不然可能会因为权限问题下不了相关包

[WARNING] Could not transfer metadata ****: Not authorized , ReasonPhrase:Unauthorized.

等执行完会在Modules目录下发现最后生成的jar包

pipeline_test

new item -> name:pipline_test,Pipline -> Configure -> 配置 -> build now -> consule output
对应的gitlab项目中必须还有jenkinsfile文件
不然会报错

java.io.FileNotFoundException
    at jenkins.plugins.git.GitSCMFile$3.invoke(GitSCMFile.java:167)
    at jenkins.plugins.git.GitSCMFile$3.invoke(GitSCMFile.java:159)
    at jenkins.plugins.git.GitSCMFileSystem$3.invoke(GitSCMFileSystem.java:193)
    at org.jenkinsci.plugins.gitclient.AbstractGitAPIImpl.withRepository(AbstractGitAPIImpl.java:29)
    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.withRepository(CliGitAPIImpl.java:72)
    at jenkins.plugins.git.GitSCMFileSystem.invoke(GitSCMFileSystem.java:189)
    at jenkins.plugins.git.GitSCMFile.content(GitSCMFile.java:159)
    at jenkins.scm.api.SCMFile.contentAsString(SCMFile.java:338)
    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:110)
    at org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.create(CpsScmFlowDefinition.java:67)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:303)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE

jenkinsfile checkout scm必须有,不然找不到pom文件

#!groovy

node {
    stage('checkout'){
        //必须有,该checkout步骤将检出从源控制代码; scm是一个特殊变量,指示checkout步骤克隆触发此Pipeline运行的特定修订。
        checkout scm
    }

    def javaHome = tool('jdk1.8')
    def mvnHome = tool('mvn3')
    env.PATH = "${mvnHome}/bin:${env.PATH}"

    stage('mvn build'){
        //sh "JAVA_HOME=${javaHome} mvn clean package"
        configFileProvider([configFile(fileId: '****', variable: 'MAVEN_SETTINGS')]) {
                sh 'mvn -s $MAVEN_SETTINGS clean package'
            }
    }

    stage('mvn test'){
        sh "echo test"
    }

    stage('mvn deploy'){
        configFileProvider([configFile(fileId: '****', variable: 'MAVEN_SETTINGS')]) {
                        sh 'mvn -s $MAVEN_SETTINGS deploy'
                    }
    }
}

scp jar包到服务器

    def user = '***'
    def server = '***'
    def keyId = "****"
    def server_ws = "/home/data/***"

    //上传jar包
    sshagent(credentials: ["${keyId}"]){
        def jarName
        stage('scp-jar'){
            jarName = sh([returnStdout: true,
                          script      : "ls target/*-jar-with-dependencies.jar"]).trim().split('/')[-1]
            sh "scp -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no target/${jarName} ${user}@${server}:${server_ws}"
        }
    }

发邮件使用post

一般放置文末

post {
        success {
            emailext (
              subject: "SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
              to: "nick@xxxxx.com",
              body: """<p>SUCCESSFUL: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
    <p>Check console output at &QUOT;<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>&QUOT;</p>""",
              recipientProviders: [[$class: 'DevelopersRecipientProvider']]
            )
        }
        failure {
            emailext (
              subject: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
              to: "nick@xxxxx.com",
              body: """<p>FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
                <p>Check console output at &QUOT;<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>&QUOT;</p>""",
              recipientProviders: [[$class: 'DevelopersRecipientProvider']]
            )
        }
    }

触发器

poll scm 触发器

Build Triggers 中选择Poll SCM,定时检查是否有push操作

push触发器

选择Build when a change is pushed to GitLab. GitLab webhook URL: https://**
将url放到gitlab的webhook上,需要有项目的owner权限
push钩子的大致流程是这样的:
1. push代码,Gitlab触发hook,访问Jenkins提供的api
2. Jenkins Branch Filter系统判断自己需要处理的分支是否有改动,如果有开始构建
3. 运行构建脚本

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值