资讯专栏INFORMATION COLUMN

Docker+Jenkins+Nodejs+Git+Webhook自动部署

tuomao / 2052人阅读

1.准备环境

一台有网络的Linux 服务器

Docker rpm安装包,依赖包 libcgroup

jdk1.7 OR 1.8环境下载

Jenkins WAR包下载

NodeJs 源码包下载

依赖下载地址:

https://pkgs.org/download/

https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/

2.安装Docker
rpm -ivh libcgroup-0.40.rc1-23.el6.x86_64.rpm 
rpm -ivh docker-engine-1.7.1-1.el6.x86_64.rpm 
3.编写Dockerfile
FROM ubuntu 

ADD jdk-8u171-linux-x64.tar.gz /usr/local/

RUN mv /usr/local/jdk1.8.0_171 /usr/local/java

ADD apache-tomcat-8.5.30.tar.gz /usr/local/

RUN mv /usr/local/apache-tomcat-8.5.30 /usr/local/tomcat

COPY jenkins.war /usr/local/tomcat/webapps/

ADD node-v8.11.1.tar.gz /root/

RUN apt-get update

RUN apt-get install -y python git ssh gcc g++ make

RUN /root/node-v8.11.1/configure && make -C /root/node-v8.11.1/ && make install -C /root/node-v8.11.1/ && rm -rf /root/node-v8.11.1/

ENV JAVA_HOME /usr/local/java

ENV JRE_HOME $JAVA_HOME/jre

ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH $JAVA_HOME/bin:$PATH

EXPOSE 8080 3000 22

ENTRYPOINT ["java","-jar","/usr/local/tomcat/webapps/jenkins.war"]

(这里就不对Dockerfile和语法做解释了,可以自行查阅资料)

本来是要用tomcat启动的,但容器启动后tomcat没启动,试了很多种方法都不行,最后只能改成java -jar

将Dockerfile与所有的软件包放在一起然后执行命令

docker build -t jenkins ./
-t jenkins为镜像的TAG,"./"为Dockerfile与软件包的路径,最后看到Successfully说明成功

(Docker基础镜像中有jenkins的镜像,直接执行docker pull jenkins就可以了,我为什么要用WAR包安装,是因为jenkins镜像的登陆用户为jenkins,登陆到容器后没有权限很多事情都做不了)

4.运行镜像

这时候运行docker images应该就会有一个叫jenkins的镜像

执行命令

docker run -d -p 8080:8080 -p 50000:50000 -p 3000:3000 -p 50001:22 -v /var/jenkins_home:/root/.jenkins/ --name jenkins_node jenkins

(3000端口是自己设置的nodejs程序端口)

run 运行docker镜像,-d 以后台守护进程运行 ,-p 将容器端口开放(服务器端口:容器端口) , -v 挂载分区(服务器分区:容器分区) --name 指定容器名称,最后的jenkins为镜像包名

如果出现这种问题,重启docker服务,在尝试启动容器,如问题未能解决就将防火墙端口开放,然后重启docker服务

以Centos7为例

firewall-cmd --zone=public --add-port=50001/tcp --permanent
firewall-cmd --reload
systemctl restart docker
docker start jenkins_node

防火墙对docker的影响很大,在防火墙开启的情况下会遇到很多奇怪的错误,而且这些错误基本上查不到决绝办法,能查到的只有与你遇到的问题无关的,但这些问题基本上都是与连接有关的,比如连不上主机或找不到主机,解析不了网址之类的,如果在防火墙开启的情况下遇到这类问题就先检查防火墙,然后重启docker服务和容器

5.jenkins配置 jenkins安装

打开浏览器并输入:"服务器地址:8080"访问,出现如下页面

将服务器"/var/jenkins_home/secrets/initialAdminPassword"文件的内容复制到输入框,点击继续

点击左边的推荐安装,等待安装完成

设置Admin user

jenkins插件安装配置

点击 系统管理 --> 插件管理

选择 “可选插件”

右上角搜索SSH,--> 选择Publish Over SSH -->点击 直接安装

等待安装完成

安装成功后,点击 系统管理 --> 插件管理

拉到最下面找到 "Publish over SSH" , 设置服务器的SSH信息


到服务器执行docker exec -it jenkins_node bash登陆到容器

重置用户密码passwd

安装一个编辑器apt-get install -y vim

安装完之后vim /etc/ssh/sshd_config编辑ssh配置文件

找到PermitRootLogin prohibit-password改为PermitRootLogin yes保存文件

重新启动sshservice ssh restart

设置ssh开机自启动update-rc.d ssh defaults

生成ssh秘钥ssh-keygen -t rsa什么都不要输直接回车直到完成就好

切换到ssh秘钥目录cd ~/.ssh/会有两个文件"id_rsa"(秘钥)和"id_rs a.pub"(公钥)文件

将公钥复制cp id_rsa.pub authorized_keys

复制id_rsa(秘钥)文件中的内容

