基於docker部署jenkins


1. 拉鏡像

和其他的部署的鏡像的方式一樣,通常是直接使用docker search jenkins
然后直接docker pull jenkins
此時,在安裝插件的時候發現插件都安裝失敗,提示jenkins版本太低
正確的安裝方式是pull的時候直接帶上版本號,使用docker pull jenkins/jenkins:lts

2. 部署jenkins

  • 默認使用的端口號是808050000
  • 默認數據目錄為:/var/jenkins_home需要映射出來持久化
  • 如果需要把jenkins單獨映射一級目錄,則啟動時添加:JENKINS_OPTS: '--prefix=/jenkins'
  • 修改時區問題,則啟動時添加:JAVA_OPTS=-Duser.timezone=Asia/Shanghai

因此使用docker部署的話,可以執行以下腳本:

docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v /jenkins_data/:/var/jenkins_home -e JENKINS_OPTS="--prefix=/jenkins" JAVA_OPTS=-Duser.timezone=Asia/Shanghai

使用docker-compose時,xml為:

jenkins:
  image: docker.io/jenkins/jenkins:lts
  ports:
    - 8080:8080
    - 50000:50000
  restart: always
  volumes:
    - /jenkins_data/:/var/jenkins_home/
    - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
  environment:
    JENKINS_OPTS: '--prefix=/jenkins'
    JAVA_OPTS: '-Duser.timezone=Asia/Shanghai'

3. 配置nginx轉發

配置轉發時,最好是把jenkins目錄單獨映射出來,轉發時需要帶上實際的請求頭信息,不然會報腳本錯誤:

Mixed Content: The page at ‘https://XXX’ was loaded over HTTPS, but requested an insecure

nginx配置為:

location /jenkins/ {
      proxy_pass http://jenkins:8080/jenkins/;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
  }

配置完成后基本上就可以訪問了

4. 插件選擇

如果是第一次用,在部署時選擇默認即可,后續在按需選擇
常用的插件有以下幾種:

  • Git plugin
  • Gitee Plugin #碼雲插件
  • GitHub plugin
  • Maven Integration plugin
  • Publish Over SSH
  • Pipeline
  • NodeJS Plugin
  • Parameterized Trigger plugin #傳參觸發另一個構造工程插件
  • FindBugs
  • Checkstyle
  • NodeJS Plugin
    ...

5. 構建時注意事項

  • 默認安裝后無法找到maven或者版本不對
    jenkins - 系統管理 - 全局工具配置 - maven - 新增maven安裝新的maven,在構建時使用新配置的maven即可

  • gitee插件配置
    Gitee 幫助中心 / 第三方服務集成 / 幫助詳情 / Jenkins 插件

  • 如何把構建的結果拷貝到目標機器
    如果是拷貝到同一個宿主機的環境,則可以把宿主機的目錄也映射到jenkins中
    如果是網絡可聯通的環境,則使用Publish Over SSH插件,通過插件或者shell的scp拷貝過去

  • 使用cnpm代替npm
    安裝好nodejs插件后,使用shell腳本進行構建,在執行的腳本前面加上如下,就可以直接使用cnpm了:

alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc"

cnpm install 
cnpm run build

6. 可能會出現的權限問題

有部分同學會出現權限問題,錯誤日志片段如下:

java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively(Native Method)
        at java.io.File.createTempFile(File.java:2024)
        at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:142)
Caused: java.io.IOException: Failed to create a temporary file in /var/jenkins_home
        at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:144)
        at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:109)
        at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:84)
        at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:74)
        at hudson.XmlFile.write(XmlFile.java:189)
        at hudson.model.Descriptor.save(Descriptor.java:892)
        at com.gitee.jenkins.connection.GiteeConnection.migrate(GiteeConnection.java:164)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104)
        at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175)
        at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)
        at jenkins.model.Jenkins$5.runTask(Jenkins.java:1131)
        at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
        at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
        at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

因為docker啟動時,默認的用戶是jenkins:jenkins,因此賦予權限即可

  • 修改-v映射出來的文件夾權限
chown -R 1000:1000 /jenkins_data/
  • 修改docker-compose.yml配置,添加用戶
services:
    jenkins:
      ...
      ...
      user: root
  • 重啟即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM