===============================================
2021/6/6_第3次修改 ccb_warlock
更新說明:
2021/6/6:
1.新增2.3.4 k8s部署jenkins的相關內容;
2020/11/25:
1.增加了離線安裝jenkins插件的操作步驟;
===============================================
上周准備給團隊內部培訓docker的內容,配合講解應用構建了基於jenkins的持續發布的方案,這里我將部署、配置拆成了2塊,首先記錄部署。
一、部署docker
docker參考:https://www.cnblogs.com/straycats/p/10680502.html
swarm參考:https://www.cnblogs.com/straycats/p/8978135.html
二、部署jenkins容器
2.1
mkdir -p /opt/compose/jenkins mkdir -p /opt/vol/jenkins/jenkins_home
2.2
# 本地用的network
docker network create \ --driver=bridge \ --subnet=172.11.0.0/16 \ --ip-range=172.11.0.0/16 \ --gateway=172.11.0.1 \ --attachable \ local-net
# swarm用的network
docker network create \ --driver=overlay \ --subnet=172.12.0.0/16 \ --ip-range=172.12.0.0/16 \ --gateway=172.12.0.1 \ --attachable \ swarm-net
2.3
2.3.1
docker run -d \ --name jenkins \ -v /opt/vol/jenkins/jenkins_home:/var/jenkins_home \ -p 8080:8080 \ --network local-net \ --cpus 2 \ --memory 2G \ --restart on-failure \ jenkins/jenkins:2.266
PS.如果需要移除該容器,可以使用命令
docker stop jenkins docker rm jenkins
2.3.2
# 編輯docker-compose.yml
vi /opt/compose/jenkins/docker-compose.yml
將下面的內容添加到docker-compose.yml內。
version: '2' services: jenkins: image: jenkins/jenkins:2.266 volumes: - /opt/vol/jenkins/jenkins_home:/var/jenkins_home ports: - 8080:8080 networks: - local-net networks: local-net: external: true
# 創建容器
cd /opt/compose/jenkins
docker-compose up -d
PS.如果需要移除該compose文件創建的所有容器,可以使用命令
cd /opt/compose/jenkins
docker-compose down
2.3.3
# 編輯jenkins-stack.yml
vi /opt/compose/jenkins/jenkins-stack.yml
將下面的內容添加到jenkins-stack.yml內。
version: '3.7' services: jenkins: image: jenkins/jenkins:2.266 volumes: - /opt/vol/jenkins/jenkins_home:/var/jenkins_home deploy: replicas: 1 restart_policy: condition: on-failure # any resources: limits: cpus: "2" memory: 2048M update_config: parallelism: 1 delay: 5s max_failure_ratio: 0.1 order: start-first ports: - 8080:8080 networks: - swarm-net networks: swarm-net: external: true
# 創建棧
cd /opt/compose/jenkins
docker stack deploy -c jenkins-stack.yml jenkins-stack
2.3.4 k8s方式
# 創建腳本存放的目錄
mkdir -p /opt/kubectl/jenkins
# 編輯deploy-jenkins.yaml
cd /opt/kubectl/jenkins
vi deploy-jenkins.yaml
將下面的內容添加到deploy-jenkins.yaml內。
apiVersion: v1 kind: Service metadata: name: jenkins-service labels: app: jenkins-service spec: type: NodePort ports: - port: 8080 targetPort: 8080 protocol: TCP nodePort: 8080 # 要修改kube-apiserver的端口范圍,否則只能選擇30000-32768之內的端口 selector: app: jenkins-deployment --- apiVersion: apps/v1 kind: Deployment metadata: name: jenkins-deployment namespace: default spec: replicas: 1 selector: matchLabels: app: jenkins-deployment template: metadata: labels: app: jenkins-deployment spec: securityContext: fsGroup: 1000 # 非常重要,因為jenkins運行的用戶id為1000而不是root volumes: - name: jenkins-vol hostPath: path: /opt/vol/jenkins/jenkins_home containers: - name: jenkins image: jenkins/jenkins:2.266 #imagePullPolicy: Always # IfNotPresent env: - name: TZ value: "Asia/Shanghai" volumeMounts: - name: jenkins-vol mountPath: /var/jenkins_home ports: - containerPort: 8080 #restartPolicy: Always
# 部署
kubectl apply -f deploy-jenkins.yaml
三、初始化jenkins
3.1 驗證
在創建新的容器之后,需要到容器的目錄“/var/jenkins_home/secrets/initialAdminPassword”(這里配置的宿主機目錄“/opt/vol/jenkins/jenkins_home/secrets/initialAdminPassword”)內獲取初始的登錄密碼。
填入初始密碼,點擊“繼續”。

這里選擇“安裝推薦的插件”(如果你知道自己需要什么,可以選擇自定義安裝插件)

接着等待插件安裝完成。

3.2.2 離線安裝(在線安裝成功,則跳過該步驟)
部署教程是前段時間整理的,當時通過在線安裝插件的功能是正常的。但是上周我搭建環境時發現安裝插件時提示
java.io.IOException: Downloaded file /var/jenkins_home/plugins/trilead-api.jpi.tmp does not match expected SHA-256, expected 'aRsCZA5PqYAxMhX6G+AXjA7yZArlzU0+MCEUEo1oVd8=', actual '47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='
at hudson.model.UpdateCenter.throwVerificationFailure(UpdateCenter.java:2019)
at hudson.model.UpdateCenter.verifyChecksums(UpdateCenter.java:2054)
at hudson.model.UpdateCenter$InstallationJob.replace(UpdateCenter.java:2233)
at hudson.model.UpdateCenter$UpdateCenterConfiguration.install(UpdateCenter.java:1343)
at hudson.model.UpdateCenter$DownloadJob._run(UpdateCenter.java:1872)
at hudson.model.UpdateCenter$InstallationJob._run(UpdateCenter.java:2147)
at hudson.model.UpdateCenter$DownloadJob.run(UpdateCenter.java:1843)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:118)
at java.lang.Thread.run(Thread.java:748)
查了半天找不到相關的資料,懷疑是jenkins官方的問題,估計短期內就會修復,於是我找了下資料,發現還可以下載插件包后離線安裝。無奈官網的插件完全無法下載,再查了一圈后,發現國內還是有jenkins的國內鏡像站,我就是到清華的鏡像站上下載的離線包,然后一個個手工安裝。
清華鏡像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/
登錄jenkins后,在“系統配置”-“插件管理”-"高級"-"上傳插件"這上傳離線包安裝。

3.3
填寫創建的用戶名/密碼等信息(這里填寫了admin/admin)

3.4

這樣部署過程就完成了。

3.5 訪問jenkins
瀏覽器訪問 http://localhost:8080

