Docker安装Jenkins
文章目录
- 一、Docker安装Jenkins
- 1.查看Jenkins LTS 版本
- 2.拉取jenkins镜像
- 3.创建挂载数据卷
- 4.配置并启动jenkins
- 5.通过`IP:8600`启动jenkins并初始化
- 二、Jenkins插件安装+流水线创建
- 1.Jenkins安装插件
- 2.设置系统配置+全局工具配置
- 3.新建Pipeline流水线
- 三、Jenkins自动化部署Docker+SpringCloud项目
- 1.创建微服务项目,并推送到git上
- 2.创建`Jenkinsfile`文件
- 3.拉取代码
- 4.maven打包编译成docker镜像
- 5.上传镜像文件到镜像仓库
- 6.拉取镜像并应用部署
- 7.使用gitee的webhook功能
- 8.安装ngrok内网穿透,映射本地jenkins端口
- 9.gitee中设置webhook功能
- 10.推送1.1.0版本,gitee的webhooks自动触发Jenkins自动部署
- 四、使用jenkins加阿里云云效webhooks
- 1.安装`Generic Webhook Trigger`
- 2.用户管理里面添加`apiToken`
- 3.流水线配置中添加Generic Webhook Trigger配置
- 4.设置只针对项目的某个分支触发操作
- 5.阿里云云效添加webHooks配置
- 6.推送1.1.2版本到云效代码库,触发jenkins自动部署
- 7.整个钉钉实现版本推送通知
- 五、Jenkins自动化部署vue-element-admin项目
- 1.安装nodejs插件
- 2.全局工具配置
- 3.新建流水线
- 4.在vue-element-admin下面创建Jenkinsfile文件
- 5.拉取代码
- 6.使用nodejs打包部署vue-element-admin
- 7.上传服务器并替换vue项目
一、Docker安装Jenkins
1.查看Jenkins LTS 版本
Jenkins官网:https://www.jenkins.io/zh/download/
2.拉取jenkins镜像
docker pull jenkins/jenkins:2.346.1
3.创建挂载数据卷
创建
jenkins_home
文件夹
赋予
jenkins_home
文件夹访问权限
chown -R 1000 /software/jenkins/jenkins_home/
chmod 777 jenkins_home
赋予
/var/run/docker.sock
文件访问权限
chmod 777 /var/run/docker.sock
4.配置并启动jenkins
docker run -d -m 2g -p 8600:8080 -p 50000:50000 \--restart=always \-v /home/software/jenkins/jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/bin/docker:/usr/bin/docker \--name jenkins \jenkins/jenkins:2.346.1
-d
: 后台启动-m
: 设置内存大小(m-M,g-G
)-u
: 使用管理员权限启动--restar=always
: 开机启动,失败也会一直重启-p
: 映射端口-v
: 挂载数据卷/var/jenkins_home
:jenkins
挂载目录/var/run/docker.sock
: 外部docker
挂载目录/usr/bin/docker
: 外部docker
启动目录
--name
: 容器名称
进入
jenkens
容器内部,查看docker是否挂载成功
docker exec -it jenkins /bin/bash
docker version
5.通过IP:8600
启动jenkins并初始化
- 初始密码在日志文件中可查看,保存密码的目录:
/var/jenkins_home/secrets/initiaAdminPassword
二、Jenkins插件安装+流水线创建
1.Jenkins安装插件
点击
Manage Jenkins
(系统管理) ->Manage Plugins
(插件管理)
maven
插件
Publish Over SSH
和SSH
插件
安装完插件,重启
Jenkins
2.设置系统配置+全局工具配置
下载maven3.8.6版本并上传到jenkins文件夹下
mkdir /software/jenkins/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation
修改maven3.8.6
文件夹下面的conf
文件夹下面的settings.xml
,修改下载源
<!-- 阿里云镜像 -->
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>
给mvn命令添加权限
chmod a+x /software/jenkins/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.8.6/bin/mvn
系统管理 -> 全局工具配置 ->
maven
系统管理 -> 系统配置 -> 环境变量
MAVEN_HOME
/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.8.6PATH+EXTRA
$MAVEN_HOME/bin
系统管理 -> 系统配置 ->
Publish over SSH
设置jenkins时区
- 用户名称 -> 设置
3.新建Pipeline流水线
新增流水线
勾选参数化构建过程,添加字符参数和选项参数
- 字符参数:设置分支参数
- 选项参数:设置微服务项目名称
添加流水线使用Jenkinsfile文件配置
三、Jenkins自动化部署Docker+SpringCloud项目
1.创建微服务项目,并推送到git上
test-cloud|-test-common|-test-common-cloud|-test-common-mybatisplus|-test-common-redis|-test-common-spring|-test-common-swagger|-test-common-tool|-test-seata|-test-seata-account|-src|-Dockerfile|-pom.xml|-test-seata-order|-src|-Dockerfile|-pom.xml|-test-seata-storage|-src|-Dockerfile|-pom.xml|-pom.xml|-Jenkinsfile|-pom.xml
2.创建Jenkinsfile
文件
node {def mvnHomestage('测试') {sh "echo 测试流水线Jenkinsfile文件"}
}
Jenkins的选择
立即构建
,查看构建结果
3.拉取代码
流水线项目 -> 流水线语法 ->
checkout: Check out from version control
-> 复制流水线脚本
编辑
Jenkinsfile
文件,添加拉取代码
node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '2524582f-70ea-4384-a607-06e4c82a971f', url: 'https://gitee.com/lingjian1027/test-cloud.git']]])}
}
4.maven打包编译成docker镜像
添加
Dockerfile
文件,在每个微服务中都需要添加
FROM openjdk:8-jdk-oraclelinux8
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
在
pom.xml
文件中添加maven
打包命令,在每个微服务中都需要添加
<!--指定打包版本-->
<version>1.0.0</version><build><finalName>test-seata-account</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><artifactId>maven-resources-plugin</artifactId><configuration><encoding>utf-8</encoding><useDefaultDelimiters>true</useDefaultDelimiters></configuration></plugin><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.10</version><executions><execution><id>default</id><goals><!--如果package时不想用docker打包,就注释掉这个goal--><goal>build</goal><goal>push</goal></goals></execution></executions><configuration><repository>${project.build.finalName}</repository><tag>${project.version}</tag><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins></build>
编辑
Jenkinsfile
文件,添加maven打包
node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '2524582f-70ea-4384-a607-06e4c82a971f', url: 'https://gitee.com/lingjian1027/test-cloud.git']]])}stage('编译,打包微服务工程') {// 编译打包sh "mvn clean install"}
}
5.上传镜像文件到镜像仓库
添加全局
docker
凭证: 系统管理 -> Manage Credentials -> 全局 -> 添加凭证
流水线项目 -> 流水线语法 ->
withCredentials: Bind credentials to variables
-> 绑定新增(Username and password (separated)
)
编辑
Jenkinsfile
文件,添加上传镜像
def tag = "1.0.7"
def aliyun_url = "registry.cn-hangzhou.aliyuncs.com"
def aliyun_project = "testcloud1"
def storage = "test-seata-storage"
def order = "test-seata-order"
def account = "test-seata-account"
node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '2524582f-70ea-4384-a607-06e4c82a971f', url: 'https://gitee.com/lingjian1027/test-cloud.git']]])}stage('编译,打包微服务工程') {// 编译打包sh "mvn clean install"}stage('上传镜像') {sh "docker version"// 定义镜像名称def storageName = "test-seata-storage:${tag}"def orderName = "test-seata-order:${tag}"def accountName = "test-seata-account:${tag}"withCredentials([usernamePassword(credentialsId: '034e0cb5-d092-4d59-a3d9-2df6b47cc47e', passwordVariable: 'password', usernameVariable: 'username')]) {// some blocksh "docker login --username=${username} --password=${password} ${aliyun_url}"sh "docker tag ${storageName} ${aliyun_url}/${aliyun_project}/${storageName}"sh "docker tag ${orderName} ${aliyun_url}/${aliyun_project}/${orderName}"sh "docker tag ${accountName} ${aliyun_url}/${aliyun_project}/${accountName}"sh "docker push ${aliyun_url}/${aliyun_project}/${storageName}"sh "docker push ${aliyun_url}/${aliyun_project}/${orderName}"sh "docker push ${aliyun_url}/${aliyun_project}/${accountName}"sh "echo 镜像上传成功"sh "docker rmi ${storageName}"sh "docker rmi ${orderName}"sh "docker rmi ${accountName}"sh "echo 删除原始镜像成功"}}
}
6.拉取镜像并应用部署
流水线项目 -> 流水线语法 ->
sshPublisher: Send build artifacts over SSH
-> 生成流水线脚本
编辑
Jenkinsfile
文件,添加应用部署
注意
:execCommand: "/software/project/deploy.sh $tag"
,后面的路径必须由单引号改为双引号,不然外部传参,无法传参
def tag = "1.0.7"
def aliyun_url = "registry.cn-hangzhou.aliyuncs.com"
def aliyun_project = "testcloud1"
def storage = "test-seata-storage"
def order = "test-seata-order"
def account = "test-seata-account"
node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '2524582f-70ea-4384-a607-06e4c82a971f', url: 'https://gitee.com/lingjian1027/test-cloud.git']]])}stage('编译,打包微服务工程') {// 编译打包sh "mvn clean install"}stage('上传镜像') {sh "docker version"// 定义镜像名称def storageName = "test-seata-storage:${tag}"def orderName = "test-seata-order:${tag}"def accountName = "test-seata-account:${tag}"withCredentials([usernamePassword(credentialsId: '034e0cb5-d092-4d59-a3d9-2df6b47cc47e', passwordVariable: 'password', usernameVariable: 'username')]) {// some blocksh "docker login --username=${username} --password=${password} ${aliyun_url}"sh "docker tag ${storageName} ${aliyun_url}/${aliyun_project}/${storageName}"sh "docker tag ${orderName} ${aliyun_url}/${aliyun_project}/${orderName}"sh "docker tag ${accountName} ${aliyun_url}/${aliyun_project}/${accountName}"sh "docker push ${aliyun_url}/${aliyun_project}/${storageName}"sh "docker push ${aliyun_url}/${aliyun_project}/${orderName}"sh "docker push ${aliyun_url}/${aliyun_project}/${accountName}"sh "echo 镜像上传成功"sh "docker rmi ${storageName}"sh "docker rmi ${orderName}"sh "docker rmi ${accountName}"sh "echo 删除原始镜像成功"}}stage('拉取镜像并应用部署') {sh "echo 应用部署"sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/software/project/deploy.sh $tag", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}
}
在服务器的
/software/project
目录下面添加deploy.sh
执行文件
#!/bin/bash
#接收外部参数,$1对应第一个参数,$2对应第二个参数,参数之间使用空格分割
tag=$1
aliyun_url='registry.cn-hangzhou.aliyuncs.com'
aliyun_project='testcloud1'
storage='test-seata-storage'
order='test-seata-order'
account='test-seata-account'storageName=${aliyun_url}/${aliyun_project}/${storage}:${tag}
orderName=${aliyun_url}/${aliyun_project}/${order}:${tag}
accountName=${aliyun_url}/${aliyun_project}/${account}:${tag}echo "${tag}" >> /software/project/log.txt
echo "storageName ${storageName}" >> /software/project/log.txt
echo "orderName ${orderName}" >> /software/project/log.txt
echo "accountName ${accountName}" >> /software/project/log.txt#删除镜像
storageImageId=`docker images -q --filter reference=${storageName}`
if [ "$storageImageId" != "" ]; then#删除镜像docker rmi -f $storageImageIdecho "成功删除storage镜像"
fi
orderImageId=`docker images -q --filter reference=${orderName}`
if [ "$orderImageId" != "" ]; then#删除镜像docker rmi -f $orderImageIdecho "成功删除order镜像"
fi
accountImageId=`docker images -q --filter reference=${accountName}`
if [ "$accountImageId" != "" ]; then#删除镜像docker rmi -f $accountImageIdecho "成功删除account镜像"
fi#登录docker
docker login --username=剑灵服务器3 --password=ling10jian1992 ${aliyun_url}# 拉取镜像
docker pull ${storageName}
docker pull ${orderName}
docker pull ${accountName}#查询容器是否存在,存在则删除
storageContainerId=`docker ps -aq --filter name=${storage}`
if [ "$storageContainerId" != "" ]; then#停掉容器docker stop $storageContainerId#删除容器docker rm $storageContainerIdecho "成功删除storage容器"
fi
orderContainerId=`docker ps -aq --filter name=${order}`
if [ "$orderContainerId" != "" ]; then#停掉容器docker stop $orderContainerId#删除容器docker rm $orderContainerIdecho "成功删除order容器"
fi
accountContainerId=`docker ps -aq --filter name=${account}`
if [ "$accountContainerId" != "" ]; then#停掉容器docker stop $accountContainerId#删除容器docker rm $accountContainerIdecho "成功删除account容器"
fi# 启动容器
docker run -d -p 8882:8882 -m 512m --name ${account} ${accountName}
docker run -d -p 8881:8881 -m 512m --name ${order} ${orderName}
docker run -d -p 8883:8883 -m 512m --name ${storage} ${storageName}
7.使用gitee的webhook功能
下载
gitee
插件,安装完成后重启Jenkins
8.安装ngrok内网穿透,映射本地jenkins端口
ngrok官网地址:https://ngrok.com/
注册账号并下载Linux版本
上传服务器,启用并映射
IP:8600
端口
- 解压并设置全局运用
tar xvzf ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin
- 设置登录权限token
ngrok config add-authtoken <token>
- 运行ngrok,需要一直保持在线连接,二级域名才能有效
ngrok http 192.168.80.128:8600
9.gitee中设置webhook功能
10.推送1.1.0版本,gitee的webhooks自动触发Jenkins自动部署
四、使用jenkins加阿里云云效webhooks
1.安装Generic Webhook Trigger
2.用户管理里面添加apiToken
3.流水线配置中添加Generic Webhook Trigger配置
4.设置只针对项目的某个分支触发操作
- 在
Generic Webhook Trigger
的Post content parameters
中添加参数
ref$.ref // 勾选JSONpath
- 在
Optional filter
添加正则匹配
^refs/heads/(test|main)$$ref
5.阿里云云效添加webHooks配置
6.推送1.1.2版本到云效代码库,触发jenkins自动部署
7.整个钉钉实现版本推送通知
点击
Manage Jenkins
(系统管理) ->Manage Plugins
(插件管理) -> 可选插件(DingTalk)
在钉钉中创建钉钉群,并设置机器人
点击
Manage Jenkins
(系统管理) ->Configure System
(系统配置) -> 钉钉
在流水线中勾选钉钉,即可使用
五、Jenkins自动化部署vue-element-admin项目
1.安装nodejs插件
2.全局工具配置
下载
nodejs16.15.1
包并上传到jenkins_home
文件夹下面
- 下载地址:https://nodejs.org/dist/v16.15.1/node-v16.15.1-linux-x64.tar.gz
系统管理 -> 全局工具配置 -> NodeJs
3.新建流水线
4.在vue-element-admin下面创建Jenkinsfile文件
node {def mvnHomestage('测试vue') {}
}
5.拉取代码
流水线项目 -> 流水线语法 ->
checkout: Check out from version control
-> 复制流水线脚本
编辑Jenkinsfile文件,添加拉取代码
node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/test']], extensions: [], userRemoteConfigs: [[credentialsId: '2b610a7f-5a1a-4d0c-8f93-29aabe182c88', url: 'https://codeup.aliyun.com/6191d29d38b0ff04d2a421d4/huameng_safe_product/safe-product-web.git']]])}
}
6.使用nodejs打包部署vue-element-admin
流水线项目 -> 流水线语法 ->
nodejs: Provide Node & npm bin/folder to PATH
-> 复制流水线脚本
编辑Jenkinsfile文件,添加nodejs打包
node {def mvnHomestage('拉取代码') {checkout([$class: 'GitSCM', branches: [[name: '*/test']], extensions: [], userRemoteConfigs: [[credentialsId: '2b610a7f-5a1a-4d0c-8f93-29aabe182c88', url: 'https://codeup.aliyun.com/6191d29d38b0ff04d2a421d4/huameng_safe_product/safe-product-web.git']]])}stage('打包,部署vue项目') {nodejs('nodejs16') {sh "npm install"sh "npm run build:stage"}}
}
7.上传服务器并替换vue项目
流水线项目 -> 流水线语法 ->
sshPublisher: Send build artifacts over SSH
-> 生成流水线脚本
编辑Jenkinsfile文件,添加上传服务器
sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/home/projects/server', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'dist/**')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
Docker安装Jenkins相关推荐
- Docker系列 七. Docker 安装Jenkins
Docker系列 七. Docker 安装Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集 ...
- 在云服务器上基于docker安装jenkins
jenkins是老牌的CI/CD工具.下面记录一下在云服务器上的安装过程. 基于docker安装jenkins 下面记录了如何在云服务器上安装jenkins. 新建一个jenkins_docker文件 ...
- Docker安装Jenkins打包Maven项目为Docker镜像并运行【保姆级图文教学】
一.前言 Jenkins作为CI.CD的先驱者,虽然现在的风头没有Gitlab强了,但是还是老当益壮,很多中小公司还是使用比较广泛的.最近小编经历了一次Jenkins发包,感觉还不错,所以自己学习了一 ...
- docker安装jenkins并且通过jenkins部署项目(超详细and靠谱)
一.简介: 本文主要记录如何通过docker安装jenkins,并且通过jenkins部署项目,最终效果是只要在jenkins对某个项目点击构建,jenkins就会去gitLab上拉取最新项目的最新代 ...
- docker 安装jenkins
准备工作:docker 环境要装好,docker version 能显示出版本信息. Docker 安装: https://www.w3cschool.cn/docker/ubuntu-docker- ...
- CentOS中使用Docker安装Jenkins
场景 CentOS7中Docker的安装与配置: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119028701 首先按照上面在 ...
- Jenkins : 构建伟大,无所不能 —— docker 安装Jenkins(最新版)
Step 1:从dockerhub 拉取jenkins镜像 docker pull jenkins/jenkins:lts; Step 2:启动运行jenkins docker run -d --na ...
- 在centos7系统安装docker及用docker安装jenkins
一.docker的安装 1.使用yum安装Docker sudo yum install docker 2.启动Docker service docker start 3.设置开机启动docker s ...
- docker 安装jenkins教程
1.查看可用的 jenkins 版本 访问 jenkins 镜像库地址: https://hub.docker.com/_/jenkins?tab=tags . 可以通过 Sort by 查看其他版本 ...
最新文章
- 转型AI成功几率有几分?太真实了......
- oracle怎么查看一个表或一个索引占用多少空间
- DW里面html鼠标点击特效,dw制作鼠标经过时图像放大鼠标离开图像回原形效果
- java helloworld源代码_Java Hello World源代码剖析
- flv格式怎么转换成mp4
- java工程师容易秃头吗_当程序员会容易秃头?下面这3种职业一样会秃
- html插入页码,Word添加页码后,每一页的页码都一样怎么办?
- 【知识图谱】阿里巴巴电商知识图谱
- 社交产品盈利方式产品模式设计案例
- 服务器与客户端的TCP连接
- excel制作斜线表头
- 二十四节气-白露 | 白露至,秋实美
- JavaWeb学习——用户登录案例(13)
- [家里蹲大学数学杂志]第264期武汉大学2013年数学分析考研试题参考解答
- MATLAB处理.nii格式文件(.nii转换为.jpg格式)
- https://maven.google.com不能访问解决办法!
- CSDN学院免费课程领取教程
- 去除字符串中的空格(C语言)
- cloudreve旧版php下载,cloudreve
- DTCMS4.0建站流程