Docker安裝Jenkins教程
CentOS7: 1908
IP: 192.168.81.103
hostname: jenkins
映象: jenkins/jenkins
二、準備工作
1.關閉防火牆和SeLinux
systemctl stop firewalld && systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
2.禁用swap交換分割槽
swapoff -a && sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
三、Docker安裝
1.配置docker源
yum install -y wget wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
2.安裝docker環境依賴
yum install -y yum-utils device-mapper-persistent-data lvm2
3.安裝docker
yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y
4.啟動docker並設定為開機自啟
systemctl start docker && systemctl enable docker
5.配置映象加速
# 這裡使用的是我的阿里雲映象加速,可以自己去阿里雲配置一個 mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://mxdu1aof.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF
6.配置ipv4.ip_forward
vim /etc/sysctl.conf # 在sysctl.conf的最後加入下面這一行 net.ipv4.ip_forward=1
7.重新啟動守護程序並重啟docker
systemctl daemon-reload && systemctl restart docker
四、安裝Docker版Jenkins
1.下載jenkins映象,選擇jenkins/jenkins版本
2.由於jenkins的docker版本沒有dotnetcore環境,所以,我們要基於jenkins/jenkins映象構建包含dotnetcore3.1環境的jenkins映象
mkdir -p /root/jenkins
Dockerfile檔案程式碼如下:
FROM jenkins/jenkins # Switch to root to install .NET Core SDK USER root # Show distro information! RUN uname -a && cat /etc/*release # Based on instructiions at https://www.microsoft.com/net/download/linux-package-manager/debian9/sdk-current # Install dependency for .NET Core 3 RUN apt-get update RUN apt-get install -y curl libunwind8 gettext apt-transport-https # Based on instructions at https://www.microsoft.com/net/download/linux-package-manager/debian9/sdk-current # Install microsoft.qpg RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg RUN mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/dotnetdev.list' # Install the .NET Core framework RUN apt-get update RUN apt-get install -y dotnet-sdk-3.1
3.將Dockerfile檔案拖入到/root/jenkins目錄中,構建映象
cd /root/jenkins
docker build -t my-docker-jenkins .
4.通過my-docker-jenkins映象執行容器
docker run -d --name jenkins -p 8080:8080 \ -v /usr/bin/docker:/usr/bin/docker \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /home/jenkins_home:/home/jenkins_home \ -v /usr/jenkinsci/:/usr/jenkinsci/ \ my-docker-jenkins
第一行:將映象容器以後臺方式執行並命名為jenkins,並對外開放8080埠對映到jenkins內部的8080埠
第二行:將宿主機上面的docker命令列掛載到容器上面,不然在執行jenkins任務時用到docker命令時會報docker:command not found
第三行:將宿主機上的docker.sock掛載到容器中的相應位置,使得容器中的docker命令列能跟宿主機的docker通訊
第四行:掛載我們建立的配置檔案存放目錄到指定的資料夾
第五行:掛載我們建立的配置檔案存放目錄到指定的資料夾,用於存放CICD的模板
5.執行jenkins
在瀏覽器輸入192.168.81.103:8080
通過映象獲取密碼
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
安裝外掛(如果遇到外掛安裝失敗,重試就好了)並配置第一個使用者名稱和密碼
安裝後配置完使用者,就可以使用Jenkins了
五、使用Jenkins建立任務
1.新建任務
2.配置任務,通過gitee倉庫
我gitee上隨便弄了個測試,由於是公開的就不需要憑證,如果是私有的gitlab的,就新增Credentials,如下所示
3.構建觸發器
構建觸發器比如在git提交程式碼後,Jenkins自動拉取程式碼後立即構建,這一步我們需要先在系統設定-->外掛管理安裝響應的外掛,例如gitlab外掛,我就把gitlab所有相關外掛一併安裝上。
構建觸發器如下,你也可以根據自己所需配置相關資訊
4.配置shell指令碼
由於我把shell指令碼放在/usr/jenkinsci目錄下了,也在啟動容器的時候掛載了卷 -v /usr/jenkinsci/:/usr/jenkinsci/ ,所有在容器內部是獲取的到的,也可以用以下命令處理
#!/bin/bash -ilex dotnet restore mkdir -p /tmp/dotnet/publish/ dotnet publish -c Release -r linux-x64 -o /tmp/dotnet/publish/ echo "Successfully!!!! ^ please see the file ." cd /tmp/dotnet/publish/ PROJECT_NAME=${JOB_NAME,,} IMAGE_VERSION=`date +%Y%m%d%H%M%S` IMAGE_VERSION_RANDOM=$RANDOM IMAGENAME=${JOB_NAME,,}$IMAGE_VERSION$IMAGE_VERSION_RANDOM echo 'start build image' # 專案的Dockerfile屬性需要設為複製模式,不然publish後找不到 docker build -t $IMAGENAME . echo 'end build image' rm -rf /tmp/dotnet/publish/
5.配置完後立即構建,看看有沒有失敗的,如果失敗了,可以點選構建的版本看看控制檯輸出什麼錯誤,我是遇到挺多坑的,就是由於自己沒配置好或者shell指令碼沒寫好。
主要有以下錯誤&分析&解決:
1.xxx.sh:not found
修改錯誤:在Execute shell中第一行改為這句話:#!/bin/bash -ilex
2.docker: command not found
修改錯誤:在docker run -d --name jenkins時,一定要對映-v /usr/bin/docker:/usr/bin/docker
解決完bug也就構建成功了
六、參考
https://mp.weixin.qq.com/s/ngUfM27drd3fApC2PlJkOQ
https://www.cnblogs.com/YahuiWang/p/jenkins-docker-dotnet-core-publish.html