这两天在学jenkins。在网上找了一大堆资料。从一脸懵逼到现在的自动化部署。说来都是泪啊。

jenkins:一个可以自动化部署的软件。平时我们程序员都是。撸码-测试-打包-上传-部署。这一循环。而jenkins的功能就是为了让我们程序员能够安心撸码的,其他的事情交给jenkins去做。

jenkins的安装。jinkins可以安装在自己的客户端,也可以安装在服务器。一般推荐安装在服务器。而考虑到环境和易维护的因素。我打算把jenkins安装在docker里。

服务器运行:docker pull jenkins   就能自动帮你下载jenkins镜像。由于docker的官方Dockerfile文件里,jenkins的uid(用户)为1000 即www用户。所以我们要是Dockefile来创建的话,也要加上这一点,不然会报权限错误。

起初我也是用Dockerfile来创建jenkins镜像,因为jenkins需要用到jdk,git,maven。而git,jdk在我们pull镜像的时候,他自动安装了。但是maven没有。起初我是想在容器里安装的。但是我们安装容器后自动是jenkins用户,没有权限,又不知道root密码。所以只能放弃,用Dockerfile试试。但是Dkerfile也是很麻烦。在From centos 7的前提下,还要RUN wget ..下载安装jdk什么的,还要ENV配置环境变量。所以就换另外一种方法

由于我们需要maven,所以我们先在我们的服务器上先下载好maven :


wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

由于linux一切皆文件。所以我们解压他就安装好了:tar -xvf apache-maven-3.3.9-bin.tar.gz 


接下来是重要的一步。因为我们启动jenkins容器了,之前说过。我们的jenkins容器需要uid为1000的用户来运行。所以我们创建一个jenkins目录,把他额属性设为1000,然后再挂载到容器里,这样容器的属性也就变成了我们所需要的1000了。


mkdir jenkins       chown -R 1000:1000 jenkins

第一步:创建容器:

docker run -d -p 8088:8080 -p 50000:50000 --name jenkins  --privileged=true -v $PWD/jenkins:/var/jenkins_home -v $PWD/apache-maven-3.3.9:/apache-maven-3.3.9 -e MAVEN_HOME=/apache-maven-3.3.9 -e PATH=/apache-maven-3.3.9/bin:${PATH}  jenkins

(后来不知道为什么,这种方法不行了,所以还是用DockerfileZ)


--privileged=true:  在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权。至于selinux可以去看《鸟哥的私房菜》 这还是我们当初的课本,巨厚。。。用setenforce 0就可以把他暂时关闭。虽然他很强大,但是因为和很多服务都冲突了。所以很多人都选择把他关掉。

$PWD:当前目录下

-v:目录

-e:设置环境变量

这样我们的容器就创建成功了。


登录我们的ip地址:8088 。就可以看到jenkins的登录页面了。初始密码放在容器内的 /var/jenkins_home/secrets/initialAdminPassword里。


第二步:登录成功后,我们下载一些插件。系统管理-管理插件  搜索然后直接安装 Git plugin , Maven Integration plugin ,SSH plugin


第三步:然后,系统管理-Global Tool Configuration 设置我们的JDK 和Maven (不同自动安装,因为我们之前已经挂载进去容器里了)。 两个都随便起个名字。path就填容器里的路径。如果不知道的话就whereis ...  查找


第四步:接下来,系统管理-系统设置


第五步:终于到这一步了。那就是新建一个项目。 在新建那里 选择 构建一个maven项目


进去之后。 在源码管理里选择Git 填好url  如果是ssh的形式的话,就要在自己的容器里 ssh-keygen -t rsa -C生成公钥,再配置


接下来可以选择构建触发器。我选的是 poll SCM 定时更新 H/2* * * * 两分钟更新一次 也可以选在Build periodically 定时创建


其他不选。来到Build 在 Goals and options 里填上clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true

因为我的mysql和redis都在自己的容器里。所以需要跳过测试运行 


在 Post Steps 里 选择 Run only if build succeeds 

Add post-build step里选 Execute shell script on remote host using ssh 。在我们的ssh里填写脚本

docker stop test
docker rm test
docker rmi test
cd /usr/local/docker/jenkins/jenkins/workspace/test2
cp Dockerfile target/
cd target/
docker build -t test .docker run -p 8090:8080 --name test --link mysql:mysql --link redis:redis -d test

这是我自己的脚本。点击保存就行了。

第六步:如果没有设置定时的话。进去项目中 点击立即构建就可以看到我们在build了。有设置定时的话,当我们的代码push到git的master分支后,如果有改变的话,就会自动构建。

可以在里面点击 Console Output查看输出


最后就可以在服务器里看到一个新的容器了。