Docker环境下安装Jenkins进行持续化集成

    技术2023-08-12  107

    Docker+Jenkins部署

    Docker安装Jenkins安装安装镜像启动镜像Jenkins基础系统配置Jenkins汉化Jenkins时区修改必须插件安装 自动化部署配置新建任务Jenkins任务运行 结束

    为了适应现有的分布式部署方案,支持多服务器的项目打包和发布,启用Jenkins进行持续化集成。并且为了方便程序管理,使用Docker进行镜像打打包和发布

    Docker安装

    不再此具体表述Docker安装过程

    Jenkins安装

    安装镜像

    目前Docker公共仓库下面,有两个Jenkins镜像,分别为Jenkins和Jenkinsci/Jenkins。根据官方说明,前者已经不再更新,因此时候后面的镜像进行安装

    docker pull jenkinsci/jenkins

    启动镜像

    docker run --name jenkins -p 8002:8080 -p 50000:50000 -d -v /home/jenkins-home-docker:/var/jenkins_home jenkins/jenkins:lts

    -p:端口映射8080为默认的Jenkins管理端网页端口,50000为 JNLP(Java Web Start) 语言调用Java类的接口,暂不清楚具体实现方式

    -v:文件映射

    Jenkins基础系统配置

    上述Docker容器启动之后,通过Docker日志查看命令

    docker logs -f jenkins

    界面上会输出Jenkins的初始管理原密码。或者进入Jenkins容器之后,执行命令查看

    docker exec -it jenkins /bin/bash cat /var/jenkins_home/secrets/initialAdminPassword

    打开Jenkins的管理网站:http://iphost:8002。其中IP地址为Jenkins的部署服务器地址,端口为上述docker启动时,真是8080进行的端口映射。

    首次打开之后,会出现如下界面 点击继续之后,在插件安装页面,我们现在安装推荐插件

    Jenkins汉化

    首页进入Jenkins,由于可能不同浏览器优先级语言的原因,默认显示问英文,如果需要指定语言,则需要安装插件

    在Available分页下面在Filter中搜索Locale Plugin插件和Localization: Chinese(Simplified),分别勾选之后,点击下面的Download now and install after restart按钮。等待安装完成之后,重启Jenkins。

    http://iphonst:8002/restart

    重启完成之后,进入Manager Jenkins -> Configure System 找到 Locale 栏目,在 Default Language 输入框中输入 zn_CN。并且勾选下方的复选框:Ignore browser preference and force this language to all users

    刷新页面,即可看到汉化结果。由于插件存在部分汉化的原因,可能有一些文字仍然显示中文。

    Jenkins时区修改

    默认启动Jenkins时,时区为标准时间,如果需要修改为北京时间, 打开 系统管理->脚本命令行 执行以下命令:

    System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

    点击运行,即可修改完成,无需重启。

    必须插件安装

    publish over ssh

    相关配置内容如下 系统管理 -> 系统配置 -> Publish over ssh 由于测试时我们使用root来直接登录 SSH Service

    Name:SSH的显示名称Hostname:SSH的主机地址。由于我们Jenkins也是安装在Docker内的,可以使用 Docker分配的IP 访问。 Username:SSH登录用户名Remote Directory:远程连接之后的默认路径勾选 Use password authentication, or use a different keyPassphrase / Password:输入 Username 对应的密码

    新增完成后点击 Test Configuration 出现 Success 之后表示配置成功 最下面的 保存

    Maven Integration plugin 相关配置内容如下 系统管理 -> 全局工具配置 -> Maven

    Name:显示名称勾选自动安装选择自己需要的版本

    新建完成之后,点击最下面的保存

    自动化部署配置

    新建任务

    首页 -> 新建任务

    描述:针对任务的描述 Git:由于测试项目为Git项目,这里按照git来配置Repository URL:git项目的地址 https://******.gitCredentials:git的认证方式,首次添加,可以通过右侧的添加按钮进行新增Branches to build:指定编译的分支 触发远程钩子 通过请求指定的Jenkins的URL地址,来触发构建,如图中的配置,则触发请求地址为

    http://iphost:8002/job/pet/build?token=buildEureka

    定时构建 使用 cron 格式来指定构建周期 选择 执行 shell 在命令中输入需要执行的shell命令 echo "Pre Steps脚本启动成功"

    Root POM:Maven编译的pom.xml文件Goals and options:Maven编译的参数

    Run only if build successeds:仅在编译成功之后执行Run only if build successeds or is unstable:仅在编译成功或者不稳定时执行Run regardless of build result:不管编译结构都执行

    由于我们的Jenkins是安装在Docker容器中的,因此需要在编译完成Jar包之后,把容器内的jar包通过SSH上传到发布服务器上,因此我们在此通过 Publish over SSH 插件实现 选择 Send files or excute commands over SHH

    SSH Server Name:我们在上面配置的SSH服务器地址Source files:上次上传的原文件地址,可以配置为jar包地址Remove prefix:需要移除的文件前缀Exec command:如果这个配置框中有任何内容,那么它将在远程服务器上执行。如果配置了源文件,那么将在执行Exec命令之前传输这些文件。 cd /home mv pet-eureka-0.0.1-SNAPSHOT.jar pet-eureka.jar ./dockerBuild.sh ./dockerRun.sh

    默认登录后是在/root目录下,所以切换到ssh的登录目录,并且重命名包名,方便后续统一管理 dockerBuild.sh为Docker镜像的编译命令,dockerRun.sh为容器的编译执行命令

    dockerBuild.sh

    docker build -t pet-eureka . docker image prune -f 根据Dockerfile文件配置编译指定镜像,最后的“.”表示指定的Dockerfile所在路径和相关文件路径删除重新编译之后未挂载的镜像,如下图所示的为dangling状态的镜像,需要此命令删除

    dockerRun.sh

    #镜像名称 IMAGE_NAME='pet-eureka' echo '================获取容器id==================' CID=$(docker ps -a | grep $IMAGE_NAME | awk '{print $1}') echo 容器id=$CID echo '================获取镜像id==================' IID=$(docker images | grep $IMAGE_NAME | awk '{print $3}') echo 镜像id=$IID if [ -n "$CID" ]; then echo 存在$IMAGE_NAME容器,停止容器并删除 docker stop $IMAGE_NAME docker rm $IMAGE_NAME else echo 不存在$IMAGE_NAME容器,开始启动 fi docker run --name=$IMAGE_NAME -p 8081:8081 -d $IMAGE_NAME

    Dockerfile.sh

    FROM java:8 ADD pet-eureka.jar /usr/local/jar/ # 修正 docker 容器里面的时间 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone #声明暴漏端口,这里一般不强制,因为我们通常用 docker -p port:port 来映射端口,以达到访问容器内部的目的 EXPOSE 8081 CMD ["java","-jar","/usr/local/jar/pet-eureka.jar"] 由于jar包需要基于java环境运行,因此第一句为指定基础的镜像。如果没有安装,需要先安装java镜像包 docker pull java:8 复制指定的jar包到容器内的指定路径下最后一行为指定容器运行的默认命令

    三个文件配置完成之后,需要给予文件执行权限

    chmod 755 dockerBuild.sh dockerRun.sh Dockerfile

    所以配置完成之后,点击最下方的保存按钮

    Jenkins任务运行

    任务创建完成之后,点击任务首页左侧的立即构建,即可在下方的Build History中看到对应的任务日志 点击任务列表,在进入的页面左侧,点击命令行输出,即可即可看到运行日志

    结束

    最后,可以在目标服务器上查看具体的编译成果,以及具体的docker镜像和容器是否生成以及运行正常

    Processed: 0.009, SQL: 9