最全的Java后端知识体系 https://www.pdai.tech, 每天更新中...。

我在尝试在容器中安装Jenkins时,初衷是希望使用docker in docker 的模式来实现Jenkins slave容器按需创建。在实现的时候需要在Jenkins 中安装Kubernetes插件。

kubernetes的插件目前来看存在一个Bug,这个bug很小但是会导致我们无法设置和kubernetes mastert认证的机制。Bug是由于配置代理时候是用的IP地址,但是jenkins必须加入http协议,可惜的是加入http协议后更新的代理又不能使用了,进入这种死循环了。所以这种方案暂时搁置。

我在写这篇文章的时候,Jenkins X 还没有出来。。。目前Jenkins 是拥抱了K8S; 我认为CI CD环境容器化编排是大趋势。

一些实践

搭建过基于K8S的完整的平台,写了系列的文章总结。有些小的团队或者独立开发者,单独一个Jenkins和Gitlab就足够做编译自动化了。

So,这里我会写常用的实现自动化部署的方案之Jenkins+Gitlab这种模式,在小型的开发时候完全够用了,从来没有一致的最佳方案,只有适不适合咱们的团队方案。

Jenkins的安装 - 官网

RedHat Linux RPM packages for Jenkins - https://pkg.jenkins.io/redhat-stable/

To use this repository, run the following command:

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

If you've previously imported the key from Jenkins, the "rpm --import" will fail because you already have a key. Please ignore that and move on.

You will need to explicitly install a Java runtime environment, because Oracle's Java RPMs are incorrect and fail to register as providing a java dependency. Thus, adding an explicit dependency requirement on Java would force installation of the OpenJDK JVM.

2.54 (2017-04) and newer: Java 8

1.612 (2015-05) and newer: Java 7

With that set up, the Jenkins package can be installed with:

yum install jenkins

See Wiki for more information, including how Jenkins is run and where the configuration is stored, etc.

Gitlab的安装

自己网上找吧,但是安装8.0+的版本,因为后面webhooks是有版本的要求的。

自动化部署配置

创建普通编译Job

Jenkins创建一个Job,并配置git信息

注意,这里连接Gitlab需要配置认证

同时,保证jenkins机器安装了Java, maven。

Maven 中需要配置成我们自己的仓库,配置settings.xm即可。

[root@jenkins ~]# find / -name settings.xml
/etc/maven/settings.xml
/var/lib/jenkins/.m2/settings.xml
/usr/share/maven/conf/settings.xml
[root@jenkins ~]# cat /usr/share/maven/conf/settings.xml

更改成公司artificatory配置

   <mirror>
<id>mirrorId_2</id>
<mirrorOf>*</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>-->
<mirror>
<id>mirrorId_1</id>
<mirrorOf>*</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://your_ip:your_port/artifactory/list/maven2/</url>
</mirror>

加入CI Trigger功能

Jenkins Trigger配置

Gitlab配置webhook

测试webhook:

加入CD功能

自动化运行脚本编写

[root@jenkins ~]# cat run.sh
#!/bin/bash
echo 'Checking scic document system status...'
SCIC_APP_PID=$(ps -ef | grep scic_paas_doc | grep -v grep | awk '{ print $2 }')
if [ -z "$SCIC_APP_PID" ]
then
echo Starting scic document...
nohup java -jar scic_paas_doc-0.0.1-RELEASE.jar > doc.log 2>&1 &
echo Started successfully.
else
echo killing old service - $SCIC_APP_PID ...
kill $SCIC_APP_PID
echo Restarting scic document...
nohup java -jar scic_paas_doc-0.0.1-RELEASE.jar > doc.log 2>&1 &
echo Restarted successfully.
fi

Global配置SSH Server

Build Job中配置PostBuild,Over SSH

通过SSH上传jar,并使用脚本运行

更新并提交代码

