记录一下我使用jenkins来跑docker container的艰辛路程吧,是照着jenkins官网的[文档](https://jenkins.io/doc/tutorials/build-a-java-app-with-maven/)做的,同时参考了multibranch情况下应该如何写jenkinsFile,也查了很多博客,想做成的效果是jenkins可以自动拉取github上的项目,根据分支名不同使用不同的端口来运行程序。

agent {
    docker {
        image 'maven:3-alpine'
        args '-v /root/.m2:/root/.m2'
    }
}

 

 先说下jenkinsFile中的这条命令,args '-v /root/.m2:/root/.m2',它将主机中的root/.m2目录映射到了docker中的container中,这里指的就是maven:3-alpine,因为maven:3-alpine这个container在运行完之后,就会被remove掉,如果映射了仓库目录的话,就没必要每次run job的时候重新下载jar包了,官网也是这样介绍的,这个地方前面应该替换成自己本地的maven仓库目录。jenkins官网说要安装jenkins,要先安装docker,后来我发现即使没装docker,也可以安装jenkins,在8080端口启动服务的,至于docker的相关知识,docker官网的教程可以说是非常详细了。我最后是通过java -jar xxx.jar来运行java程序的,就这样job一直运行着,job显示是红色的图标,端口一直监听着提供服务,虽然功能是实现了,但不是很合适。
 

 说下我遇到的一个大坑,就是关于权限的问题,默认jenkins服务是以jenkins用户运行着的,我想去文件目录里验证下到底有没有jenkins用户,没找到,还以为没有呢,后来才知道有些linux的用户名就是没有在文件中记录的,我是通过在跑jenkins任务的时候,在shell中输出了当前用户查看的,后来我通过更改jenkins的配置文件,使得运行jenkins服务的用户为root,但还是报权限错误,场景是,我在我的spring boot 项目中添加了一个shell文件,jenkins在跑job的时候拉取我github上的项目到本地jenkins的家目录workspace里面,拉取了很多次,我到那个目录去查看那个shell文件的可执行权限,没有可执行权限啊,让我很是崩溃,直接去改源文件的权限,文件模式发生了变化,但git好像无法提交,后来我采取的方法是,删除掉原来的shell文件,重新建一个shell文件,建好之后,就更改它的权限,然后提交,权限问题就解决了。

使用jenkins来跑docker image的惨痛经历的更多相关文章

  1. Jenkins + docker ,容器中跑docker服务

    1. 宿主机:安装docker 2. 启动jenkins服务 https://jenkins.io/download/ Jenkins官网找自己需要的镜像版本号进行使用. docker run -it ...

  2. 使用Jenkins来构建Docker容器

    使用Jenkins来构建Docker容器(Ubuntu 14.04) 当开发更新了代码,提交到Gitlab上,然后由测试人员触发Jenkins,于是一个应用的新版本就被构建了.听起来貌似很简单,dua ...

  3. Jenkins中执行docker命令报错

    Cannot connect to the Docker daemon. Is the docker daemon running on this host?   在配置Jenkins从Gitlab自 ...

  4. MacOS~jenkins里解决docker执行权限问题

    一 全局配置项设置 需要添加全局变量项,例如名称docker,路径/usr/local 添加一个jenkinsfile文件,用于运行docker命令 pipeline { agent any tool ...

  5. ubuntu 中安装jenkins,基于docker运行jenkins

     本文是在ubuntu环境下安装jenkins,jenkins运行在docker容器中,至于docker如何安装,本文不再描述,大家可以上网查询下,如何安装docker,下面先放上一个使用jenkin ...

  6. jenkins安装启动(docker)

    mkdir /opt/jenkins -pvim /opt/jenkins/Dockerfile FROM jenkins/jenkins:lts EXPOSE 8080 50000 vim /opt ...

  7. 从零开始使用Jenkins来构建Docker容器(Ubuntu 14.04)

    当开发更新了代码,提交到Gitlab上,然后由测试人员触发Jenkins,于是一个应用的新版本就被构建了.听起来貌似很简单,duang~duang~duang,我用了是这样,你们用了也是这样,看起来这 ...

  8. jenkins+git实现docker持续部署

    jenkins所做的事情很简单,就拿我现在的情况来说吧,(1).每次开发完成,我都会push到我的远程仓库:(2).我再将我push到远程仓库的代码pull到我的测试服务器上:(3).在测试服务器上, ...

  9. Jfrog Artifactory jenkins 流水线使用docker的方式培训[暂未成功]

    1. 创建jenkins的流水线 2. 创建artifactory的镜像仓库 3. 创建generic的仓库上传需要的 war包还有tar包. 4. 修改pipeline的 脚本 主要修改的地方. 修 ...

随机推荐

  1. Python collections系列之可命名元组

    可命名元组(namedtuple)  根据nametuple可以创建一个包含tuple所有功能以及其他功能的类 1.创建一个坐标类 import collections # 创建类, defaultd ...

  2. LeetCode第一题:Two Sum

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

  3. c# Chart 服务器端动态创建ChartArea

    1 aspx <x:ContentPanel ShowBorder="true" ShowHeader="false" ID="ContentP ...

  4. 关于移动端的一些tip

    移动端的一些tip 开发相关 关于viewport <meta name="viewport" content="name=value,name=value&quo ...

  5. java代码继承疑惑,请有心人解答

    总结:这段程序没有问题,编译运行都是可以的.关键是,子类的无参构造方法第一句少了super(a,b);运行后,显示了双重结果 .还有.如果子类中没有声明成员变量String  name.那么结果显示父 ...

  6. #pragma pack 在BITMAP结构体定义中的使用

    BITMAP位图文件主要分为如下3个部分: 块名称 对应Windows结构体定义 大小(Byte) 文件信息头 BITMAPFILEHEADER 14 位图信息头 BITMAPINFOHEADER 4 ...

  7. 【转】Rails中Bootstrap的安装和使用

     转自:http://blog.csdn.net/lissdy/article/details/9195651   眼看着前端攻城师们都开始使用Bootstrap创作网页,于是也想学着在最近正在学习的 ...

  8. log4j配置文件加载方式

    使用背景: apache的log4j是一个功能强大的日志文件,当我们使用eclipse等IDE在项目中配置log4j的时候,需要知道我们的配置文件的加载方式以及如何被加载的. 加载方式: (1).自动 ...

  9. 第三天:Servlet运行原理

    1.  如何不重启tomcat就可以重新加载一个web应用?? 方法:进入tomcat的manager之后点击reload即可. 2.开发一个Servlet,该Servlet可以输出自己的名字并显示当 ...

  10. Serializable 和 parcelable的实现和比较

    首先这个两个接口都是用来序列化对象的 但是两者在性能和应用场合上有区别,parcelable的性能更好,但是在需要保存或者网络传输的时候需要选择Serializable因为parcelable版本在不 ...