1.首先在服务器上装好这三个东西: jdk,git,maven,并且配置好全局变量。
输入查看当前环境变量,并记住路径,下面需要用到:
export
2.开始整活,安装jenkins
1.拉取镜像 查看镜像
#查看镜像包
docker search jenkins
#安装镜像包
docker pull jenkins
#查看是否安装成功(查看镜像包)
docker images
2. 新建文件夹,用来挂载docker目录
mkdir -pv /opt/docker/jenkins
3.添加修改权限 不然掉坑
chown -R 1000 /opt/docker/jenkins
4.启动Jenkins,这里有坑
刚才查看的maven和jdk环境变量的路径,也放在这里进行文件挂载
不然启动构建出现找不到maven和jdk
docker run -d -p 9595:8080 -p 50000:50000
#让容器有root权限,方便进入容器操作
--privileged=true
--restart=always
--name jenkins
#容器/var/jenkins_home路径映射到宿主机/opt/docker/jenkins/
-v /opt/docker/jenkins:/var/jenkins_home
-v /etc/localtime:/etc/localtime
#jdk环境挂载
-v /usr/local/src/jdk/jdk1.8:/usr/local/src/jdk/jdk1.8
#maven环境挂载
-v /usr/local/src/maven/apache-maven-3.5.3:/usr/local/src/maven/apache-maven-3.5.3 jenkins/jenkins
5.查看密码:
刚才设置的宿主机路径是哪里,就在哪里查看
cat opt/docker/jenkins/secrets/initialAdminPassword
6.浏览器输入http://ip:
9595/
访问jenkins首页
输入刚才查看的密码
接下来进入到下载插件页面,安装推荐插件即可
7.可创建或者使用admin用户继续,这里选择admin账户继续
进来后点击这里往下滑,找到修改密码选项,修改密码
8.下载插件 Publish Over SSH
下载安装后,建议docker容器内进行重启Jenkins
9.全局工具配置
这里配置maven,也就是刚开始查看系统环境变量maven路径
安装jdk,也就是开始查看系统环境变量jdk路径
下滑,配置maven 同上
10.系统配置-环境变量,不配置就掉坑
这里键的配置就是服务器环境变量的名称,服务器环境变量名称是什么就填什么!!!
11.配置完在回到服务器,进入Jenkins容器
docker exec -it jenkins bas
12.配置SSH-KEY,在容器内执行:
ssh-keygen
#三次回车 生成 ssh key
13.查看公钥,且复制
cat ~/.ssh/id_rsa.pub
14.进入你的github或者gitee或者gitlab配置ssh key
我这里采用gitlab配置,将刚才的Ctrl+V在这里
15.测试一下呗
在容器内执行一下命令,出现该界面则配置成功,输入yes回车表示认证完成
git clone [email protected]:xxxx.git
16.开始搞项目咯
创建一个流水线工程
17.配置
选择参数化构建过程-选择字符串参数
REPOSITORY_VERSION
#代表当前代码分支 这里默认test
18.下滑找到流水线,写pipeline脚本
参考脚本, REPOSITORY 填写项目的ssh地址,REPOSITORY_VERSION是刚刚配置的构建参数
pipeline {
agent any
environment {
REPOSITORY="[email protected]:xxxxxx/cloud-test.git"
}
stages {
stage('拉取代码') {
steps {
echo "start fetch code from git:${REPOSITORY}"
deleteDir()
git branch: "${REPOSITORY_VERSION}", url: "${REPOSITORY}"
}
}
}
}
19.测试拉取代码
返回首页,选择刚刚创建的项目,点击按钮运行
点击开始构建
构建成功则会出现这样
20.通过maven构建代码,并通过ssh上传到指定文件夹,并执行运行
先设置一下ssh
点击高级 输入用户名密码
最后可以点击 Test Conflguation进行测试 如果弹出 Success 则代表链接成功
21.修改刚才的流水线
(这里通过直接上传到指定的docker jar包文件夹,更新替换旧版本,执行重启容器命令,加载最新jar包)
pipeline {
agent any
environment {
REPOSITORY="[email protected]:xxxxxx/cloud-demo.git"
MODULE="testsystemserver"
}
stages {
stage('拉代码') {
steps {
echo "start fetch code from git:${REPOSITORY}"
deleteDir()
git branch: "${REPOSITORY_VERSION}", url: "${REPOSITORY}"
}
}
stage('编译代码') {
steps {
echo "start compile"
sh "cd common && mvn -U clean install package"
echo "compile project ................................"
sh "cd systemserver && mvn -U clean install package"
echo "compile testsystemserver................................"
}
}
stage('构建部署') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: '31', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'docker restart testsystemserver', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'opt/docker/jar', remoteDirectorySDF: false, removePrefix: 'systemserver/target/', sourceFiles: 'systemserver/target/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
stage('构建部署') 下的可以参考流水线语法进行生成,不然会有坑坑坑坑坑坑!!!
error:Jenkins SSH: Transferred 0 file(s)
点击流水线语法
例子:
例子
如果jenkins中项目构建时控制台输出构建的地址是
/var/lib/jenkins/workspace/test
而查看部署jenkins的服务起中,构建对应项目后,生成的target包的目录是:/var/lib/jenkins/workspace/test/test-demo/target
所以 Source files(表示传输时匹配什么文件)应该填
test-demo/target/*.jar
Remove prefix ( 该操作是针对上面的source files目录)应该填
test-demo/target/
Remote directory (该操作是基于设定的服务器目录进行)。这里我的服务器配置是/. 因此这里应该写 ./
Exec command(该操作是文件传输完毕后执行什么命令) 我这里重启该服务就行所以填写
docker restart testsystemserver
然后点击生成流水脚本,可进行替换;