Z003MRZB@AAECNSHA02921L MINGW64 /d/git/k8s/scic_paas_doc (master)
$ git add .
warning: LF will be replaced by CRLF in src/main/resources/static/_sidebar.md.
The file will have its original line endings in your working directory. Z003MRZB@AAECNSHA02921L MINGW64 /d/git/k8s/scic_paas_doc (master)
$ git commit
warning: LF will be replaced by CRLF in src/main/resources/static/_sidebar.md.
The file will have its original line endings in your working directory.
[master warning: LF will be replaced by CRLF in src/main/resources/static/_sidebar.md.
The file will have its original line endings in your working directory.
50c1cc4] test trigger
warning: LF will be replaced by CRLF in src/main/resources/static/_sidebar.md.
The file will have its original line endings in your working directory.
1 file changed, 1 insertion(+), 1 deletion(-) Z003MRZB@AAECNSHA02921L MINGW64 /d/git/k8s/scic_paas_doc (master)
$ git push
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 499 bytes | 0 bytes/s, done.
Total 7 (delta 5), reused 0 (delta 0)
To git@10.192.29.91:k8s_test/scic_paas_doc.git
63b8ff4..50c1cc4 master -> master

触发编译和自动化部署

Tigger Build Logs

Started by GitLab push by daipeng
Building in workspace /var/lib/jenkins/workspace/SCIC_DOC_TRIGGER_BUILD
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url git@10.192.29.91:k8s_test/scic_paas_doc.git # timeout=10
Fetching upstream changes from git@10.192.29.91:k8s_test/scic_paas_doc.git
> git --version # timeout=10
using GIT_SSH to set credentials jenkins master server key
> git fetch --tags --progress git@10.192.29.91:k8s_test/scic_paas_doc.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse remotes/origin/master^{commit} # timeout=10
> git branch -a -v --no-abbrev --contains 50c1cc4499394d70919a470db5961cec00e65457 # timeout=10
Checking out Revision 50c1cc4499394d70919a470db5961cec00e65457 (origin/master)
Commit message: "test trigger"
> git config core.sparsecheckout # timeout=10
> git checkout -f 50c1cc4499394d70919a470db5961cec00e65457
> git rev-list 99d919b08d5a2010fe750d4d920a10024401bc92 # timeout=10
[SCIC_DOC_TRIGGER_BUILD] $ /bin/sh -xe /tmp/jenkins3779972667920467885.sh
+ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building pass_doc 0.0.1-RELEASE
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ scic_paas_doc ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 71 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ scic_paas_doc ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ scic_paas_doc ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /var/lib/jenkins/workspace/SCIC_DOC_TRIGGER_BUILD/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ scic_paas_doc ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ scic_paas_doc ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ scic_paas_doc ---
[INFO] Building jar: /var/lib/jenkins/workspace/SCIC_DOC_TRIGGER_BUILD/target/scic_paas_doc-0.0.1-RELEASE.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.4.1.RELEASE:repackage (default) @ scic_paas_doc ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.695s
[INFO] Finished at: Fri Jul 28 09:15:43 CST 2017
[INFO] Final Memory: 16M/237M
[INFO] ------------------------------------------------------------------------
SSH: Connecting from host [jenkins]
SSH: Connecting with configuration [PAAS_DOC_SERVER_200] ...
SSH: EXEC: STDOUT/STDERR from command [/root/run.sh] ...
Checking scic document system status...
killing old service - 19970 ...
Restarting scic document...
Restarted successfully.
SSH: EXEC: completed after 200 ms
SSH: Disconnecting configuration [PAAS_DOC_SERVER_200] ...
SSH: Transferred 1 file(s)
Finished: SUCCESS

查看网站更新

发现确实已经更新 啦。

参考文档

https://jenkins.io/doc/pipeline/tour/hello-world/

https://jenkins.io/user-handbook.pdf

http://www.cnblogs.com/kevingrace/p/5651447.html

http://www.cnblogs.com/ceshi2016/p/6529557.html

http://linuxsogood.org/1539.html

http://www.mamicode.com/info-detail-1264849.html

http://blog.didispace.com/spring-boot-run-backend/

