- 软件安装
- !/bin/bash
- !/bin/bash只能放在第一行,如果后面还有#!,那么只能看成是注释。
- 部署过程
- !/bin/bash
- 区分项目地址
- 后续 jar 包和 Dockerfile 存放目录的根目录
- 下面 ${PROJECT_NAME}:${PROJECT_VERSION} 要和 最终打包出来的 jar 包名称保持一致
- 项目名
- 项目版本号
- 1. 生成 jar 包和 Dockerfile 存放目录
- 2. 如果存放目录存在 Dockerfile,则进行删除
- 3. 从 jenkins 下载 github 源码的地方拷贝 Dokcerfile 和打包完成的 jar 包到存放目录
- 4. 切换到存放目录
- 5.1 根据 Dockerfile 构建镜像, -t 表示镜像名,注意后面有个圆点
- 5.2 推送到远程仓库
- 6. 清除镜像实例
- 7.运行镜像实例,注意端口号要和项目配置的端口保持一致
软件安装
jenkins
下载 jenkins
- 查看版本 https://www.jenkins.io/download/
- 根据上面提供的最新版本号下载 war 包 https://updates.jenkins-ci.org/download/war/
- 运行,需要 jdk8 版本
java -jar jenkins.war
下载安装 tomcat
- https://tomcat.apache.org/download-90.cgi
- 选择 Binary Distributions 的 Core,选择 tar.gz
- 解压运行
配置
配置 update-center.json
- 需要先运行一次 jenkins,直到页面能打开
- 同时生成
/root/.jenkins/updates
文件夹
- 同时生成
- 如果界面提示Jenkins正在启动,请稍后…或者提示
Please wait while Jenkins is getting ready to work...
- 需要你进入jenkins的工作目录(
/root/.jenkins/
),打开hudson.model.UpdateCenter.xml
把里面的[http://updates.jenkins-ci.org/update-center.json](http://updates.jenkins-ci.org/update-center.json)
改成[http://mirror.xmission.com/jenkins/updates/update-center.json](http://mirror.xmission.com/jenkins/updates/update-center.json)
或者[https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json](https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json)
- 需要你进入jenkins的工作目录(
加速下载插件
- 进入
/root/.jenkins/updates/
,尝试修改default.json
- 替换所有插件下载的url
- 替换测试url
$ sed -i ‘s/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g’ default.json && sed -i ‘s/http:\/\/www.google.com/https:\/\/www.baidu.com/g’ default.json
配置 Global Tool Configuration
- jenkins 用于自动化构建,其中就会使用到 linux 下各种工具,比如 jdk、maven、git 的环境;如果不进行设置,会使用默认的路径,甚至会自动安装,为了避免造成差异,建议进行设置
- 在
manage jenkins
->Global Tool Configuration
中设置 jdk 和 maven,取消自动安装- 其中
name
随便取,用于在作业中作为选项使用 XXX_HOME
表示工具位置
- 其中
访问
- 把 jenkins.war 放到 tomcat 的
webapps
目录 - 运行 tomcat 的
bin
目录的startup.sh
- 端口号为
ip:8080/jenkins
,键入密码、安装插件、设置账号
报错
- 该Jenkins实例似乎已离线。
- 确认服务器是否能解析上面的地址,就是 ping 不 ping 得通
No such plugin: cloudbees-folder
- 上面的错误显示是,安装插件 cloudbees-folder 失败,是因为下载的 Jenkins.war 里没有 cloudbees-folder 插件,需要去 https://updates.jenkins-ci.org/download/plugins/cloudbees-folder/ 下载
访问IP:PORT/restart
,越过配置插件的页面,直接访问点击【系统管理】–【管理插件】–【高级】–【上传插件】,手动安装下载好的插件,即可- 将目录中的 cloudbees-folder.hpi 下载下来后放在
jenkins安装目录\war\WEB-INF\detached-plugins
文件夹中。
- 上面的错误显示是,安装插件 cloudbees-folder 失败,是因为下载的 Jenkins.war 里没有 cloudbees-folder 插件,需要去 https://updates.jenkins-ci.org/download/plugins/cloudbees-folder/ 下载
修改管理员密码
credentials
- 怎么说呢,可以看成是运行 git/svn 项目的账号吧
问题
jenkins 构建后自动关闭 shell 脚本中执行的项目
- 感谢 链接
原理:jenkins默认会在构建完成后杀掉构建过程中又jenkins中shell命令触发的衍生进程
_* _DONTKILLME仅仅为增加可读性,则任意修改其他
- 在想保留的进程启动命令前加入这一行 *
# 举例如下
BUILD_ID=DONTKILLME
sh /home/bob/restart.sh
2.临时改变BUILD_ID值
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
#此处放入shell脚本或者shell命令
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_ID
Build step ‘Execute shell’ marked build as failure
- Jenkins构建时运行脚本报错时:
Build step ‘Execute shell’ marked build as failure
!/bin/bash只能放在第一行,如果后面还有#!,那么只能看成是注释。
maven
切换镜像
https://maven.apache.org/download.cgi 可以切换镜像地址
![image.png](https://cdn.nlark.com/yuque/0/2020/png/367873/1588245476823-a84bfb67-793a-48c3-8334-29216ec0dde8.png#align=left&display=inline&height=68&margin=%5Bobject%20Object%5D&name=image.png&originHeight=68&originWidth=429&size=3696&status=done&style=none&width=429)
下载
wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
解压
tar -zxvf apache-maven-3.6.3-bin.tar.gz
环境变量
设置
vim /etc/profile export MAVEN_HOME=/usr/local/apache-maven-3.6.3 export PATH=$PATH:$MAVEN_HOME/bin
使能
source /etc/profile
查看是否安装成功
mvn -version
设置阿里云镜像
进入
cd /usr/local/apache-maven-3.6.3/conf vi settings.xml
替换
<!-- 配置aliyun下载镜像 -->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
GIT
安装
yum install -y git
git —version
部署过程
上传项目到 github
- 注意
server.port
要和 docker 运行时映射的端口保持一致
写 Dockerfile
- 在项目根目录下,写一个
Dockerfile
# 用哪个 docker 镜像
FROM openjdk
# cache
VOLUME /tmp
# 复制为另一个 app
ADD note-0.0.1-SNAPSHOT.jar app.jar
#RUN bash -c 'touch /app.jar'
# -Djava.security.egd=file:/dev/./urandom 随机种子加速构建
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
# 只是提示别人这个 Dockerfile 应该部署在哪个端口
# 而且要和 java 项目中的 server.port 保持一致!!!!!!!!
EXPOSE 8801
构建任务
- 新建一个任务
- 构建一个自由风格的软件项目
- 配置Github地址
- 配置源码管理(设置账号密码和分支)
- 配置触发器
- todo,用于监听代码变化
配置构建环境
增加构建步骤 ->
invoker top-level-Maven targets
- maven 版本可以选择之前在
Global Tool Configuration
设置的 maven
- maven 版本可以选择之前在
增加构建步骤 ->
execute shell
```shell!/bin/bash
区分项目地址
REGISTRY_URL=192.168.1.100:2375
后续 jar 包和 Dockerfile 存放目录的根目录
WORK_DIR=/root/work_build
下面 ${PROJECT_NAME}:${PROJECT_VERSION} 要和 最终打包出来的 jar 包名称保持一致
项目名
PROJECT_NAME=note
项目版本号
PROJECT_VERSION=0.0.1-SNAPSHOT
1. 生成 jar 包和 Dockerfile 存放目录
if [ ! -e ${WORK_DIR}/${PROJECT_NAME} ] && [ ! -d ${WORK_DIR}/${PROJECT_NAME} ]; then mkdir -p ${WORK_DIR}/${PROJECT_NAME} echo “Create Dir: ${WORK_DIR}/${PROJECT_NAME}” fi
2. 如果存放目录存在 Dockerfile,则进行删除
if [ -e ${WORK_DIR}/${PROJECT_NAME}/Dockerfile ]; then rm -rf ${WORK_DIR}/${PROJECT_NAME}/Dockerfile echo “Remove File: ${WORK_DIR}/${PROJECT_NAME}/Dockerfile” fi
3. 从 jenkins 下载 github 源码的地方拷贝 Dokcerfile 和打包完成的 jar 包到存放目录
cp /root/.jenkins/workspace/${PROJECT_NAME}/Dockerfile ${WORK_DIR}/${PROJECT_NAME}/ cp /root/.jenkins/workspace/${PROJECT_NAME}/target/*.jar ${WORK_DIR}/${PROJECT_NAME}/
4. 切换到存放目录
cd ${WORK_DIR}/${PROJECT_NAME}/
5.1 根据 Dockerfile 构建镜像, -t 表示镜像名,注意后面有个圆点
docker build -t ${REGISTRY_URL}/${PROJECT_NAME}/${PROJECT_NAME}:${PROJECT_VERSION} .
5.2 推送到远程仓库
docker push ${REGISTRY_URL}/${PROJECT_NAME}/${PROJECT_NAME}:${PROJECT_VERSION}
6. 清除镜像实例
if docker ps -a | grep ${PROJECT_NAME}; then docker rm -f ${PROJECT_NAME} echo “Remove Docker Container: ${PROJECT_NAME}” fi
7.运行镜像实例,注意端口号要和项目配置的端口保持一致
docker run -d -p 8801:8801 —name ${PROJECT_NAME} ${REGISTRY_URL}/note-detail/${PROJECT_NAME}:${PROJECT_VERSION} ```
执行构建
- 点击 立即构建