【CI】Jenkins环境配置

1. Jenkins环境安装

在官网下载Jenkins, 地址是: http://jenkins-ci.org/content/thank-you-downloading-os-x-installer 

当前最新安装包为:jenkins-1.526.pkg.

直接点击安装完成,完成后会在application下产生一个jenkins的文件夹, 自动启动safari,并进入Jenkins页面。

**也可以下载jenkins.war, 然后运行java -jar jenkins.war,进行安装。

【问题1】安装完成,自动启动safari,但进入localhost失败,提示无法访问localhost。

【A】检查Java环境是否安装好;若java环境未安装好,重新安装配置java环境。


2. 运行Jenkins

http://localhost:8080

就可以进入jenkins的主界面。

如果安装完成后出现启动不了的情况,执行以下命令,清除下既存的plist信息:

sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
sudo mkdir -p /Users/Shared/Jenkins/Home
sudo chown -R daemon /Users/Shared/Jenkins
sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist


【注】直接在浏览器运行localhost启动jenkie,会导致一些问题,比如用Xcode去build的时候,会有code signin 的问题,导致在终端能编译通过的脚本,在Jenkie下无法通过。

而出现这个问题的原因在于用户权限问题,用浏览器运行启动jenkie,jenkie的工作目录会建立在/Users/Shared/Jenkins下,导致它没有权限访问系统的keychains,需要通过一系列的步骤去给予它这个权限。

具体过程参见: http://stackoverflow.com/questions/9245149/jenkins-on-os-x-xcodebuild-gives-code-sign-error

正确的启动方式是:

sudo launchctl unload /Library/LaunchDaemaons/org.jenkins-ci.plist

 java -jar /Applications/Jenkins/jenkins.war --httpPort=8080

这时,jenkies会在/Users/[user name]/.jenkins 下面建立工作目录,从而它就有权限去获取相关的keychain。


3. Jenkins配置

(1) Xcode插件安装

Manage Jenkins->Manage Plugins->add Xcode Plugin "Xcode Integration"

(2)新建Job

a. New Job -> Job Name->free-style software project->OK

b.进入Subversion->输入SVN地址,并验证;

C.在Build设置中选择Xcode,并设置;在实际项目中,都是用脚本实现。


4. XCode插件配置

a. 在“Add Build Step”选项中选择Xcode

b. 配置build环境:

Target:写入Project中对应的Target,比如“Helloworld”

SDK:可以为空,iPhoneSimulator4.1.sdk等;

Configuration: 设置build的模式,Debug,Release等等;

Xcode Workspace File:设置workspace的文件名;

Xcode Project Directory:设置工程文件对应的路径,工程文件不一定在系统根目录下;

Xcode Project File:Helloworld.xcodeproj,对应的工程文件名。

Build output directory: build结果输出的路径。

Build IPA? :是否需要build ipa文件;

Unlock Keychain? :Jenkins需要访问Keychain,获取响应的key,所以需要授权。选上就自动解锁。需要提供密码。

设置完成之后,保存即可。

可以通过控制台查看最终的配置结果,运行的命令是:

[bld] $ /usr/bin/xcodebuild -target NexGen -configuration Debug build

根据可以这个命令对比,设置的是否正确。


【问题】KeyChain无法解锁,Jenkin没有权限访问Keychain。

【A】给于Jenkins用户权限,

security <CERT_FILE> import -k $HOME/Library/Keychains/login.keychain -Tcodesign


5. Jenkins默认的邮件通知


A. 采用Jenkins默认的邮件通知,在项目配置的”Post-build Actions”选项中勾选”Email Notification”标签,并在“Recipients”中填入邮件地址即可。

但是,这样每次编译都会邮件通知,有点烦,因此可选择邮件通知的插件,更优。
B. 采用邮件通知插件
下载插件email-ext对应的*.hpi文件,拷贝到路径$JENKINS_HOME/plugins,之后需要重新启动Jenkins。
然后项目配置中,在”Post-build Actions”选项中,不选择”Email Notification”标签,而勾选”Editable Email Notification”标签。并在Global Recipient List中填入接收邮件的地址,其它默认即可。
设置完成后,编译错误才会通知对应的邮箱地址


【设置系统邮件地址】

Jenkins->Manage Jenkins->Configure system ->Jenkins location- >System admin Email Address-> 邮件的发信人地址

【配置Extend Email Notification】

Default Recipients  : 收件人地址

Default Content Type: Html

Default Content:

<font size=4>Hi WNC developer,</font>    

</br>
</br> 

<font color="#0B610B" size=4>Check console output at </font> 
<a href="${BUILD_URL}console"> ${BUILD_URL}console </b></a>
<font color="#0B610B" size=4> to view the results.</font>  

</br>

 <html> <body leftmargin="10" marginwidth="5" topmargin="8" marginheight="4" offset="4">
 <table width="95%" cellpadding="0" cellspacing="0"  style="font-size:11pt; font-family:Tahoma, Arial, Helvetica, sans-serif"> 

</br>
<tr>
 <td>
<h2><font color="#0000FF">Build Result - ${BUILD_STATUS}</font></h2></td> 
</tr> 

