1. docker pull jenkins/jenkins // 拉取最新镜像,否则无法安装差价
  2. mkdir /home/jenkins 创建文件夹
  3. ls -nd jenkins/ 查看文件权限
  4. chown -R 1000 jenkins/ uid1000的权限(如果不进行这一步会产生访问权限问题)
  5. // docker run --name myjenkins -p 9000:8080 -p 50000:50000 -v /<your path>:/var/jenkins_home --env JAVA_OPTS="-Duser.timezone=GMT+08" jenkins/jenkins
  6. docker run --name myjenkins --restart always -p 9000:8080 -p 50000:50000 -v /home/jenkins:/var/jenkins_home --env JAVA_OPTS = "-Duser.timezone=GMT+08" jenkins/jenkins

-p 50000:50000 打开远程访问 -v /:/var/jenkins_home 将容器的目录挂载到宿主机的目录下,这样防止容器崩掉后数据都丢失的情况 —env JAVA_OPTS=”-Duser.timezone=GMT+08”  解决jenkins时间显示和本地时间不一致的问题

之后浏览器输入 http://你的ip地址:8080

进入之后需要输入密码,在命令行使用如下命令获取密码

  1. sudo docker exec -it <coantainerId> /bin/bash
  2. cat /home/jenkins/secrets/initialAdminPassword 查看密码

之后会进入jenkins安装插件页面,
这里选择安装推荐插件就可以了;
接下来就是进入jenkins首页,这里使用前需要配置一些基础的maven和jdk;

重启docker
systemctl restart docker
清空未运行的docker
docker rm $(sudo docker ps -a -q)

jenkins + pipeline构建自动化部署

一、引言

  1. Jenkins 2.x的精髓是Pipeline as Code,那为什么要用Pipeline呢?jenkins1.0也能实现自动化构建,但Pipeline能够将以前project中的配置信息以steps的方式放在一个脚本里,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程,形成流水式发布,构建步骤视图化。简单来说,Pipeline适用的场景更广泛,能胜任更复杂的发布流程。举个例子,job构建工作在master节点,自动化测试脚本在slave节点,这时候jenkins1.0就无法同时运行两个节点,而Pipeline可以。<br />

二、Pipeline的几个基本概念

**

  • Stage: 阶段,一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。注意,Stage是一个逻辑分组的概念,可以跨多个Node。
  • Node: 节点,一个Node就是一个Jenkins节点,或者是Master,或者是slave,是执行Step的具体运行期环境。
  • Step: 步骤,Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供。


    docker安装jenkins - 图1

    三、PIpeline语法

1.Pipeline支持两种语法:Declarative Pipeline(在Pipeline 2.5中引入,结构化方式)和Scripted Pipeline,两者都支持建立连续输送的Pipeline。

共同点:
**
两者都是pipeline代码的持久实现,都能够使用pipeline内置的插件或者插件提供的steps,两者都可以利用共享库扩展。

区别:

两者不同之处在于语法和灵活性。Declarative pipeline对用户来说,语法更严格,有固定的组织结构,更容易生成代码段,使其成为用户更理想的选择。但是Scripted pipeline更加灵活,因为Groovy本身只能对结构和语法进行限制,对于更复杂的pipeline来说,用户可以根据自己的业务进行灵活的实现和扩展。下面举例介绍两种语法的使用。

2.Declarative Pipeline

  1. pipeline {
  2. agent any //在可用的节点运行
  3. stages{
  4. stage ('Prepare'){
  5. steps{ //清空发布目录
  6. bat '''if exist D:\\publish\\LoginServiceCore (rd/s/q D:\\publish\\LoginServiceCore)
  7. if exist C:\\Users\\Administrator\\.nuget (rd/s/q C:\\Users\\Administrator\\.nuget) exit''' } }
  8. //拉取git代码仓库
  9. stage ('Checkout'){
  10. steps{
  11. checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [],
  12. userRemoteConfigs: [[credentialsId: 'c6d98bbd-5cfb-4e26-aa56-f70b054b350d',
  13. url: 'http://xxx/xxx/xxx']]])
  14.  }
  15.  }
  16. //构建
  17. stage ('Build'){
  18.  steps{
  19. bat '''cd "D:\\Program Files (x86)\\Jenkins\\workspace\\LoginServiceCore\\LoginApi.Hosting.Web"
  20.  dotnet restore
  21.  dotnet build
  22.  dotnet publish --configuration Release --output D:\\publish\\LoginServiceCore'''
  23.  }
  24.  }
  25. //部署
  26.  stage ('Deploy'){
  27.  steps{
  28. bat '''cd D:\\PipelineScript\\LoginServiceCore
  29.  python LoginServiceCore.py'''
  30. }
  31. }
  32. //自动化测试(python代码实现)
  33.  stage ('Test'){
  34.  steps{
  35. bat'''cd D:\\PipelineScript\\LoginServiceCore
  36.  python LoginServiceCoreApitest.py'''
  37.  }
  38. }
  39. }
  40. }


3.Scripted Pipeline
**

  1. node('master') { //master节点运行,以下stage也可指定节点
  2. stage 'Prepare' //清空发布目录
  3. bat '''if exist D:\\publish\\LoginServiceCore (rd/s/q D:\\publish\\LoginServiceCore)
  4. if exist C:\\Users\\Administrator\\.nuget (rd/s/q C:\\Users\\Administrator\\.nuget)
  5. exit'''
  6. //拉取git代码仓库
  7. stage 'Checkout'
  8. checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [],
  9.  submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'c6d98bbd-5cfb-4e26-aa56-f70b054b350d',
  10. url: 'http://xxx/xxx/xxx']]])
  11. //构建
  12. stage 'Build'
  13. bat '''cd "D:\\Program Files (x86)\\Jenkins\\workspace\\LoginServiceCore\\LoginApi.Hosting.Web"
  14. dotnet restore
  15. dotnet build
  16. dotnet publish --configuration Release --output D:\\publish\\LoginServiceCore'''
  17. //部署
  18. stage 'Deploy'
  19. bat '''
  20. cd D:\\PipelineScript\\LoginServiceCore
  21. python LoginServiceCore.py
  22. '''
  23. //自动化测试(python代码实现)
  24. stage 'Test'
  25. bat'''
  26. cd D:\\PipelineScript\\LoginServiceCore
  27. python LoginServiceCoreApitest.py
  28. '''
  29. }

四、Pipeline配置

1.新建一个“流水线”的job
docker安装jenkins - 图2

2.配置Pipeline脚本

docker安装jenkins - 图3


3.Pipeline也支持Poll SCM
docker安装jenkins - 图4

4.保存->立即构建
docker安装jenkins - 图5

五、总结

Pipeline可以很方便实现流水式的持续交付,执行阶段通过视图一目了然。更过详细的资料可以访问官方文档 https://jenkins.io/doc/book/pipeline/