软件安装

jenkins

下载 jenkins

下载安装 tomcat

配置

配置 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)

**

加速下载插件

  • 进入 /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 文件夹中。

修改管理员密码

链接

credentials

  • 怎么说呢,可以看成是运行 git/svn 项目的账号吧

image.png

问题

jenkins 构建后自动关闭 shell 脚本中执行的项目

  • 感谢 链接
  • 原理:jenkins默认会在构建完成后杀掉构建过程中又jenkins中shell命令触发的衍生进程

    • jenkins根据BUILD_ID识别某个进程是否为构建过程的衍生进程,故修改BUILD_ID后,jenkins就无法识别是否为衍生进程,则此进程能在后台保留运行

      1.在execute shell中加入BUILD_ID=DONTKILLME

  • _* _DONTKILLME仅仅为增加可读性,则任意修改其他

  • 在想保留的进程启动命令前加入这一行 *
    1. # 举例如下
    2. BUILD_ID=DONTKILLME
    3. sh /home/bob/restart.sh

    2.临时改变BUILD_ID值

    1. OLD_BUILD_ID=$BUILD_ID
    2. echo $OLD_BUILD_ID
    3. BUILD_ID=dontKillMe
    4. #此处放入shell脚本或者shell命令
    5. BUILD_ID=$OLD_BUILD_ID
    6. echo $BUILD_ID

Build step ‘Execute shell’ marked build as failure

  • Jenkins构建时运行脚本报错时:

    Build step ‘Execute shell’ marked build as failure

  1. 磁盘空间不足导致报错。
  2. 请在 Execute shell构建步骤中添加以下行

    !/bin/bash

!/bin/bash只能放在第一行,如果后面还有#!,那么只能看成是注释。


maven

切换镜像

解压

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

  • 替换

    1. <!-- 配置aliyun下载镜像 -->
    2. <mirror>
    3. <id>nexus-aliyun</id>
    4. <mirrorOf>*</mirrorOf>
    5. <name>Nexus aliyun</name>
    6. <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    7. </mirror>

GIT

安装

yum install -y git

git —version

部署过程

上传项目到 github

  • 注意 server.port 要和 docker 运行时映射的端口保持一致

写 Dockerfile

  • 在项目根目录下,写一个 Dockerfile
    1. # 用哪个 docker 镜像
    2. FROM openjdk
    3. # cache
    4. VOLUME /tmp
    5. # 复制为另一个 app
    6. ADD note-0.0.1-SNAPSHOT.jar app.jar
    7. #RUN bash -c 'touch /app.jar'
    8. # -Djava.security.egd=file:/dev/./urandom 随机种子加速构建
    9. ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    10. # 只是提示别人这个 Dockerfile 应该部署在哪个端口
    11. # 而且要和 java 项目中的 server.port 保持一致!!!!!!!!
    12. EXPOSE 8801

构建任务

  1. 新建一个任务
  2. 构建一个自由风格的软件项目
  3. 配置Github地址
  4. 配置源码管理(设置账号密码和分支)
  5. 配置触发器
    1. todo,用于监听代码变化
  6. 配置构建环境

    1. 增加构建步骤 -> invoker top-level-Maven targets

      1. maven 版本可以选择之前在 Global Tool Configuration 设置的 maven

      image.png

    2. 增加构建步骤 ->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} ```

执行构建

  • 点击 立即构建

访问 docker 运行的 springboot 项目