Jenkins:场景代码(六)

6场景代码

6.1 Svn提交后触发Jenkins自动构建

6.1.1 方法1

*基本思路:subversion+scm poll两个插件来监控,来监控SVN上面是否变更(是Jenkins主动监控SVN)

https://blog.csdn.net/modoo_junko/article/details/37593225

6.1.2 方法2

*基本思路:SVN代码变动后触动post-commit,然后触动Jenkins脚本进行构建操作

https://blog.csdn.net/q13554515812/article/details/86651851

6.2利用tools作用域实现多版本编译

在实际工作中,有时需要对同一份源码使用多个版本的编译器进行编译。tools指令除了支持pipeline作用域,还支持stage作用域。所以,我们可以在同一个pipeline中实现多版本编译。代码如下:

pipeline {

    agent none

    stages {

        stage('build with jdk-10.0.2') {

            tools {

                jdk "jdk-10.0.2"

            }

            steps {

                sh "printenv"

            }

        }

        stage('build with jdk-9.0.4') {

            tools {

                jdk "jdk-9.0.4"

            }

            steps {

                sh "printenv"

            }

        }       

    }

}


[1] 《Jenkins 2.x实战指南》

[2] https://blog.51cto.com/ygqygq2/2446717
[3] https://jenkins.io/zh/doc/book/pipeline/syntax/
[4] https://jenkins.io/zh/doc/pipeline/steps/

6.2 docker

[4] http://www.eryajf.net/3298.html

6.2.1常规用法。

日常构建部署中,常常会用到编译工作,因此这里的步骤可以放入到镜像中执行,这里利用node项目的编译举一个示例:

pipeline {

    agent {

        docker {

                lable 'docker'

            image 'registry.cn-hangzhou.aliyuncs.com/eryajf/node:11.15'

        }

    }

    stages {

        stage('Build') {

            steps {

                sh 'npm install --registry=https://registry.npm.taobao.org'

            }

        }

    }

}

当流水线执行的时候,Jenkins会首先将代码更新,然后将 $WORKSPACE 挂载到容器之中,这个可以通过构建日志中看出来:

docker run -t -d -u 0:0 -w /root/.jenkins/workspace/test-pinpeline -v /root/.jenkins/workspace/test-pinpeline:/root/.jenkins/workspace/test-pinpeline:rw,z -v /root/.jenkins/workspace/test-pinpeline@tmp:/root/.jenkins/workspace/test-pinpeline@tmp:rw,z -e ******** registry.cn-hangzhou.aliyuncs.com/eryajf/node:11.15

接着执行我们定义的install编译命令,当然,下边可以继续添加步骤,将代码rsync到远程主机,或者其他操作。

此处可用的参数如下:

  • lable(可选):定义一个标签,用处不十分大。
  • image:定义构建时使用的镜像。
  • args:可以定义类似docker run命令时的一些参数。
  • alwaysPull:布尔类型,是否在每次运行的时候重新拉取镜像。

6.2.2添加参数。

日常编译比较影响构建时间的一个因素是本地缓存,因此还可以用如下方式将本地缓存挂载到容器之中,从而加快构建速度。

pipeline {

    agent {

        docker {

            image 'registry.cn-hangzhou.aliyuncs.com/eryajf/node:11.15'

            args '-v /root/.npm:/root/.npm'

        }

    }

    stages {

        stage('Build') {

            steps {

                sh 'npm install --registry=https://registry.npm.taobao.org'

            }

        }

    }

}

6.2.3多个容器。

基于如上的事实,发散我们的思维,我们可以将许多个基础性的步骤,封装成一个又一个镜像,然后在每个步骤中只需调用封装好的镜像,传入所需的参数,即可完成比较复杂的构建。

多个容器用法,如下简示:

pipeline {

    agent none

    stages {

        stage('Build') {

            agent {

                docker {

                    image 'registry.cn-hangzhou.aliyuncs.com/eryajf/node:11.15'

                    args '-v /root/.npm:/root/.npm'

                }

            }

            steps {

                sh 'npm install --registry=https://registry.npm.taobao.org'

            }

        }

        stage('deploy'){

            agent {

                docker {

                    image 'registry.cn-hangzhou.aliyuncs.com/mckj/ansible'

                }

            }

            steps {

                sh 'echo "通过ansbile进行部署"'

            }

        }

    }

}

因为Jenkins默认会将$WORKSPACE挂载到两个容器中,因此各种操作直接基于当前目录即可,这是值得注意的一点。

这里只是做一个演示,提供一种思路,以后有需要,可以借此发挥更多的妙用。

6.2.4基于Dockerfile。

这种方式,应用的大概比较少,仅做简单介绍。

首先在项目根目录创建一个Dockerfile:

FROM       eryajf/centos:7.5

MAINTAINER eryajf <linuxlql@163.com>

<linuxlql@163.com>

<linuxlql@163.com># Install node

<linuxlql@163.com>ADD  node-v11.15.0-linux-x64.tar.xz   /usr/local/

<linuxlql@163.com>

<linuxlql@163.com>ENV NODE /usr/local/node-v11.15.0-linux-x64

<linuxlql@163.com>ENV PATH $PATH:$NODE/bin

<linuxlql@163.com>

<linuxlql@163.com>RUN npm i -g pm2 gulp yarn --registry=https://registry.npm.taobao.org

然后定义Jenkinsfile:

pipeline {

    agent { dockerfile true }

    stages {

        stage('Build') {

            steps {

                sh 'npm install --registry=https://registry.npm.taobao.org'

            }

        }

    }

}

感觉起来,这种方式引入了过多的不确定因素,对于构建稳定性,反而不是一件好事儿,所以不太推荐。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值