Feedback asking about my first CI/CD plan - continuous-integration

I'm starting to the CI/CD pipelines and I wanted to have your opinions about a sketch of a pipeline that i done.
I'm trying to craft a Proof Of Concept of a full automated pipeline using Github and CircleCI.
If you have any suggestion or anything, tell me that!
Here is a picture of my sketch :
https://imgur.com/a/eaMuvX5
For now, only the CI is working like i want. (built test/linting and unit-test)
If you are curious, my app is here :
https://github.com/Etelcode/poc_ci_cd

Related

Best practices that programmers should follow when developing in a Continuous Integration and Continuous Deployment Environment

Hey guys I work with a team of four people and only two of us really push changes to the Master Branch. As a result we communicate regularly to ensure we are not working on the same file of the solution to avoid merge conflicts. Definitely not the best practices.
However, we will be bringing in more people to work with us and it was proposed to switch to a Continuous Integration and Continuous Deployment environment. I understand the concept of a CICD environment, but creating such environment will be the responsibility of another team.
My task however is coming up with a document for developers on how we should program going forward. Every time I Google something like "CICD Best Practices" I get results for building the CICD environment, however I am interested on best practices developers must follow when programming in a CICD environment as opposed to building a CICD environment.
I am aware of the obvious "Commit your changes often, document your code, use good names". So I am trying to track down any publication or sources (from Microsoft, Amazon, etc) that might mention best practices that are not so obvious. Could anyone point me in the right direction?
Please and thanks!
From my experience the best workflow is to restrict access to the master branch, no one should be allowed to push to it.
All changes should be made through PRs and pass all the tests defined in your cl pipeline.
In that way you can keep your master branch always with working code and deploy it directly to a staging environment. Once you have acceptable code on master you can make a release and have your CD deploy it to production.

Continuous delivery in bamboo

I am new to CI/CD . I want to implement continuous integration & continuous deployment using bamboo and server as web sphere.
You could please suggest any video tutorials for it. I can see many tutorials on Jenkins but I want to implement in bamboo.
Thanks
I would start with the official documentation. This will help you get familiar with CI/CD terminology and ultimately help you search for tutorials on specific items that you may be struggling with.
If you prefer a video format, Atlassian has published an entire tutorial series that is available here.

Jenkins pipeline usage for xcode

Are there instructions for using the xcode plugin from a jenkins pipeline?
I'm moving some freestyle projects to pipeline and have realised I've left a step out: Import developer profile. I'd like to know how to do that from a jenkins pipeline. I assume this should involve the xcode plugin, but it does not come up in the snippet editor and I see no documentation.
I got a steer to this on the Jenkins site.
IF on the snippet generator, you look under steps, there is something that generates xcode-related fragments. Don't know why this does not come out under xcode, like other plugins, but I guess that is a different matter.
I have not yet worked out how to do my original scenario but I guess I need to sit down some time and give it a good try. In the meantime, I'm using secret text for the password I need.

Combining Jenkins Pipeline and UrbanCode Deploy to achieve Continuously Delivery?

The best part of UrbanCode Deploy is it models a component based architecture application, and its deployment environment so well that everybody can understand in 10 minutes. Very initiative, flexible and powerful. Don't know if there is another tool does this well.
Jenkins Pipeline can orchestra the Continuously Delivery workflow at the higher level to include the build, test, etc.
Does it make sense?
There's a new UCD plugin for Jenkins that adds nice integrations with the Jenkins 2.0 pipeline. I'm going to poke the developers since there doesn't seem to be a nice video showing it, but there is documentation (and a link to the plugin) out here:
https://developer.ibm.com/urbancode/docs/jenkins-build-step-integration-with-ibm-urbancode-deploy/
I think the idea is that you can use Jenkins pipeline to govern the flow of a build through early test environments, while UCD owns the late test environments / production when the pipeline operates more at the snapshot level. Would love your feedback!
Today, in my production environment, i use Jenkins to manage my build (like a "build pipeline" with some tests) and put all my build results into Urbancode Code station. Urbancode is doing all my deploy work perfectly, the integration with Jenkins is beautiful, easy and fast. I have read some articles about Jenkins delivery pipeline and do not recommend use it.
Check it out
https://www.thoughtworks.com/radar/tools

Continuous integration (CI) with Phabricator?

I tried continuous integration tools Travis CI, CircleCI and codeship, but found none of them provide support document for phabricator. Does anyone have ideas about how to do continuous integration (CI) with Phabricator?
I have done an integration with Travis-CI by adding post diff and land hooks to Phabricator to push diffs as branches to GitHub where Travis looks for branch updates. As far as I know, Travis-CI integrates only with GitHub, so if your main repo is there and Phabricator is pointing to it, it can be done.
If you want to take this approach, the place to start is with creating your own ArcanistConfiguration and overriding didRunWorkflow. See also how to create a new library. The API documentation is pretty good, but I had to go through some trial and error to get what I wanted. The Phabricator people are probably happy to answer questions.
You can also look into the Phabricator conduit differential.createcomment to script messages to diffs like so:
arc call-conduit --conduit="https://my.phabricator.com/" --arcrc-file="robot.arcrc" \
differential.createcomment <<EOF
{"revision_id":"1234","message":"Yer build done failed"}
EOF
Where robot.arcrc is an arcrc file with the credentials to push messages, and 1234 is the revision number. You would have to use the conduit API to get the revision number.
So, I think the answer is you may have to build your own custom solution depending on which CI integration for the CI tool you want to integrate with. And here's a discussion of Travis support for Phabricator.
Edit: Here's traphic, an example of extending arcanist to push diffs to branches on GitHub on arc diff and remove them on arc land. As Travis-CI looks for update from GitHub, it will build your diffs.
Side note: This is mostly a brain dump. I know good answers have more code examples and links are frowned on, but the question was pretty open ended and was looking for pointers, so I'm trying to be helpful.
If you are using Jenkins, the nice guys at Uber created a Jenkins Phabricator Differential plugin that makes it possible to really clean up your job configs (if you've already set them up using the links from zerodiff's post).
Might be worth noting that Phabricator's tool to do continuous integration (i.e. Harbormaster) is currently under development.
You can find this in a table in their comparison page. See http://phabricator.org/comparison/

Resources