<tr> 
<td><br/><b><font color="#0B610B">Build Information:</font></b><hr size="2" width="100%" align="center"/></td>
 </tr> 

<tr> <td> <ul>  <li>Project Name - ${PROJECT_NAME}</li> 
			<li>Build Results(For xxx) - <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
			<li>Project Url - <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> 
			<li>Build Url - <a href="${BUILD_URL}">${BUILD_URL}</a></li> 
			<li>SVN Revision - ${SVN_REVISION}</li> 
</ul> </td> </tr> 

<tr> <td><b><font color="#0B610B">Changes Since Last Successful Build:</font></b><hr size="2" width="100%" align="center"/></td> </tr> 

<tr> <td> <ul> <li>View history changes here: - <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li> </ul>             ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="Changes for Build #%n:<br/>%c<br/>", showPaths=true, changesFormat="<pre>[%a]<br/>%m</pre>", pathFormat="    %p"}    
</td> </tr> 

</br>

<tr> <td><b><font color="#0B610B">Failed Test Results</font></b><hr size="2" width="100%" align="center"/></td> </tr> 
<tr> <td> <pre style="font-size:11pt; font-family:Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre> <br/> </td> </tr> 

<tr> <td> <ul>  <li>Detail test result at - <a href="${BUILD_URL}/testReport">${BUILD_URL}testReport</a></li>  </ul> </td> </tr> 

</br>

<tr> <td><b><font color="#0B610B">Build Logs (last 100 lines):</font></b><hr size="2" width="100%" align="center"/></td> </tr> 
<tr> <td>           Test Logs (if test has ran): <a href="${BUILD_URL}console">Detail Log</a> <br/><br/> </td> </tr>
 <tr> <td> <textarea cols="90" rows="50" readonly="readonly"  style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea> </td> </tr> </table> 


</body> 
</br>
</br>
<font size=4>Best Regards,</font>
</br>
<font size=4>Continous Integrate Server</font>
</br>
</br>

</html>


【配置Email Notification】

SMTP Server: outbound.XXX.com

Default user e-mail suffix : @xxx.com

保存之后,可以测试配置是否成功,如果成功收件人会收到响应的邮件通知。


【在Mail 的advance中设置trigger】

Fail:build失败的时候发送邮件;

Success:成功的时候发送邮件。


6. 载入证书文件

环境配置完成后,直接去build now还是会出错,因为IOS的一些证书没有载入到Jenkins所在的机器中。需要把.mobileProvision文件

添加到Keychains中。操作方式为,双击打开即可。

如果显示,该provision为无效文件,则需要证书文件。即与该provision文件对应的.cer文件,或授权文件.p12.


当Keychains中的证书文件显示为valid时,再次运行Build Now,编译通过


7. Jetty 配置

配置Jetty,可以让device通过wifi安装ipa包。

1. 下载Jetty 路径为:http://dist.codehaus.org/jetty/jetty-6.1.14/jetty-6.1.14.zip

2.  解压zip包,进入Jetty的目录,运行命令:java -jar start.jar,则jetty启动成功。  需要安装Maven,在MAC环境下一般已经自带Maven

3. 进入Jetty目录下/etc/jetty.xml,修改默认端口为8081,。 8080一般为Jenkin使用。

4. 在jetty目录下webapps下建立新文件夹,命名为newJob,在newJob中添加index.html, 该html中即为设备登录jetty时显示的页面。

大致内容如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>My Cool app</title>
<!-- Art Direction Styles -->

</head>
<body>
<ul>
    <li><a href="itms-services://?action=download-manifest&url=http://10.140.48.168:8081/ipa/***.plist">
                Install WNC Application</a></li>
</ul>
</body>
</html>

其中***.plist为工程对应的说明文件,用XCode打开,里面有三个项:ipa的地址,应用程序对应的图片地址。

分别将***.ipa,图片文件考入.plist中描述的地址即可。


5. Deveice上,打开浏览器,输入:http://10.140.48.168:8081/ipa/index.html 就能看到安装的链接,点击即可安装。


【Q1】安装失败,是ipa文件不对?

【A1】安装到75%左右,提示无法安装;真机连上XCode,应用程序也无法安装到真机上,提示no dictionary字样; 这是由于build的版本不对,build出来

的target是6.1,而真机是6.0版本,故无法安装。


【Q2】证书问题,使用Ios_IN_HOUSE.mobileprovision证书,build无法通过。

【A1】in_house.mobileprovision下载到本地后,双击该文件,XCode打开,会显示该证书文件是否有效。如果有效,邮件点击该证书文件,选择“Reveal Profile 

in Finder”, Finder会导向XCode实际使用的证书文件(以字母数字混合命名),这个.mobileprovision文件就是build in house的时候需要使用的证书文件。


【Q3】使用build脚本去build in house的包时候,可以在XCode的工程设置中配置好in-house需要的包,然后直接运行命令:

xcodebuild -project NexGen.xcodeproj -alltargets -configuration In-House-Distribution -sdk $SDKNAME

或者,使用