到jenkins ‘Publish over SSH’ 设置找到SSH Servers 点击 "增加 --> 高级"

Name : ssh server名称随意设置

Hostname : 服务器ip地址

Username : 容器用户名

选中 Use password authentication, or use a different key

Passphrase / Password : 容器用户密码

Key : 将刚刚复制的id_rsa(秘钥)内容粘贴到这里

Port : 设置成镜像运行命令中将22端口映射为50001的端口

点击Test Configuration出现Success成功

如果出现下图请检查authorized_keys文件名称或内容是否正确,和复制的私钥内容是否正确,docker容器ssh是否运行。

如果出现下图就到宿主机开放50001端口

保存

6.jenkins项目配置

首页,点击左上角”新建”

General: 只填 项目名称即可

源码管理: 填写Git信息
Repository URL : 填写项目git地址
Credentials : 如果有用户名密码,点击add添加用户信息,输入用户名密码

如果出现图中CAfile错误就到容器中执行git config --global http.sslverify false关闭https证书检测,然后回到页面将Repository URL中的地址剪切并重新粘贴

构建环境选中‘Send files or execute commands over SSH before the build starts’
Remote directory : 执行此命令的文件夹位置,一般为"./",意思是在项目目录
Exec command :所执行的构建命令,例如"npm start"

保存,返回首页,并构建刚刚创建的项目

7.自动部署

jenkins --> 首页 --> 用户

设置 --> 点击 "show API Token"

复制API Token内容

返回首页 --> (自己的项目) --> 配置 --> 构建触发器 --> 选择 "触发远程构建" -->粘贴"API Token"内容到"身份验证令牌"

登陆git平台,找到你的项目,选择管理,选择webhook

URL 中 node 请替换为你在jenkins上创建的项目名称

token为复制的 API Token内容

此时你git push,会发现jenkins并没有自动构建,是因为jenkins的安全策略导致的,还需要如下设置。
jenkins首页,选择 系统管理-->Configure Global Security(系统设置下面那个) 进行如下设置

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27298.html

相关文章

  • 使用Jenkins进行持续部署(PHP代码)

    摘要:查看初始密码,这里我们的容器是首次进入,需要先安装插件,这里我们选择手工的去选择一些插件就行了,因为我们如果只是集成的话用不了多少插件插件选择我就不截图说明了,和里面得插件可以先取消。 在docker项目中单机构建jenkins使用gitlab的webhook对项目进行持续部署注意本次项目是php项目没有build和test部分,至于test部分我们下一节进行,本次只是进行一个提交部署...

    fjcgreat 评论0 收藏0
  • Docker + Jenkins + webhooks 自动部署基础实践

    摘要:自动部署基础实践熟悉的基本操作实现本地后自动构建部署服务此实践用于优化自己在实际工作中的工作流在本地开发到服务器登录云服务器或者简化流程后本地开发云服务器自动构建部署本实践将结合技术来实现云服务器对各种环境的切换与部署。 Docker + Jenkins + webhooks 自动部署基础实践 熟悉 jenkins 的基本操作 ☑️ 实现本地 git push 后 jenkins 自...

    Charlie_Jade 评论0 收藏0
  • 手把手教你用JenkinsDocker的方式自动发布dotnet core程序

    摘要:部分首先我们要有个咯下载链接我们安装官网教程安装好安装教程略嗯不是说好手把手么你妹的好好好我们还是来手把手教程好了首先安装添加安装源之后直接就好下面是的安装命令其他系统自己玩一下就好下载启动下载链接在这里面找最新的下载我当前 Jenkins部分 首先,我们要有个Jenkins咯,下载链接:https://jenkins.io/download/ 我们安装官网教程安装好jenkins,安...

    stackvoid 评论0 收藏0
  • 一套基础自动部署搭建过程

    摘要:问题背景公司初创技术团队,没有任何基础设施的情况下,需要搭建一系列管理以及自动化部署等工具所以引发了下面一系列的部署过程,历时两天,中间也是碰到各种问题,但最终把基本工具全部搭建成功,耶,下面带大家一起看下此次搭建过程。 问题背景 公司初创技术团队,没有任何基础设施的情况下,需要搭建一系列code管理以及自动化部署等工具....所以引发了下面一系列的部署过程,历时两天,中间也是碰到各种...

    mzlogin 评论0 收藏0
  • Spring Cloud【使用jenkins持续部署】Gogs+jenkins+Docker Swa

    摘要:而所谓的持续,就是说每完成一个完整的部分,就向下个环节交付,发现问题可以马上调整。那么每完成一部分就测试,这是持续部署。这是一个免费的源代码,可以处理任何类型的构建或持续集成。容器是完全使用沙箱机制,相互之间不会有任何接口。 导读: 很久没有更新文章了 最近公司在使用Spring Cloud构建的项目中经常会持续发布变更频繁,一天中会出现发布多次的情况 在这种情况下对测试环境做了改造 ...

    王笑朝 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<