【开发工具】Jenkins+Gitlab实现自动化部署的更多相关文章

  1. Jenkins+Gitlab+Ansible自动化部署(二)

    接Jenkins+Gitlab+Ansbile自动化部署(一):https://www.cnblogs.com/zd520pyx1314/p/10210727.html Ansible的配置与部署 工 ...

  2. Jenkins+Gitlab+Ansible自动化部署(三)

    接Jenkins+Gitlab+Ansible自动化部署(一)https://www.cnblogs.com/zd520pyx1314/p/10210727.html 和(二)https://www. ...

  3. Jenkins+Gitlab+Ansible自动化部署(一)

    首先准备实验环境 虚拟机 主机名 IP地址 服务 系统版本 内核版本 Vmware Workstation 14 gitlab.example.com 192.168.244.130 gitlab  ...

  4. Jenkins+Gitlab+Ansible自动化部署(五)

    Freestyle Job实现静态网站部署交付(接Jenkins+Gitlab+Ansible自动化部署(四)https://www.cnblogs.com/zd520pyx1314/p/102445 ...

  5. Jenkins+Gitlab+Ansible自动化部署(六)

    Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs. ...

  6. Jenkins+Gitlab+Ansible自动化部署(四)

    接Jenkins+Gitlab+Ansible自动化部署(三)https://www.cnblogs.com/zd520pyx1314/p/10235394.html Jenkins应用 Jenkin ...

  7. 基于Jenkins+Gitlab的自动化部署实战

    故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称“人肉部署”,这简直是无比的痛苦,不能忍受的 ...

  8. jenkins +gitlab +docker 自动化部署tomcat 项目

    实验环境 实验设备 三台服务器 centos 7.X 以上 内存 2-3G左右 192.168.1.195 (jenkins最新+ git 2.8+maven 3.5 +tomcat 8+java1. ...

  9. Linux-GitLab+Jenkins持续集成+自动化部署

    GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...

随机推荐

  1. 值类型struct在foreach中的陷阱

    最近踩了一个坑,为了优化代码,把class改为了struct,结果发现原来的初始化语句没有预期的运行,伪代码如下: public struct A { bool _isActive; public v ...

  2. Eclipse中注释方法操作(两种)

    Eclipse 中的两种注释方法:(1)多行注释 /* */ (2)单行注释 // 多行注释操作方法. 选中注释部分-菜单栏右上角 source: Add block comment.必须选中需要注释 ...

  3. 【转载】分布式之redis复习精讲

    注: 本篇文章转自:分布式之redis复习精讲 引言 为什么写这篇文章? 博主的<分布式之消息队列复习精讲>得到了大家的好评,内心诚惶诚恐,想着再出一篇关于复习精讲的文章.但是还是要说明一 ...

  4. hadoop常见错误汇总及解决办法一

    我们经常会遇到一些问题,而且可能会重复性遇到,这些方案可以收藏为以后备用.我们经常遇到如下问题:1.两次以上格式化造成NameNode 和 DataNode namespaceID 不一致,有几种解决 ...

  5. 【转】我的第一个Python小程序

    原文网址:http://blog.csdn.net/randyqiu/article/details/4484089 人的每个第一次都有点特别的意义,所以下面这个小程序我把他记录下来做个纪念. 因为要 ...

  6. centos65安装docker遇到的问题

    1.安装docker后启动显示内核太低(升级内核): 网上太多方案 2.升级内核后还是启动不了docker:执行下面语句 yum install device-mapper-event-libs 步骤 ...

  7. GOF23设计模式之策略模式(strategy)

    一.策略模式概述 策略模式对应于解决某一个问题的一个算法族,允许用户从该算法族中任选一种算法解决一个问题,同时可以方便的更换算法或者增加新的算法.并且由客户端决定调用哪个算法. 策略模式的本质: 分离 ...

  8. MySQL Join算法与调优白皮书(二)

    Index Nested-Loop Join   (接上篇)由于访问的是辅助索引,如果查询需要访问聚集索引上的列,那么必要需要进行回表取数据,看似每条记录只是多了一次回表操作,但这才是INLJ算法最大 ...

  9. 网络网关TCP/IP

    vmware中的4种网络连接模式 2008-11-13 11:11:21 分类: 系统运维 很多朋友都用vmware来测试不同的系统,我结合自己的经验谈一下对网络设置的理解,不对的地方请指正. bri ...

  10. 纯css实现点击事件

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...