安装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