安装Jenkins

just one line

docker run -it -p 8080:8080 jenkinsci/blueocean

open broswer input ip:8080

创建task

新建 - 流水线

配置里填写git仓库地址, 选择分支

脚本路径默认 Jenkinsfile

在项目(git仓库的Project)根路径创建Jenkinsfile 文件

pipline {
  agent any //agent 部分指定了整个流水线或特定的部分, 将会在Jenkins环境中执行的位置
  tools 'gradle' // depends on you tool name
  stages {
     stage('build') {
       step {
         sh 'gradle -v'
         sh 'gradle bootJar'
       }
     }
  }
}

保存
立即构建

踩坑

使用github仓库时使用http路径总是报错

然后转为使用git@路径, 需要在你的主机上生成ssh key

然后设置在github账号中(id_rsa.pub 文件内容)

或者在Jenkins全局配置中配置github token

由于我是在docker 中运行Jenkins, 所以我们把密钥的路径映射一下

运行docker时加上 -v /root/.ssh:/root/.ssh

其它

生成token
ssh-keygen -o

验证
ssh -T git@github.com

you will see

Hi username! You’ve successfully authenticated, but GitHub does not provide shell access

安装docker细节

docker 安装方式有很多种, 这里我们介绍使用docker安装的方式

注意我们的镜像是带 blueocean 的
blueocean 是一种管理 Pipeline 类型task的一套 ui

docker run --net=host jenkinsci/blueocean

这里有一点注意, –net=host 使用host网络(默认是bridge) 因此我们可以在主机直接访问容器里的端口, docker 安装后默认包含三种网络 host, bridge, none
我们知道 Jenkins 默认跑在 8080 端口, 此时我们使用 ip:8080 即可访问

或者使用-p参数进行端口映射

docker run
  -u root
  -d 
  -p 8080:8080 
  -v jenkins-data:/var/jenkins_home 
  -v /var/run/docker.sock:/var/run/docker.sock
  -v /root/.ssh:/root/.ssh
  jenkinsci/blueocean

-v jenkins-data:/var/jenkins_home 参数使用docker volume这样Jenkins数据可以持久保存, 即使重启容器也可以保存上次运行信息
-d 后台执行
-p 发布端口

use docker agent

pipeline {
  agent {
      docker { image 'gradle:jdk8' } //我们选择使用docker gradle镜像来准备
  }

  stages {
      stage('build') {
          steps {
              sh 'gradle -v'
              sh 'gradle clean bootJar'
          }
      }

      stage('start') {
          steps {
               sh "chmod +x ./deliver.sh"
               sh './deliver.sh'
          }
      }
  }
  //执行成功后后续操作
  post {
      success {
          echo 'success'
      }
  }
}

deliver.sh

echo 'The following command runs and outputs the execution of your Java'
echo 'application (which Jenkins built using gradle) to the Jenkins UI.'

service_name="hello-blog"
service_prot=9000

set -x
docker build . -t $service_name
docker run -d --name $service_name --net=host (-p $service_prot:$service_prot) $service_name

docker outside of docker

由于我们的Jenkins跑在dcker里面,我们的java应用也需要docker环境

我们需要加上卷映射
-v $(which docker):/usr/bin/docker
-v /var/run/docker.sock:/var/run/docker.sock

这时就可以,在镜像内部继续使用docker

reference:
https://blog.container-solutions.com/running-docker-in-jenkins-in-docker

https://www.jenkins.io/zh/doc/book/installing/

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