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