xcodebuild -project NexGen.xcodeproj -alltargets -configuration In-House-Distribution -sdk $SDKNAME CODE_SIGN_IDENTITY="******." PROVISIONING_PROFILE="******" build

**处即为证书文件对应的信息。前者为显示的名字,后者对应ID号。



<think>好的,我现在需要帮助用户了解如何在Jenkins中配置CI/CD流程。首先,我要回顾一下用户的问题和相关引用内容,确保回答准确。 用户提到了几个引用,比如引用[5]说明Jenkins是用于持续集成的工具,引用[2]提到Jenkins X用于Kubernetes集成,还有引用[3]关于工具链的选择。这些信息可能和配置流程相关。 首先,配置JenkinsCI/CD流程通常包括安装插件、创建任务、设置源码管理、构建触发器和部署步骤。根据引用[1],用户可能需要进入Manage Jenkins配置全局工具,比如JDK、Git等。然后,引用[4]中的SonarQube扫描示例可能涉及构建步骤中的脚本执行。 用户可能需要分步骤的指导,比如如何创建流水线项目,编写Jenkinsfile,以及集成Docker和Kubernetes。引用[2]提到的Jenkins X和Helm可能属于最佳实践部分,适合在优化或高级配置中提及。 另外,需要确保回答结构清晰,按照安装、配置、创建任务、编写流水线脚本、触发构建和部署的顺序进行。同时,引用相关的地方要正确标注,比如配置全局工具引用[1],集成Kubernetes引用[2],CI/CD工具链引用[3],SonarQube扫描引用[4]。 可能还需要考虑用户的实际环境,比如是否使用Docker,是否在Kubernetes集群中部署,是否需要代码质量检查工具。因此,在步骤中加入这些可选部分,并引用相应的内容。 最后,生成相关问题时要覆盖用户可能的后续疑问,比如权限管理、分布式构建、与其他工具的集成等,确保问题相关且有价值。</think>### 如何在 Jenkins 中配置 CI/CD 管道 #### 1. **环境准备与工具安装** - **安装 Jenkins** 从[Jenkins官网](https://www.jenkins.io/)下载适合操作系统的安装包,完成基础配置。确保已安装 Java 运行时环境(JRE/JDK)。 - **配置全局工具** 在 Jenkins 主界面点击 `Manage Jenkins` → `Global Tool Configuration`,设置 JDK、Git、Maven/Gradle 等工具的路径或选择自动安装[^1]。 ```bash # 示例:配置 Git 路径 /usr/bin/git ``` #### 2. **创建流水线项目** - **新建任务** 点击 `新建Item` → 输入任务名称 → 选择 `流水线`(Pipeline)→ 点击 `确定`。 - **配置源码管理** 在 `Pipeline` 选项卡中,选择源码仓库类型(如 Git),填写仓库 URL 和凭证。例如: ```bash https://github.com/your-project.git ``` #### 3. **编写 Jenkinsfile** 在项目根目录创建 `Jenkinsfile`,定义流水线阶段: ```groovy pipeline { agent any stages { stage('Checkout') { steps { git 'https://github.com/your-project.git' } } stage('Build') { steps { sh 'mvn clean package' // 或 gradle build } } stage('Test') { steps { sh 'mvn test' } } stage('Deploy') { steps { sh 'kubectl apply -f deployment.yaml' // 示例:Kubernetes 部署 } } } } ``` #### 4. **集成代码质量检查(可选)** 在 `Build` 阶段后添加代码扫描步骤,例如 SonarQube: ```groovy stage('Code Analysis') { steps { withSonarQubeEnv('SonarQube-Server') { sh 'mvn sonar:sonar' } } } ``` 参考 SonarQube 配置步骤[^4]。 #### 5. **设置触发器与自动化** - **Webhook 触发** 在 Jenkins 任务设置中,勾选 `GitHub hook trigger for GITScm polling`,并在 GitHub 仓库的 Webhooks 中添加 Jenkins 服务器的 URL(如 `http://<jenkins-ip>/github-webhook/`)。 - **定时构建** 使用 Cron 表达式(如 `H/15 * * * *` 表示每 15 分钟构建一次)。 #### 6. **部署到 Kubernetes(高级实践)** 若需云原生部署,可结合 Jenkins X 或 Helm: ```groovy stage('Helm Deploy') { steps { sh 'helm upgrade --install my-app ./charts' } } ``` Jenkins X 提供了预置的 Kubernetes 集成流水线,支持 GitOps 流程[^2]。 --- ### 最佳实践 1. **使用声明式流水线** 优先使用 `Jenkinsfile` 而非自由风格项目,便于版本控制和复用。 2. **容器化构建环境** 在流水线中通过 `agent { docker 'maven:3.8.4' }` 指定容器,确保环境一致性。 3. **密钥管理** 使用 Jenkins 的 `Credentials Binding` 插件安全存储数据库密码、API Token 等敏感信息。 4. **并行化阶段** 对独立任务(如单元测试与静态分析)启用并行执行: ```groovy stage('Parallel Tasks') { parallel { stage('Test') { steps { sh 'mvn test' } } stage('Lint') { steps { sh 'npm run lint' } } } } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值