linux环境jenkins安装配置
jenkins简介
- Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。
持续集成的意义
- 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量。
- 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能。
- 持续集成利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。
持续集成组件
- 一个自动构建过程,包括自动编译、分发、部署和测试。
- 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,例如SVN、GIT代码库。
- 一个jenkins持续集成服务器。
jenkins安装部署
在linux服务器中部署jenkins server
- 安装jdk。jenkins的运行需要依赖jdk。
执行命令yum install -y java-1.8.0-openjdk-devel.x86_64。安装完成后使用java -version查看安装信息。如下图:
此时jdk安装完成,安装在/usr/lib/jvm中。
安装jenkins
- 首先配置带有jenkins的yum源。输入如下两条命令:
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
- yum安装jenkins。yum install jenkins -y。
注意:这里使用的源下载速度缓慢,可以采用国内镜像,这里使用了华为镜像下载、安装。步骤如下:
- 进入华为镜像jenkins。https://mirrors.huaweicloud.com/jenkins/redhat-stable/
- 选择需要的版本,wget到本地。如:wget https://mirrors.huaweicloud.com/jenkins/redhat-stable/jenkins-2.222.1-1.1.noarch.rpm
- yum install jenkins-2.222.1-1.1.noarch.rpm
完成安装截图如下:
- 配置jenkins启动用户及端口号
- vim /etc/sysconfig/jenkins。
- 修改JENKINS_USER=“root”,JENKINS_PORT=“8081”。
- 修改完成之后保存退出。修改截图如下:
- 启动jenkins服务
systemctl start jenkins
systemctl enable jenkins
- 此时安装完成,在浏览器中输入ip + 端口号即可进入jenkins页面,如下图所示:
- 经过短暂等待之后,进入如下界面,根据提示从/var/lib/jenkins/secrets/initialAdminPassword中查看密码并粘贴到此处完成登录即可。
- 选择安装推荐的插件或者自定义安装的插件,这里我们选择默认插件安装,安装完成之后进入注册界面,在注册完成之后即可使用jenkins持续集成。完成后如下图所示:
注意:如果在安装插件时出现“无法连接到Jenkins”,则systemctl stop jenkins关闭jenkins服务,然后修改/var/lib/jenkins/config.xml,将true 修改为:false,并且删除以下两个标签和标签内的所有内容<authorizationStrategy …/>和<securityRealm …>到。之后重新systemctl start jenkins即可。删除后config.xml内容如下:
<?xml version='1.1' encoding='UTF-8'?>
<hudson>
<disabledAdministrativeMonitors/>
<version>2.222.1</version>
<installStateName>NEW</installStateName>
<numExecutors>2</numExecutors>
<mode>NORMAL</mode>
<useSecurity>false</useSecurity>
<disableRememberMe>false</disableRememberMe>
<projectNamingStrategy class="jenkins.model.ProjectNamingStrategy$DefaultProjectNamingStrategy"/>
<workspaceDir>${JENKINS_HOME}/workspace/${ITEM_FULL_NAME}</workspaceDir>
<buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
<jdks/>
<viewsTabBar class="hudson.views.DefaultViewsTabBar"/>
<myViewsTabBar class="hudson.views.DefaultMyViewsTabBar"/>
<clouds/>
<scmCheckoutRetryCount>0</scmCheckoutRetryCount>
<views>
<hudson.model.AllView>
<owner class="hudson" reference="../../.."/>
<name>all</name>
<filterExecutors>false</filterExecutors>
<filterQueue>false</filterQueue>
<properties class="hudson.model.View$PropertyList"/>
</hudson.model.AllView>
</views>
<primaryView>all</primaryView>
<slaveAgentPort>-1</slaveAgentPort>
<label></label>
<crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer">
<excludeClientIPFromCrumb>false</excludeClientIPFromCrumb>
</crumbIssuer>
<nodeProperties/>
<globalNodeProperties/>
</hudson>
在容器中部署jenkins server
安装docker容器
- 安装并启动docker服务
yum install docker -y
systemctl enable docker
systemctl start docker
安装jenkins镜像
- docker search jenkins
查看Docker Hub上可用的jenkins镜像。如下图所示,其中docker.io/jenkinsci/blueocean是jenkins官方推荐镜像。 - docker pull jenkinsci/blueocean
完成后使用docker images命令查看是否成功。如下图所示
运行jenkins镜像
- 方式一:直接运行,运行期间产生的所有数据都保存在容器内部,容器销毁,数据丢失。
docker run \
--name jenkins-blueocean \
-d \
-p 8081:8080 \
-p 50001:50000 \
jenkinsci/blueocean
- 方式二:Docker会在宿主机上创建一个数据卷jenkins-data,容器映射该卷以持久化数据。
docker run \
--name jenkins-blueocean \
-d \
-p 8081:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
jenkinsci/blueocean
注意:8081端口用来公开访问Web界面,50000端口允许访问远程Java(JIRA)API。
这里我使用了第二种方式启动一个Jenkins容器应用:
- 创建jenkins文件夹mkdir /dogsheng/jenkins
- 运行命令
docker run --name jenkins-blueocean -d -p 8081:8080 -p 50000:50000 -v /dogsheng/jenkins/:/var/jenkins_home jenkinsci/blueocean
注意:其中8080端口(冒号后)是docker端口,8081端口(冒号前)为宿主机的端口,可以通过宿主机ip+8081端口号来访问jenkins页面,访问50000端口可以获取到端口信息。
注意:如果页面访问不成功,请查看宿主机的8081端口是否没有启用或者被占用。 - docker ps查看是否已经在运行,如下图所示。
- 通过ip + 8081登录页面,步骤与“在linux服务器中部署jenkins server”章节大体相同。结果如下图:
注意:此时密码存放在我们挂载的目录。这里密码存放在/dogsheng/jenkins/secrets/initialAdminPassword路径下。