跳至主要内容

在Docker中安装并设置Jenkins

Welcome file

简介

相比在主机中直接安装各种基础服务,在Docker中安装和升级都更方便,也更不容易破坏其他的基础服务。下面总结一下Jenkins在Docker中的使用。

安装并运行Jenkins

安装并运行命令如下:

docker run -d -u root --restart always --name jenkins \
-e "JAVA_OPTS=-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai -Duser.timezone=Asia/Shanghai -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai" \
--group-add $(stat -c '%g' /var/run/docker.sock) \
-v /etc/localtime:/etc/localtime:ro \
-v /opt/data/jenkins/workspace/:/usr/src/app \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):$(which docker) \
-v /data/jenkins:/var/jenkins_home \
-v /data/jenkins_tool:/jenkins_tool \
-v /data/jenkins_tool/repo:/repo \
-p 8099:8080 -p 50000:50000 \
jenkins/jenkins:lts

Jenkins的Docker官方镜像中有很多参数的解释,这里列出其中一些参数以及使用原因:

-u root使用root启动镜像中的Jenkins服务,会有一定安全风险,但权限方面会方便很多,也考虑到是在内网中运行所以问题不大

-e xxxxxxxx-v /etc/localtime:/etc/localtime:ro设置Jenkins的时区

-v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):$(which docker)这两条参数让在Docker中的Jenkins也能访问宿主机中的Docker,让项目的构建环境(如maven、node)也能够在Docker中运行构建

-p 50000:50000用于与Jenkins slave通信

设置Jenkins

由于众所周知的原因,如果在中国大陆地区,最好在设置向导时,取消全部插件的下载安装,直接进入Jenkins,并修改更新站点之后,再下载插件。修改更新站点方法如下:

  1. 登录Jenkins之后,直接访问站点设置页面:http://jenkins-url:8099/pluginManager/advanced
  2. 在最底部找到【升级站点】设置模块,把站点连接修改为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json,再点击下面的SubmitCheck Now
  3. 由于Jenkins的校验等各种原因,即使设置了镜像站,下载插件的地址也没有修改为对应的镜像站地址,需要再用些其他技巧:
    • 手动更改${JENKINS_HOME}/updates/default.json文件:如果不常找新的插件或更新插件,可以临时修改一下该文件后再下载插件。执行如下命令就可以修改:sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' ${JENKINS_HOME}/updates/default.json
    • 代理updates.jenkins-ci.org域名:可以把该域名在HOSTS或内部的DNS服务器中配置成Nginx或其他代理的地址,通过该代理地址来下载。

Java构建常用基本插件

  • Build Timeout
  • Folders
  • Git
  • Timestamper
  • Workspace Cleanup
  • Pipeline
  • Publish Over SSH
  • Maven Integration

参考资料

[1] Jenkins的Docker官方镜像:https://github.com/jenkinsci/docker

评论

此博客中的热门博文

国密SM2签名封装成PKCS7格式

在国内做金融行业,难免会有被强制使用国密算法的情况,而且一般还会指定必须使用硬件加密机之类的设备,所以我也稍微的研究了一下国密算法,使用软算法签名并封装 PKCS7 格式(文档中的一个交互)。 以下是基于 Bouncy Castle 的示例,密钥对的生成可以参考 Bouncy Castle 中 test 包下 SM2 相关代码 public static String sign ( ) throws Exception { //加载公钥 byte [ ] plainText = "hello, world" . getBytes ( ) ; FileInputStream input = new FileInputStream ( "F:\\certificate\\public.cer" ) ; CertificateFactory certificateFactory = new CertificateFactory ( ) ; X509Certificate certificate = ( X509Certificate ) certificateFactory . engineGenerateCertificate ( input ) ; input . close ( ) ; //加载私钥,private为换成实际的私钥 PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec ( "private" . getBytes ( ) ) ; //SM2算法实际上为ECC算法,并指定了一些参数值,所以这里的参数是EC KeyFactory factory = KeyFactory . getInstance ( "EC" , "BC" ) ; PrivateKey privateKey = factory . generatePrivate ( spec ) ; //以下为签名并封装成PKCS7格式 byte [ ] signedMessag

Spring Boot Actuator 2 示例

Welcome file 简介 Spring Boot Actuator为应用程序提供了各种开箱即用的运维特性,可以与应用方便的交互和监控。 使用环境:Java 11 和 Spring Boot 2.4.3.RELEASE 集成Spring Boot Actuator 在Spring Boot中集成Spring Boot Actuator与集成其他的框架类似,在 pom.xml 里引入相关的starter就可以: < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-actuator </ artifactId > </ dependency > < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-web </ artifactId > </ dependency > 由于大部分的使用场景还是web,所以这里也用Spring MVC做示例。 配置好 pom.xml 后,默认actuator仅暴露一些基本功能,实际使用中,根据需求暴露对应功能。为了简便测试,这里在 application.yml 中配置暴露全部功能: management : endpoints : web : exposure : include : "*" endpoint : health : enabled : true show-details : always probes : enabled : true shutdown : enabled : true metr

NextCloud数据目录迁移

最近服务器的环境坏了,所以迁移了NextCloud的数据目录。不过在迁移过程中有点小问题。 环境: Ubuntu 18.04 Docker 19.03.7 1.NextCloud页面不正常,Docker日志显示XX目录permission denied 参考了 这里 的做法,不过是把  /var/www/html/   整个目录的权限都修改为  chown -R www-data:www-data ,之后就不再报权限问题了。 2.数据库配置修改 因为NextCloud是在初始化时填的数据库连接信息,所以直接迁移数据目录的情况下,会导致应用连不到新的数据库环境。此时可以找到数据目录下的  config/config.php 文件,直接修改数据库连接配置。